贝宝 PDT - SSL 连接错误
Paypal PDT - SSL connect error
我使用此代码处理 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: www.sandbox.paypal.com 和相同的参数(cmd、at、tx)创建 API,我得到了成功响应。我做错了什么?
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_SSLLVERSION_TLSv1_2 = 6
此外,您可能应该将 CURLOPT_SSL_VERIFYHOST
保留为 2
以验证端点的 SSL 证书。
您可以在 PayPal TLS update repository 找到更多关于特定语言环境要求的信息。
我使用此代码处理 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: www.sandbox.paypal.com 和相同的参数(cmd、at、tx)创建 API,我得到了成功响应。我做错了什么?
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_SSLLVERSION_TLSv1_2 = 6
此外,您可能应该将 CURLOPT_SSL_VERIFYHOST
保留为 2
以验证端点的 SSL 证书。
您可以在 PayPal TLS update repository 找到更多关于特定语言环境要求的信息。