Hola @valeriaiberia90, gracias por compartir el fragmento. @lorena_89 ha dado en el clavo con el diagnóstico.
El hookActionValidateOrderBefore, especialmente en versiones antiguas de PrestaShop como la 1.7.4.1, puede ser invocado más de una vez durante un mismo ciclo de validación del pedido, por ejemplo, si hay redirecciones o recargas internas en el proceso de pago. Si la función runCartDiscountSync realiza cálculos intensivos, cada llamada redundante suma latencia, causando los timeouts y potencialmente conflictos si modifica el carrito múltiples veces.
Una solución común para evitar esto es asegurar que la lógica pesada se ejecute solo una vez por ID de carrito dentro de la misma petición. Puedes modificar tu archivo conorderdis/conorderdis.php así:
function hookActionValidateOrderBefore($params)
{
if (!(int) Configuration::get('CONORDERDIS_ENABLED')) {
return;
}
if (!isset($params['cart']) || !($params['cart'] instanceof Cart)) {
return;
}
static $syncedCarts = [];
$cartId = (int) $params['cart']->id;
Con este cambio, he añadido una variable estática $syncedCarts que actúa como un 'flag' para cada ID de carrito. Si la función runCartDiscountSync ya se ha ejecutado para un carrito específico en la petición actual, la siguiente vez que se llame al hook, simplemente retornará sin volver a ejecutar la sincronización. Esto debería mitigar los problemas de rendimiento y evitar que los descuentos se apliquen o calculen incorrectamente debido a ejecuciones redundantes.