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

标签 php ssl curl paypal

我正在尝试使用 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(专用)
  • Apache 2.4.18
  • PHP 5.6.18
  • CURL 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

最佳答案

curl_setopt($ch, CURLOPT_SSLVERSION,3);

关于php - 'Unsupported SSL protocol version' Curl OpenSSL version confusion (paypal api php sdk),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35319183/

相关文章:

android - 在android中为cCURL添加ssl证书有错误

php - 如何在foreach循环中打印同一个表中的相同类别数据和不同表中的不同数据

php - 验证 wordpress 帖子中的自定义字段

php - 公司概况点击量排名前 10 名的公司的 SQL - 或者更好的解决方案?

wordpress - SSL 升级后 Wordpress 管理区域未正确加载

objective-c - SSL 的问题或我对它的误解

php - 验证 curl 是否使用 TLS

php - 使用 PHP 在我的 Owncloud 服务器上上传文件

php - 截断文本而不截断 HTML

ssl - 此站点无法提供安全连接 - 如何解决?