Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RedSys rechaza servidores con SNI. Cómo redirigirlo por http (no-seguro)? #53

Open
jan1980 opened this issue Oct 8, 2016 · 5 comments

Comments

@jan1980
Copy link

jan1980 commented Oct 8, 2016

Saludos chicos,

Sorprendentemente, RedSys no concluye el pedido si la notificación va por httpS en un servidor que use SNI (IP colectiva). Como consecuencia, el pago se produce, pero el pedido se queda Pendiente, y los mails transaccionales no salen.

Es decir, RedSys quieren que tengamos una IP dedicada.

Mientras RedSys se pone al día, y nos permite tener SSL con servidores que usen SNI, estamos obligados a usar algún tipo de redirección para que la web se mantenga por httpS, pero el callback se produzca por http, y pueda notificar a la tienda que el pago se ha completado (y lanzar los mails transaccionales).

Posible solución

Si no me equivoco, una solución es decirle al módulo que nos devuelva el callback por http (no-segura) en la casilla específica para eso en Métodos de Pago.

Pero luego deberíamos crear una redirección en .htaccess, para que el resto de la web use httpS (conexión segura).

Cómo sería la regla a poner en .htaccess para lograrlo?

Aquí hay un ejemplo, pero no sé qué convendría poner en lugar del "ALGO_ESPECÍFICO_DE_LA_URL_DE_CALLBACK":

RewriteEngine On
# Si la cadena de consulta no contiene "ALGO_ESPECÍFICO_DE_LA_URL_DE_CALLBACK"
RewriteCond %{QUERY_STRING} !ALGO_ESPECÍFICO_DE_LA_URL_DE_CALLBACK [NC]
# Y la conexión no es HTTPS
RewriteCond %{HTTPS} off
# Redirigimos a la versión con HTTPS
RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R,L]

Muchas gracias por cualquier idea o sugerencia.
Saludos,

Edito:

Podría tratarse de "redsys/index/callback" (según la pantalla de configuración, dónde se menciona lo de {{secure_base_url}}redsys/index/callback) o de "payment/redsys/callback"?

Lo segundo lo encontré en un foro de OpenCart, y lo he buscado en el Módulo de Magento, dónde figura aquí, junto a otra URL parecida:

\app\code\community\Devopensource\Redsys\Helper\Data.php

Line 30: $url = Mage::getStoreConfig('payment/redsys/callback', Mage::app()->getStore());
Line 37: return Mage::getStoreConfig('payment/redsys/callbackurl', Mage::app()->getStore());
@mbernabeu
Copy link
Contributor

Con esta te debería valer redsys/index/callback otra opción que puedes aplicar es extraer la logica del controlador en un fichero php externo de Magento y indicar en htaccess que excluya esa ruta esto en caso de que tengas en Magento el forzado de https

@jan1980
Copy link
Author

jan1980 commented Oct 11, 2016

Gracias @mbernabeu lo he intentado pero no lo logré, no recibo la notificación de RedSys de vuelta, utilicé este código:

<IfModule mod_rewrite.c>
RewriteEngine On
# Si la cadena de consulta no contiene "redsys/index/callback"
RewriteCond %{QUERY_STRING} !redsys/index/callback [NC]
# Y la conexión no es HTTPS
RewriteCond %{HTTPS} off
# Redirigimos a la versión con HTTPS
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R,L]
</IfModule>

La redirección funciona y el site se pone en modo seguro, pero para RedSys hay algo que falla porque si la lógica es correcta debería funcionar... ¿algún fallo en la sintaxis, o la cadena no es la correcta? He probado con redsys/index/callback y con /redsys/index/callback, también con checkout/onepage/success, pero nada funcionó.

Mil gracias por cualquier sugerencia.

@mbernabeu
Copy link
Contributor

prueba a poner tu la url en el navegador a ver si funciona, quiza Magento te este redireccionando a https

@jan1980
Copy link
Author

jan1980 commented Oct 14, 2016

Efectivamente, en el panel del TPV me sale que algo está aplicando una redirección 302:

HTTP || Síncrona || 0000 || Error || http://nuestraweb.com/redsys/index/callback || 302

RedSys está entrando por http (por lo que entiendo que mi excepción en .htaccess funciona), pero me queda la duda de cuándo y porqué se produce este 302? De dónde puede salir? Es el mismo .htaccess quién lo produce, y RedSys no admite redirecciones?

Pero tenía entendido que esta solución funcionaba, de hecho en otros sites usando WooCommerce la hemos utilizado...

Tenéis alguna idea de que podría ser?
Gracias mil!

PD: sin la excepción de .htaccess, yendo por http normal en todo el site, me daba:

HTTP || Síncrona || 0104 || Correcto || http://nuestraweb.com/redsys/index/callback || 200

@olivermontes
Copy link
Member

@jan1980 realiza un debug de que datos envias a redsys en el momento de la redireción, puede que le envies que funcione por seguro y luego el .htaccess lo cambie y por lo tanto tengas 302

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants