Hola.
El problema es que cuando REDSYS se conecta a tu sitio para enviar la información de confirmación del pago vía HTTP, éste responde con una redirección a la versión HTTPS. Como REDSYS no funciona con SNI (una tecnología que permite usar múltiples certificados con una misma dirección IP) y creo que tampoco confía en los certificados de Let’s Encrypt (aunque de esto no estoy seguro) pues la confirmación no se realiza y el pedido queda pendiente.
La solución es a?adir una excepción a la regla general que redirige las consultas HTTP a HTTPS para excluir la consulta con los datos de confirmación de pago de REDSYS. Lo que identifica a la consulta de REDSYS es que la URL incluye lo siguiente: “wc-api=WC_redsys”. Entonces lo que hay que hacer es a?adir una condición a la regla que hace la redirección de HTTP a HTTPS para que dicha regla no se ejecute cuando la URL contiene la cadena anterior. La condición para el módulo redirect del servidor web Apache sería la siguiente: RewriteCond %{QUERY_STRING} !wc-api=WC_MyRedsys [NC]
?Donde hay que poner dicha condición? La redirección se puede realizar en varios sitios. Si tu alojamiento funciona con un panel de control Plesk tienes que acceder a él e ir a Dominios -> Tu dominio -> Directivas Apache/Nginx. En este caso también tendrías que desactivar la opción de la redirección permanente de HTTP a HTTPS que hay en la configuración de tu alojamiento ya que esa opción no permite a?adir condiciones a la regla.
Otro punto donde puede colocarse la redirección (para Apache) es en un archivo con el nombre .htaccess en la carpeta raíz de tu sitio web.
Suponiendo que tu sitio funciona con Apache (algo bastante común, aunque también podría tener un servidor Nginx por delante) la redirección debería quedar más o menos así:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{QUERY_STRING} !wc-api=WC_MyRedsys [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L,QSA]
</IfModule>
En el caso de Nginx, la redirección se hace con algo así:
if ($ssl_protocol = "") {
if ($request_uri !~ ^wc-api=WC_MyRedsys) {
rewrite ^/(.*) https://$server_name/$1 permanent;
}
Resumiendo todo lo anterior, lo que tienes que lograr es que la consulta a https://tusitio.tudominio.com/?wc-api=WC_MyRedsys
no se redirija a HTTPS y se acepte bajo HTTP.
No es algo complicado para cualquiera acostumbrado a trabajar con servidores web, pero para los no iniciados entiendo que pueda sonar a chino. Lo mejor sería que escribieses al soporte técnico de tu sitio y les digas lo del párrafo anterior.
Saludos.