Paypal PDT - SSL连接错误

时间:2016-02-21 11:42:39

标签: 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

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

1 个答案:

答案 0 :(得分:1)

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

您需要OpenSSL为1.0.1c或更高版本以及最新版本的libcurl。 至于您的特定代码,您可能希望执行以下操作:

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

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

您可以在PayPal TLS update repository了解有关特定语言环境要求的更多信息。