Hola @monicaauto56. El escenario que describes es muy común en PrestaShop 1.7 cuando se añaden recargos o modificaciones de última hora en el carrito. Los módulos de pago, por diseño, a menudo obtienen el total del carrito en un punto anterior del flujo de checkout, o no re-consultan el objeto Cart del contexto después de que se ejecute hookActionValidateOrderBefore.
Para asegurar que el recargo que aplicas con runCartFeeSync sea persistente y visible para los módulos de pago, necesitas forzar la actualización del objeto Cart y la sincronización con el contexto. Asumiendo que tu método runCartFeeSync ya está haciendo su trabajo de modificar el objeto $params['cart'], la clave es asegurar que esos cambios se guarden y se propaguen. Aquí te propongo una modificación para tu conorderfee/conorderfee.php:
function hookActionValidateOrderBefore($params)
{
if (!(int) Configuration::get('CONORDERFEE_ENABLED')) {
return;
}
if (!isset($params['cart']) || !($params['cart'] instanceof Cart)) {
return;
}
// Aquí iría tu llamada a $this->runCartFeeSync($params['cart'], true);
// Forzamos la actualización del objeto Cart en la base de datos
Las líneas clave son $params['cart']->update(); que guarda explícitamente los cambios en la base de datos, y Context::getContext()->cart = new Cart($params['cart']->id); que fuerza a que el objeto Cart global en el contexto de PrestaShop se recargue con los datos más recientes, incluyendo tu recargo. Esto debería asegurar que los módulos de pago obtengan el total correcto.