M1 - TLS 1.2 - Помилка підключення PayPal Express NVP CURL №35: Помилка підключення SSL


15

У мене є середовище розробок на старому сервісному запущеному завитку 7.19.7.

Нещодавно я помітив, що Paypal Express більше не працює і повертає помилку "Unable to communicate with the PayPal gateway.".

Копатись до журналів винятків, які ви можете бачити

exception 'Exception' with message 'PayPal NVP CURL connection error #35: SSL connect error' in /path/app/code/core/Mage/Paypal/Model/Api/Nvp.php:983
Stack trace:
#0 /path/app/code/core/Mage/Paypal/Model/Api/Nvp.php(616): Mage_Paypal_Model_Api_Nvp->call('SetExpressCheck...', Array)
#1 /path/app/code/core/Mage/Paypal/Model/Express/Checkout.php(381): Mage_Paypal_Model_Api_Nvp->callSetExpressCheckout()
#2 /path/app/code/core/Mage/Paypal/Controller/Express/Abstract.php(108): Mage_Paypal_Model_Express_Checkout->start('http://asdf...', 'http://asdf...', false)
#3 /path/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Paypal_Controller_Express_Abstract->startAction()
#4 /path/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('start')
#5 /path/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#6 /path/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#7 /path/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#8 /path/index.php(210): Mage::run('uk', 'store')

Я не знаю, чи Paypal нещодавно змінив щось із своєї пісочниці, але зайшов до URL-адреси api-3t.sandbox.paypal.com на SSLLabs і побачив, що єдиний протокол, який вони підтримують, - це TLS 1.2.

Прочитавши налаштування версій протоколів у посібнику PHP, я з радістю додав наступне

nano +194 lib/Varien/Http/Adapter/Curl.php

curl_setopt_array($this->_getResource(), $options);

+curl_setopt($this->_getResource(), CURLOPT_SSLVERSION, 6);

return $body;

Чудово! Після апаші граціозного тепер я можу використовувати Paypal express. Однак я не радий, що мені довелося зламати ядро. Я також не радий, що мені довелося зламати ядро ​​в місці, яке є специфічним, curlа не Paypal.

Хтось має поради щодо правильного способу виправлення цього питання?

Редагувати:

Тільки підтверджуючи деякі додаткові висновки, це не впливає на стандарт Paypal в Magento, оскільки він, схоже, не використовується curlпід кришкою. Ми отримували помилкові негативи на певних машинах.

Питання: "Як це, можливо, працює! Curl не може підключитися до пісочниці в командному рядку"

A: "Він використовує стандарт Paypal, а не express, він не використовує curl


Старі мертві локони ... PHP стане наступним номером. Оновіть ОС на сервері. Отримайте VirtualBox і запускайте віртуальні машини, це набагато простіше. TLS рухається далі.
Лабораторії Фіаско

Відповіді:


9

У нас була ця сама проблема, і ми її просто усунули, оновивши бібліотеку curl з 7,19 до 7,40 ..

Виконайте таку команду: curl -v -s https://api-3t.sandbox.paypal.com/nvp

Якщо ви отримаєте помилку SSL Connect, у вас є та сама проблема.

Ви можете скористатися наступним посиланням (відповідь №3) для інструкцій, як зробити це оновлення бібліотеки завитків: /programming/28495444/how-to-upgrade-php-curl-to-version-7- 36-0

Ми також спробували зламати, і це спрацювало, але ми не були задоволені тимчасовим рішенням.

Я сподіваюся, що ця інформація допоможе вам уникнути.


1
Після трохи чухання в голові ми згадали перезапустити PHP fpm, і тоді все почало працювати :) Дякую. Оновлення локон - це все, що потрібно.
Люк Роджерс

Будь-яке рішення, доступне для спільного хостингу?
Ракеш Шевал

4

Я також сьогодні зіткнувся з цією помилкою. Додавання наступного до app/code/core/Mage/Paypal/Model/Api/Nvp.phpрядка 945 принаймні вносить зміни в модуль Paypal Nvp замість бібліотек.

 try {
        $http = new Varien_Http_Adapter_Curl();

+       $http->addOptions(array(CURLOPT_SSLVERSION => 6));

Відповідно до сторінки керівництва констант згортання , ви також можете використовувати константу CURL_SSLVERSION_TLSv1_2замість того, 6якщо у вас версія PHP> = 5.5.19 або 5.6.3.


Дякуємо, що опублікували цей додатковий хакер! Переглянувши інші відповіді, ми вирішили проблему, оновивши curl. На щастя, ми запустили достатньо сучасну версію php, щоб це працювало :)
Люк Роджерс

Чудова відповідь, просто не редагуйте основні файли. Мені також подобається постійна довідка!
Роббі Аверилл

4

Пісочниця дійсно змінилася за останній тиждень, щоб прийняти лише TLS 1.2. З моїх тестів, TLS 1.2 запускається автоматично, якщо ви використовуєте PHP 5.5.19+ і досить недавню версію завитка (я використовую 7,29). Вам також потрібен OpenSSL 1.0.1+.

Оскільки ми все ще працює 5.3, нам також довелося додати той самий хак до ядра, але оскільки Magento все ще вимагає підтримки для 5.3, можливо, ми можемо очікувати скоро офіційного рішення (тим більше, що ці зміни також торкнуться виробничих систем Paypal у Червень).

Довідка: https://devblog.paypal.com/upcoming-security-changes-notice/


На щастя, на сервері працює php 5.5.24, тому оновлення curl було все необхідне.
Люк Роджерс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.