5 hours ago, maximo88 said:Acaba de salir sí. Yo tardaré tiempo en probarla, solo cuando revise el código los cambios que han hecho.
@apositivo prueba por favor la versión que te he dado, estoy casi seguro que el fallo que te está dando es el mismo que tuve yo que arreglar, a ver si así te cargan los pedidos antiguos. Hace dos meses migré como tú de 1.6.1.24 a 8.2.1. No hay que hacer ninguna traslación u homologación de los datos antiguos por temas de métodos de pago. No hay que tocar las tablas para este aspecto.
La prueba más sencilla es: ¿puedes ver los pedidos antiguos cuando ese módulo de Redsys 1.5.7 o 1.6 está desactivado? Si puedes el problema es el módulo, que debug te especifica donde está el error.
——————-Detallo el parche que me temo que no han reparado en esa versión 1.6.0:
Parche para evitar error 500 en el backoffice al ver pedidos sin Redsys 1.5.7
📌 Síntoma del error
Al acceder a un pedido desde el backoffice, PrestaShop lanza este error:
Warning: Trying to access array offset on value of type null
en modules/redsyspur/redsyspur.php (línea ~2499)Esto ocurre porque el módulo intenta acceder a datos de Redsys aunque el pedido no haya sido pagado con Redsys.
✅ Solución
Editar el archivo modules/redsyspur/redsyspur.php, dentro del método:
php
public function hookDisplayAdminOrderSide(array $params)
Y reemplazar su contenido completo por lo siguiente:
php
public function hookDisplayAdminOrderSide(array $params)
{
$orderDetails = Redsys_Order::getOrderDetails($params['id_order']);if (
!is_array($orderDetails) ||
!isset(
$orderDetails['redsys_order'],
$orderDetails['confirmation_amount'],
$orderDetails['refund_amount'],
$orderDetails['shipping_paid']
)
) {
return ''; // No hay datos de Redsys, no mostramos nada
}$orderId = $params['id_order'];
$order = new Order($orderId);$redsysOrder = $orderDetails['redsys_order'];
$amountPaid = ($orderDetails['confirmation_amount'] - $orderDetails['refund_amount']) / 100;
$amountPaid = number_format($amountPaid, 2);$smartyVars = array();
$smartyVars['orderId'] = $orderId;
$smartyVars['redsysOrder'] = $redsysOrder;
$smartyVars['amountPaid'] = $amountPaid;$smartyVars['productsAmount'] = number_format($order->total_paid_real - $order->total_shipping, 2);
$smartyVars['shippingAmount'] = number_format($order->total_shipping, 2);
$smartyVars['reference'] = $order->reference;
$smartyVars['shippingPaid'] = json_encode(($orderDetails['shipping_paid']) ? true : false);$this->context->smarty->assign($smartyVars);
$content = $this->context->smarty->fetch(_PS_MODULE_DIR_ . $this->name . '/views/templates/admin/refundpayment.tpl');
return $content;
}
💡 ¿Qué hace este parche?
Evita errores fatales al comprobar si $orderDetails existe y tiene todos los campos necesarios antes de usarlos.
No interfiere con pedidos que sí usaron Redsys, donde el bloque se sigue mostrando como siempre.
Hace el módulo compatible con pedidos de otros métodos de pago o con pedidos migrados desde otras versiones.
Gracias @maximo88, solo con esta validación en el metodo public function hookDisplayAdminOrderSide(array $params) del archivo modules/redsyspur/redsyspur.php
funcionó ! y en efecto ,esa validación NO la tiene la version 1.6.0
espero que este parche/workaround les sriva a otras personas que puedan estar presentado el mismo problema !
if ( !is_array($orderDetails) || !isset( $orderDetails['redsys_order'], $orderDetails['confirmation_amount'], $orderDetails['refund_amount'], $orderDetails['shipping_paid'] ) ) { return ''; // No hay datos de Redsys, no mostramos nada }