Paypal PDT - SSL 连接错误

标签 paypal paypal-sandbox paypal-pdt

我使用此代码处理 Paypal 支付数据传输 (PDT):

$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
$tx_token = $_GET['tx'];
$auth_token = "my_token";

$fields = array(
    'cmd' => '_notify-synch',
    'tx' => $tx_token,
    'at' => $auth_token,
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,  $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);

$res = curl_exec($ch);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);

echo 'Curl error: ' . curl_error($ch);

echo "status:   " . $status;
curl_close($ch);

我得到:

Curl error: SSL connect error
status: 0

我尝试使用相同的 URL 在 Postman 中制作 API:www.sandbox.paypal.com 并使用相同的参数(cmd、at、tx),我得到了成功响应。我做错了什么?

最佳答案

PayPal 已将其沙盒 API 端点升级到 TLS 1.2。您可以在 TLS 1.2 and HTTP/1.1 Upgrade Microsite 上找到有关升级及其何时影响生产的更多信息。 .

您需要 1.0.1c 或更高版本的 OpenSSL 以及最新版本的 libcurl。 至于您的具体代码,您可能想要执行以下操作:

curl_setopt($ch, CURLOPT_SSLVERSION, 6);//CURL_SSLVERSION_TLSv1_2 = 6

此外,您可能应该将 CURLOPT_SSL_VERIFYHOST 保留为 2 以验证端点的 SSL 证书。

您可以在 PayPal TLS update repository 找到更多信息针对特定的语言环境要求。

关于 Paypal PDT - SSL 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35535652/

相关文章:

php - 我们无法验证您的信息。请再试一次

Paypal Adaptive API 返回带有 token 的 URL 映射

paypal - 我可以用 paypal uk 实现类似 groupon/kickstarter 的支付系统吗

Paypal 电子支票响应

paypal - 在 PayPal 开发人员中创建沙盒帐户返回错误状态

php - Paypal PDT 脚本无法使用 cURL

php - 连接到 paypal 不起作用

PayPal PDT 在沙箱中工作但不实时

PayPal 沙箱请求很慢,实时站点请求是否更快?

paypal - 未登录 Paypal 沙箱帐户