Tengo un entorno de desarrollo en un servidor antiguo que ejecuta curl 7.19.7.
Recientemente me di cuenta de que Paypal Express ya no funciona y está devolviendo un error "Unable to communicate with the PayPal gateway."
.
Excavando en los registros de excepciones que puedes ver
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')
No sé si Paypal ha cambiado algo con su sandbox recientemente, pero fui a la URL api-3t.sandbox.paypal.com en SSLLabs y vi que el único protocolo que admiten es TLS 1.2.
Después de leer sobre la configuración de las versiones de protocolo en el manual de PHP , agregué de forma pirata lo siguiente
nano +194 lib/Varien/Http/Adapter/Curl.php
curl_setopt_array($this->_getResource(), $options);
+curl_setopt($this->_getResource(), CURLOPT_SSLVERSION, 6);
return $body;
¡Excelente! Después de un apache agraciado ahora puedo usar Paypal express. Sin embargo, no estoy contento de haber tenido que hackear el núcleo. Tampoco estoy contento de haber tenido que hackear el núcleo en un lugar específico en curl
lugar de Paypal.
¿Alguien tiene algún consejo sobre una forma correcta de solucionar este problema?
EDITAR:
Solo confirmando algunos hallazgos adicionales, esto no afecta a Paypal Standard en Magento ya que no parece usarse curl
debajo del capó. Estábamos recibiendo falsos negativos en ciertas máquinas.
P: "¡Cómo puede funcionar esto! Curl no se conecta al sandbox en la línea de comando"
A: "Está usando el estándar de PayPal y no expreso, no usa curl