Hola @enriqueonline70 y @miriam_store,
Efectivamente, como comenta Miriam, el hookActionValidateOrderBefore es un punto crítico. La lógica de conorderfee intenta asegurar la coherencia de la tarifa justo antes de la validación, pero si runCartFeeSync arroja una excepción y no se captura, detendrá el proceso de pedido.
Para permitir que la validación del pedido continúe incluso si la sincronización de la tarifa falla (por un error transitorio, por ejemplo), debes envolver la llamada a $this->runCartFeeSync() en un bloque try-catch. Esto capturará cualquier excepción y te permitirá decidir qué hacer con ella (como registrarla para depuración) sin detener el flujo principal.
Aquí te muestro cómo podrías modificar el archivo conorderfee/conorderfee.php para incluir este manejo de errores justo después de las comprobaciones iniciales que has pegado:
if (!isset($params['cart']) || !($params['cart'] instanceof Cart)) {
return;
}
try {
$this->runCartFeeSync($params['cart'], true);
} catch (Throwable $e) {
// Opcional: registrar el error para futura revisión sin detener el pedido.
// PrestaShopLogger::addLog('Error CONORDERFEE: ' . $e->getMessage(), 3, null, 'Cart', $params['cart']->id, true);
}
Explicación de los cambios:
- Hemos añadido un bloque
try que envuelve la llamada a $this->runCartFeeSync($params['cart'], true);.
- El bloque
catch (Throwable $e) capturará cualquier excepción o error fatal que ocurra durante la ejecución de runCartFeeSync. Throwable es más amplio que Exception y es recomendable para PHP 7+.
- Dentro del bloque
catch, puedes añadir una línea para registrar el error usando PrestaShopLogger::addLog(). Esto es crucial para poder investigar por qué falló la sincronización, pero no detendrá el proceso de pedido. Si no necesitas registrarlo, puedes dejar el bloque catch vacío o con un comentario.
Con este cambio, la validación del pedido continuará, y solo se registrará el problema con la tarifa si ocurre, en lugar de abortar la compra.