我已经在我的一个WordPress插件中集成了PayPal自适应支付。我的功能已经完全准备好了,直到昨天仍然运行良好。但是,当我开始进行最终测试时,我遇到了这个异常 -
PPConnectionException Object ( [url:PPConnectionException:private] => https://svcs.sandbox.paypal.com/AdaptivePayments/Pay [data:PPConnectionException:private] => [message:protected] => error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
........) //I am just pasting necessary piece of error to understand the problem
我使用过此库 - https://github.com/paypal/adaptivepayments-sdk-php
我正在沙箱环境下测试它。
问题似乎与OpenSSL或cURL有关。
我搜索了很多解决方案,但没有找到任何有用的答案。
我也粘贴下面的示例代码(这是'并行'付款方式,但这个和其他方法都不起作用) -
require_once('../PPBootStrap.php');
require_once('../Common/Constants.php');
define("DEFAULT_SELECT", "- Select -");
if(isset($_POST['receiverEmail'])) {
$receiver = array();
/*
* A receiver's email address
*/
for($i=0; $i<count($_POST['receiverEmail']); $i++) {
$receiver[$i] = new Receiver();
$receiver[$i]->email = $_POST['receiverEmail'][$i];
/*
* Amount to be credited to the receiver's account
*/
$receiver[$i]->amount = $_POST['receiverAmount'][$i];
/*
* Set to true to indicate a chained payment; only one receiver can be a primary receiver. Omit this field, or set it to false for simple and parallel payments.
*/
$receiver[$i]->primary = $_POST['primaryReceiver'][$i];
}
$receiverList = new ReceiverList($receiver);
}
$payRequest = new PayRequest(new RequestEnvelope("en_US"), $_POST['actionType'], $_POST['cancelUrl'], $_POST['currencyCode'], $receiverList, $_POST['returnUrl']);
// Add optional params
if($_POST["memo"] != "") {
$payRequest->memo = $_POST["memo"];
}
$service = new AdaptivePaymentsService(Configuration::getAcctAndConfig());
try {
/* wrap API method calls on the service object with a try catch */
$response = $service->Pay($payRequest);
} catch(Exception $ex) {
require_once '../Common/Error.php';
/*******
***************************************************
PLEASE NOTE: the code is breaking here, an exception is thrown
***************************************************
*******/
exit;
}
$_POST
数据从另一个文件传递。
我已将上述代码集成到我的插件中(以WordPress方式)。事实上,如果我直接在一个单独的PHP文件中运行上述功能,即使这样也行不通。所以,很清楚问题是别的。问题似乎与PayPal和我的服务器有关。 我没有得到,所有的事情都工作到昨天,但突然停止了工作。此外,我的服务器上没有更新与openssl,cURL或PHP相关的内容。
非常感谢任何帮助。谢谢 !!!
修改
更改openssl版本号可解决此问题。但是,我仍然担心版本号1
和4
中哪个版本正确并且将来会有效。
此外,将值从3
更改为其他内容时是否存在任何安全问题?
如果有人能澄清这一点,那就太好了。再次感谢。
答案 0 :(得分:3)
我遇到了同样的问题。好像PayPal昨天为了解决安全问题而做了一些改变。下载刚刚发布的新版本的PayPal PHP SDK应该修复它
https://github.com/paypal/rest-api-sdk-php/releases/tag/v0.13.1
答案 1 :(得分:1)
当我在PPHttpConfig.php文件中进行以下任何更改时,它都有效 -
CURLOPT_SSLVERSION => 4
OR
CURLOPT_SSLVERSION => 1
2
无法正常工作,3
会抛出异常。
我暂时保留版本号1
,因为我可以看到版本号3
被@Phil共享的链接中的1
取代
我还为另一个小查询编辑了我的答案。如果有人能回答这个问题,那就太好了。
答案 2 :(得分:1)
安全问题是现在臭名昭着的POODLE攻击,它使SSLv3完全不安全。
从cURL source,您可以看到值的含义(//
评论我的):
enum {
CURL_SSLVERSION_DEFAULT, // 0, probably good
CURL_SSLVERSION_TLSv1, // 1, works
CURL_SSLVERSION_SSLv2, // 2, insecure
CURL_SSLVERSION_SSLv3, // 3, insecure
CURL_SSLVERSION_LAST /* never use, keep last */ // 4
};
因此1表示TLSv1并且评论说“从不使用”,1可能优于4,并且可能0优于1,因为它可能尝试使用TLSv1(或TLSv1.x或未来cURL中的任何默认值)版本)。
但是,我没有在多个系统上测试过0,并且使用“默认”SSL / TLS协议版本可能表示SSLv3而不是最新版本,因此无法正常工作,因此YMMV