2016-02-10 45 views
0

我想用贝宝API的PHP SDK(连接到沙盒)的工作,但我运行到以下异常:“不支持SSL协议版本”卷曲的OpenSSL版本混乱(贝宝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工作,卷曲的问题。我用下面的代码摸出几样东西,其结果在评论旁:

$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(最新截至目前)

我不知道如果这是我的误解,或者如果出现问题,但似乎CURL正在使用OpenSSL 1.0.0,当安装的版本是1.0.1e-fips时。

PayPal正在对其服务进行更改,要求OpenSSL至少为1.0.1c(根据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

回答

0

curl_setopt($ CH,CURLOPT_SSLVERSION,3);

+0

谢谢,但PayPal API明确要求TLSv1.2,不能使用SSLv3。 –

+0

尝试降低CURL至7.33更稳定并可能解决问题 –