【问题标题】:Paypal PDT - SSL connect errorPaypal PDT - SSL 连接错误
【发布时间】:2016-06-02 19:37:13
【问题描述】:

我使用此代码处理 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 paypal-sandbox paypal-pdt


    【解决方案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 了解更多关于特定语言环境要求的信息。

    【讨论】:

    • 我添加了:curl_setopt($ch, CURLOPT_SSLVERSION, 6); // CURL_SSLLVERSION_TLSv1_2 = 6 并将 CURLOPT_SSL_VERIFYHOST 保留为 2。现在我没有收到 Curl 错误,但我收到了:status: 200 string(5) "FAIL " 谢谢!!
    • 我设法解决了这个问题(我的 tx 出现错误)。你的建议有效!!!谢谢!!
    猜你喜欢
    • 2015-04-02
    • 2017-07-16
    • 2017-09-10
    • 2016-08-05
    • 1970-01-01
    • 2016-04-28
    • 2014-07-16
    • 1970-01-01
    • 2012-11-18
    相关资源
    最近更新 更多