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
fuente
Respuestas:
Tuvimos este mismo problema y lo solucionamos actualizando la biblioteca de curl de 7.19 a 7.40.
Ejecute el siguiente comando:
curl -v -s https://api-3t.sandbox.paypal.com/nvp
Si recibe un error de conexión SSL, tiene el mismo problema que tuvimos.
Puede usar el siguiente enlace (respuesta # 3) para obtener instrucciones sobre cómo hacer esta actualización de la biblioteca de rizos: /programming/28495444/how-to-upgrade-php-curl-to-version-7- 36-0
También probamos un hack y funcionó, pero no estábamos contentos con una solución temporal.
Espero que esta información te ayude.
fuente
También me encontré con este error hoy. Agregar lo siguiente a la
app/code/core/Mage/Paypal/Model/Api/Nvp.php
línea 945 es al menos hacer el cambio en el módulo Paypal Nvp en lugar de las bibliotecas.De acuerdo con la página del manual de las constantes de rizo , también puede usar la constante en
CURL_SSLVERSION_TLSv1_2
lugar de6
si tiene una versión de PHP> = 5.5.19 o 5.6.3.fuente
De hecho, la caja de arena cambió la semana pasada para aceptar solo TLS 1.2. De mis pruebas, TLS 1.2 se activará automáticamente si está usando PHP 5.5.19+ y una versión de curl suficientemente reciente (estoy usando 7.29). También necesita OpenSSL 1.0.1+.
Como todavía estamos ejecutando 5.3, también hemos tenido que agregar el mismo truco al núcleo, pero dado que Magento aún reclama soporte para 5.3, probablemente podamos esperar una solución oficial pronto (especialmente porque estos cambios también afectarán los sistemas de producción de Paypal en Junio).
Referencia: https://devblog.paypal.com/upcoming-security-changes-notice/
fuente