19 hours ago, MKZ Industries said:Muchas gracias por el código @maximo88, yo estoy usando la versión 1.6.0 después de actualizar de Prestashop 1.7.8.11 a la 8.2.1 y de momento no me he encontrado con ese error. En cambio, he encontrado dos "problemas" uno más grave que el otro.
El error ocurre si se mira un pedido antiguo que se pagara con otro tipo de módulo de Redsys que no fuera, por ejemplo, el oficial o contrareembolso o transferencia bancaria.
19 hours ago, MKZ Industries said:Por un lado, en las facturas, en el apartado de "Metodos de Pago" debajo del desglose de IVA, en vez de "Redsys", me sale algo así como "Autorizada 912569". Tengo que mirar porque se carga eso en la variable "payment_method" en vez de "Redsys".
Esto creo que se corrige desactivando la opción: "Guardar resultado de la operación en la tabla de datos de pago de Prestashop". Lo confirmaré con el siguiente pedido.
Lo acabo de mirar, a mí también me sale Autorizada con el número en la factura y tengo esa opción que indicas también activada. Quizás se podría poner la palabra Redsys + Autorizada + número. No lo sé.
19 hours ago, MKZ Industries said:Es peor el segundo problema: si un cliente llega hasta la página de pago y lo cancela (o da a volver en el navegador) porque quiere añadir algo más, añade dicho producto, deja el resto de opciones igual (transportista, etc.) y vuelve a intentar pagar por tarjeta, le sale el siguiente error: No se puede realizar la operación. Número de pedido repetido. Si cambia el transportista o si cierra sesión y vuelve a entrar, esto no pasa. Ya he contactado con soporte para que me solucionen esto (generando por ejemplo un número de pedido nuevo con cada intento de pago).
Por lo demás me va bien.
Y esto afortunadamente también lo sufrí y era el tercer parche que le tuve que poner, que ya ni me acordaba pero he visto que lo tenía apuntado.
redsyspur.php
Si entramos en el archivo nos encontramos este código de Redsys que no funciona, porque como falle una vez el pago volverá a intentarlo con el mismo código y no lo cambia hasta que no pasan unos 6 minutos:
// NUMERO DE PEDIDO - Añadimos time() para evitar SIS0051. $orderId = (int) $cart->id; if( ! isset($_COOKIE['nPedSession']) ) $numpedido = $this->generaNumeroPedido($orderId, Configuration::get ( 'REDSYS_NUMERO_PEDIDO' ), Configuration::get ( 'REDSYS_PEDIDO_EXTENDIDO' ) == 1); else $numpedido = $_COOKIE['nPedSession'];
🔥 PARCHE 2: Generar siempre un número nuevo (más agresiva, más segura)
Hay que sustituirlo por este
//Nuevo código abril 2025 $orderId = (int) $cart->id; $numpedido = $this->generaNumeroPedido($orderId, Configuration::get('REDSYS_NUMERO_PEDIDO'), Configuration::get('REDSYS_PEDIDO_EXTENDIDO') == 1); setcookie('nPedSession', $numpedido, time() + 3600, '/'); // Reescribe siempre
Gracias a vosotros 😇