【问题标题】:Paypal Encrypted Button, encrypted valuePaypal 加密按钮,加密值
【发布时间】:2014-08-24 17:58:06
【问题描述】:

如何获取动态paypal html表单上的加密输入值?我的服务器端语言是 php。

这是我的html

<form action="https://www.paypal.com/cgi-bin/webscr" method="POST" class="block">
<input name="'.Cart_Form_Cart::FORM_TRY.'" type="hidden" value="1" />
<input name="'.Cart_Form_Cart::FORM_ACTION.'" type="hidden" value="checkout" />
<input type="submit" class="form-submit blue-button pointer margin-top-20" value="Proceed to Checkout" />
<input type="hidden" name="cmd" value="_s-xclick" />
<input type="hidden" name="encrypted" value="**NEED THIS VALUE**" />
</form> 

这是我的值和 curl 数组

$sendData = array(
     "METHOD" => "BMCreateButton",
     "VERSION" => "65.2",
     "USER" => "my-username",
     "PWD" => "my-pass",
     "SIGNATURE" => "my-sig",
     "BUTTONCODE" => "ENCRYPTED",
     "BUTTONTYPE" => "BUYNOW",
     "BUTTONSUBTYPE" => "SERVICES",
     "BUTTONCOUNTRY" => "GB",
     "BUTTONIMAGE" => "reg",
     "BUYNOWTEXT" => "BUYNOW",
     "L_BUTTONVAR1" => "item_number=$order_id",
     "L_BUTTONVAR2" => "item_name=purchase",
     "L_BUTTONVAR3" => "amount=$subtotal",
     "L_BUTTONVAR4" => "currency_code=GBP",
     "L_BUTTONVAR5" => "no_shipping=1",
     "L_BUTTONVAR6" => "no_note=1",
     "L_BUTTONVAR7" => "notify_url=http://www.abc.co.uk/paypal/ipn.php",
     "L_BUTTONVAR8" => "cancel_return=http://www.abc.co.uk/paypal/thanks",
     "L_BUTTONVAR9" => "return=http://www.abc.co.uk/paypal/return.php"
);

$url = 'https://api-3t.paypal.com/nvp?';

这是 curl 调用

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_URL, $url.http_build_query($sendData));
$encrypt = curl_exec($curl);
curl_close($curl);
return $encrypt;

更新:

我将所有内容都绑定到 php 中的一个变量,然后将该变量作为文本吐出到页面中。所以对于线

$text .= '<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----'.$encryption.'-----END PKCS7-----" />';

我该如何制作 '.$encryption.'从没有缩进输入值的新行开始?

【问题讨论】:

  • 您应该在证书页眉之后和证书页脚之前有换行符。 $text .= '&lt;input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----'."\n".$encryption."\n".'-----END PKCS7-----" /&gt;';

标签: php curl encryption paypal


【解决方案1】:

您可以在此处阅读官方 paypal 文档:https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/encryptedwebpayments/#id08A3I0P017Q 你可以使用他们的官方工具。

但是我正在使用这个 PHP 类的修改版本 https://github.com/josephholsten/swaplady/blob/master/library/PaypalEwp.php 代码陈旧且老套,但它可以工作。

您需要创建一个证书,将您的公共证书上传到贝宝,并获取他们将在上传后生成的证书 ID。您还需要他们的公共证书。您使用您的证书、私钥、证书 ID 和贝宝公共证书配置该类的实例。

所以基本上代码的实际作用是使用您的证书对数据字段进行签名,然后使用贝宝公共证书。

这是我的版本,我将它与 symfony 一起使用,因此前缀和 sfConfig,但除此之外它只是 PHP:https://gist.github.com/dincho/7d8d4ca4e1f5dede925b

请注意,示例文档(在类源代码中)中的 HTML 字段值位于新行且没有缩进 - 这非常重要

【讨论】:

  • 对如何获取证书 ID 和证书感到困惑。这些是否与我的用户名/密码和签名有关?
  • 您使用 openssl - the documentation has an example 生成您自己的证书,然后您需要将该证书上传到贝宝。之后,当您的证书被列出时,您将看到证书 ID。
  • 我关注了这个,但我收到“我们无法解密证书 ID”。我知道这是对的。
  • 我认为这可能与您所说的值中的新行有关。请查看我更新的问题
猜你喜欢
  • 2014-01-03
  • 2011-05-05
  • 1970-01-01
  • 2012-09-04
  • 2011-04-13
  • 2011-09-02
  • 1970-01-01
  • 2012-08-23
  • 2011-09-05
相关资源
最近更新 更多