【发布时间】:2016-05-21 00:57:21
【问题描述】:
我正在尝试使用 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 的问题。我用下面的代码解决了一些问题,结果在 cmets 旁边:
$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(专用)
- Apache 2.4.18
- PHP 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 可能正在使用它自己的版本,这让我很困惑.
This issue 提到有人遇到与 v.1.6.4 相同的问题,但这并没有解决我的问题。另一个问题here 对此进行了更多讨论。
过去几个小时我徒劳地尝试通过 WHM 将 CURL 升级到版本 7.46(解决了第二个链接问题中的问题),但它似乎不想超过 7.36。
为什么 CURL 声明它的 OpenSSL 版本是 1.0.0,而 PHP 的版本是 1.0.1e-fips?我可以强制 CURL 使用 OpenSSL 版本吗(PHP 手册没有显示此选项)?
欢迎任何建议。
编辑: - 我的应用程序上的 SSL 证书是有效的 SHA-256,如上所述 here
【问题讨论】: