Problemas con Redsys y Cloudflare (y como solucionarlos!)
Si tienes una tienda online de medio o alto rendimiento (+15 ventas día / +1500 visitas diarias) probablemente el conseguir que sea rápida y eficiente en la carga, sea una de tus mayores pesadillas. Y lo entiendo... dá igual lo bueno que sea tu producto, lo afinado que esté el código o lo buena que sea la usabilidad... que si la página tarda más de 5 segundos en cargar, el cliente se vá "a la pestaña de al lado en el navegador". Es triste... pero es la cruda realidad.
Así que seguramente ya has oido hablar de cachés, minificaciones de archivos css y js, http2... y CloudFlare. Por si no lo conocías aún, CloudFlare es un servicio freemium de distribución y cacheado de contenidos. En la práctica... es un lugar que almacena tus páginas, imágenes, archivos... y se los entrega a tus clientes en cualquier lugar del mundo, con la menor espera posible, descargando tu servidor y tu base de datos, reduciendo el uso que se hace de tu consumo de ancho de banda y permitiendo tiempos de carga fulgurantes... totalmente gratis (también te protege en caso de estar siendo atacado). Yeah, it's true. 100% real no fake. Aunque cueste creerlo!
Mira aquí las estadísticas habituales de un panel de control estándar en el perfil de CloudFlare:
Si, tiene escalones de servicio, claro. Y el más sencillo, el gratuito... es apenas un proxy caché; eficaz y terriblemente fácil de usar, pero nada más. Y aún así, en algunos casos he visto reducciones del tiempo de carga a menos de la mitad, incluso en ecommerces ya muy afinaditos.
Implementarlo es bien fácil: basta apenas con abrirse una cuenta de cliente, dar de alta un dominio y el sistema hará el resto, descubriendo los DNS que ya estás usando y proponiéndote usar su proxy para las peticiones web que se realicen a esos DNS. Puedes también usarlo para email... pero al ser un servicio que apenas usa ancho de banda, yo no suelo implementarlo (aunque es tan fácil como hacer click en una de las opciones!).
Sin embargo... no todo es siempre de color de rosa; y si lo implementas, verás que los servicios de pago online con TPV virtual bancario (en España, Redsys o Ceca) dejan de funcionar. Bueno, no exactamente.. pero notarás que el pedido se realiza, el cliente es llevado a la pasarela de pago del banco, efectúa el pago del importe... pero el pedido queda registrado como "Pendiente de Pago".
Y esto es así porque la respuesta (callback) que dá Redsys no llega a nuestro servidor porque se queda en el camino dado que CloudFlare no la deja pasar. Es lógico y una medida óptima de seguridad... pero a nosotros nos hace la puñeta. Así que hay que hacer algunos ajustes en el panel de control de CF para que la comunicación del banco pase por su proxy hacia nuestro sistema.
En la mayoría de los casos, con desmarcar "Browser Integrity Check" en la sección de firewall, bastará. Eso permite pasar los callbacks y que nuestra tienda Prestashop pueda cambiar el estado del pedido a "Pago Completado".
En otros casos, será necesario establecer reglas de firewall basadas en URI y ASN, para lo que necesitarás conocer el ASN (Autonomous System Number) del sitema bancario y la URI (path o Universal Resourde Identificator, parecido a las más conocidas URLs) a donde debería llegar esa notificación, en tu sistema. Esta fórmula es más concreta y directa, permitiendo solo el paso de las comunicaciones específicas del ASN del banco, y quizá sea lo que necesites si el remedio anterior no es suficiente para tu tienda ;)
+INFO:
¿Que es CloudFlare?: https://es.wikipedia.org/wiki/Cloudflare
Crear una regla de firewall en CloudFlare: https://bit.ly/3938tKd
Soporte técnico de CloudFlare: https://support.cloudflare.com/hc/es-es