繁体   English   中英

'不支持的SSL协议版本'Curl OpenSSL版本混乱(PayPal API PHP PHP)

[英]'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
  • 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正在对其服务进行更改,这些服务要求OpenSSL至少为1.0.1c(根据我的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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM