Исключение «PPConnectionException» выдается в адаптивном запросе PayPal «Оплата»

Я интегрировал адаптивные платежи PayPal в один из плагинов WordPress. Мой функционал полностью готов и работал до вчерашнего дня. Однако, когда я начал с финального тестирования, я застрял с этим исключением —

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

Решение

У меня такая же проблема. Похоже, что PayPal вчера внес некоторые изменения в ответ на проблему безопасности. Загрузка новой версии PayPal PHP SDK, которая была только что выпущена, должна исправить это

https://github.com/paypal/rest-api-sdk-php/releases/tag/v0.13.1

3

Другие решения

Когда я делаю любое из следующих изменений в файле PPHttpConfig.php, это работает —

CURLOPT_SSLVERSION => 4

ИЛИ ЖЕ

CURLOPT_SSLVERSION => 1

2 не работает и 3 выбрасывает исключение.

Я держу номер версии 1 а пока как я вижу номер версии 3 заменяется 1 в ссылке, предоставленной @Phil

Я также отредактировал свой ответ для еще одного небольшого запроса. Если бы кто-нибудь мог ответить на это, было бы здорово.

1

Проблема безопасности теперь печально известна ПУДЕЛЬ атака, которая делает SSLv3 совершенно небезопасным.

От источник cURL, Вы можете увидеть, что означают значения (// комментарии мои):

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.

1
По вопросам рекламы [email protected]