Hola buenas.
Se que llego tarde pero aportaré lo que me ha pasado aunque la solución ya la ahbeís dicho.
En mi caso estoy en mi equipo en local montando una web con Prestashop. Uso Laragon que son bundles que incluyen Apache y compañía. en este caso Apache, Mysql y PhpMyAdmin. El problema que tenía era que el pago en el banco se confirmaba pero en Prestashop el pedido seguía en el carro y al usuario no se le reflejaba que hubiera hecho un pedido y menos aún que lo haya pagado, solamente lo sabía con el email de confirmación del banco.
Buscando el el código cuando vamos a "modules/redsys/redsys.php" vemos estas 2 lineas del código por el final:
$miObj->setParameter("DS_MERCHANT_URLOK", );
$miObj->setParameter("DS_MERCHANT_URLKO", );
Cuando el proceso de compra en el banco finaliza usa la primera URL, si ha habido algún problema la 2º. ¿Qué me pasaba? que si estoy en un entorno local la primera URL el servidor es "localhost:8080", por tanto jamás llegaba y no se podía validar el pedido. Así que ya sabeis, subid la web a un servidor para que la app del banco la pueda encontrar.
Espero haber ayudado a alguien.