M1 - TLS 1.2 - PayPal Express NVP CURL-Verbindungsfehler # 35: SSL-Verbindungsfehler

15

Ich habe eine Entwicklungsumgebung auf einem alten Server, auf dem Curl 7.19.7 ausgeführt wird.

Kürzlich habe ich festgestellt, dass Paypal Express nicht mehr funktioniert und einen Fehler zurückgibt "Unable to communicate with the PayPal gateway.".

Stöbern Sie in den Ausnahmenprotokollen, die Sie sehen können

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')

Ich weiß nicht, ob Paypal in letzter Zeit Änderungen an der Sandbox vorgenommen hat, habe aber die URL api-3t.sandbox.paypal.com in SSLLabs aufgerufen und festgestellt , dass TLS 1.2 das einzige von ihnen unterstützte Protokoll ist.

Nachdem ich mich mit dem Einstellen von Protokollversionen im PHP-Handbuch befasst hatte, fügte ich Folgendes hinzu

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

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

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

return $body;

Groß! Nach einem zierlichen Apache kann ich nun Paypal Express nutzen. Ich bin jedoch nicht glücklich, dass ich den Kern hacken musste. Ich bin auch nicht glücklich darüber, dass ich den Kern an einem Ort hacken musste, der spezifisch curlfür Paypal ist.

Hat jemand einen Rat, wie dieses Problem richtig behoben werden kann?

BEARBEITEN:

Nur um einige zusätzliche Ergebnisse zu bestätigen, hat dies keine Auswirkungen auf Paypal Standard in Magento, da es scheinbar nicht curlunter der Haube verwendet wird. Wir haben auf bestimmten Maschinen falsche Negative erhalten.

F: "Wie kann das funktionieren? Curl kann keine Verbindung zur Sandbox auf der Kommandozeile herstellen."

A: "Es benutzt Paypal Standard und nicht Express, es benutzt nicht curl

Luke Rodgers
quelle
Alte tote Locken ... PHP wird die nächste Ausgabe sein. Aktualisieren Sie das Betriebssystem auf dem Server. Holen Sie sich VirtualBox und führen Sie VMs aus. Auf diese Weise ist es viel einfacher. TLS bewegt sich weiter.
Fiasko Labs

Antworten:

9

Wir hatten das gleiche Problem und haben es einfach behoben, indem wir die Curl-Bibliothek von 7.19 auf 7.40 aktualisiert haben.

Führen Sie den folgenden Befehl aus: curl -v -s https://api-3t.sandbox.paypal.com/nvp

Wenn Sie einen SSL-Verbindungsfehler erhalten, haben Sie dasselbe Problem, das wir hatten.

Sie können den folgenden Link (Antwort 3) verwenden, um Anweisungen zum Aktualisieren der Curl-Bibliothek zu erhalten: /programming/28495444/how-to-upgrade-php-curl-to-version-7- 36-0

Wir haben auch einen Hack ausprobiert und es hat funktioniert, aber wir waren mit einer vorübergehenden Lösung nicht zufrieden.

Ich hoffe, diese Informationen helfen Ihnen weiter.

Lorenzo Garcia
quelle
1
Nach ein bisschen Kopfkratzen haben wir daran gedacht, PHP fpm neu zu starten und dann hat alles angefangen zu funktionieren :) Danke. Ein Upgrade von curl ist alles, was erforderlich war.
Luke Rodgers
Gibt es eine Problemumgehung für Shared Hosting?
Raks
4

Ich bin auch heute auf diesen Fehler gestoßen. Das Hinzufügen des Folgenden zu app/code/core/Mage/Paypal/Model/Api/Nvp.phpZeile 945 bewirkt zumindest die Änderung des Paypal Nvp-Moduls anstelle der Bibliotheken.

 try {
        $http = new Varien_Http_Adapter_Curl();

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

Entsprechend der Handbuchseite für curl-Konstanten können Sie die Konstante auch verwenden, CURL_SSLVERSION_TLSv1_2anstatt 6eine PHP-Version> = 5.5.19 oder 5.6.3 zu verwenden.

Brian
quelle
Danke, dass du diesen mehr paypal-spezifischen Hack gepostet hast! Nachdem wir die anderen Antworten durchgesehen hatten, lösten wir das Problem durch ein Upgrade von curl. Zum Glück haben wir eine moderne Version von PHP installiert, damit dies funktioniert :)
Luke Rodgers
Gute Antwort, nur keine Kerndateien bearbeiten. Ich mag auch die ständige Referenz!
Robbie Averill
4

Die Sandbox hat sich in der Tat in der letzten Woche geändert, um nur TLS 1.2 zu akzeptieren. Bei meinen Tests wird TLS 1.2 automatisch aktiviert, wenn Sie PHP 5.5.19+ und eine ausreichend aktuelle Curl-Version verwenden (ich verwende 7.29). Sie benötigen außerdem OpenSSL 1.0.1+.

Da wir immer noch mit 5.3 arbeiten, mussten wir auch den gleichen Hack zum Core hinzufügen, aber da Magento immer noch Unterstützung für 5.3 beansprucht, können wir wahrscheinlich bald eine offizielle Lösung erwarten (zumal diese Änderungen auch die Paypal-Produktionssysteme in betreffen werden Juni).

Referenz: https://devblog.paypal.com/upcoming-security-changes-notice/

Matt O.
quelle
Zum Glück lief auf dem Server PHP 5.5.24, sodass nur ein Upgrade von curl erforderlich war.
Luke Rodgers