“不支持的SSL协议版本”卷曲OpenSSL版本混淆(PayPal api php sdk)


'Unsupported SSL protocol version' Curl OpenSSL version confusion (paypal api php sdk)

我正在尝试使用PayPal API php SDK(连接到沙箱(,但我遇到了以下异常:

Uncaught exception 'PayPal'Exception'PayPalConnectionException' with message 'Unsupported SSL protocol version'

我使用的代码如下:

$sdkConfig = array(
    "mode" => "sandbox"
);
$apiContext = new 'PayPal'Rest'ApiContext(
    new 'PayPal'Auth'OAuthTokenCredential(
        xxxxxx,     // ClientID
        xxxxxx      // ClientSecret
    )
);
$apiContext->setConfig($sdkConfig); 
$payer = new 'PayPal'Api'Payer();
$payer->setPaymentMethod("paypal");
$amount = new 'PayPal'Api'Amount();
$amount->setCurrency("USD");
$amount->setTotal("12");
$transaction = new 'PayPal'Api'Transaction();
$transaction->setDescription("creating a payment");
$transaction->setAmount($amount);
$redirectUrls = new 'PayPal'Api'RedirectUrls();
$redirectUrls->setReturnUrl("xxx");
$redirectUrls->setCancelUrl("xxx");
$payment = new 'PayPal'Api'Payment();
$payment->setIntent("sale");
$payment->setPayer($payer);
$payment->setRedirectUrls($redirectUrls);
$payment->setTransactions(array($transaction));
$payment->create($apiContext);

我已经对这个问题做了几个小时的研究,这似乎是使用 TLSv1.2 的 CURL 的问题。我使用以下代码来解决一些问题,结果在注释旁边:

$ch = curl_init('https://www.howsmyssl.com/a/check');
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
$json = json_decode($data);
echo $json->tls_version; // TLS 1.2
$curl_info = curl_version();
echo $curl_info['ssl_version']; // OpenSSL/1.0.0
echo OPENSSL_VERSION_TEXT; // OpenSSL 1.0.1e-fips 11 Feb 2013
  • Linux CentOS 6.32 (专用(
  • 阿帕奇 2.4.18
  • 菲律宾比索 5.6.18
  • 卷曲 7.38.0
  • PayPal API PHP SDK v1.6.4(截至目前最新(

我不确定是我的误解还是出了什么问题,但是当安装的版本为1.0.1e-fips时,CURL似乎使用的是OpenSSL 1.0.0。

PayPal正在对他们的服务进行更改,这些更改要求至少 1.0.1c 的 OpenSSL(根据 PHP 我有(,但上面的例外让我认为也许 CURL 正在使用自己的版本,这让我感到困惑。

这个问题提到了有人遇到了导致v.1.6.4的相同问题,但这并没有解决我的问题。这里的另一个问题更多地讨论了它。

在过去的几个小时里,我徒劳地试图通过 WHM 将 CURL 升级到 7.46 版(解决了第二个链接问题中的问题(,但它似乎不想超过 7.36。

为什么CURL声明其OpenSSL版本是1.0.0,而PHP的版本是1.0.1e-fips?我可以强制使用CURL的OpenSSL版本吗(PHP手册没有显示此选项(?

欢迎任何建议。

编辑:- 我的应用程序上的SSL证书是有效的SHA-256,如此处所述

curl_setopt($ch, CURLOPT_SSLVERSION,3(;