Validar una orden antes de que sea colocada en el módulo de Prestashop.
Estoy desarrollando un módulo Prestashop para lograr esto.
Cuando se realiza un pedido con un producto específico, necesito contactar una API externa para realizar algunas operaciones de escritura. Para ser más específico, algunos productos serán solicitados automáticamente en una plataforma de terceros. No es dropshipping, estoy enviando el pedido al productor de los bienes.
El problema es que, si la llamada a la API va mal, debo detener el pedido para que no se realice y notificar al cliente que algo ha salido mal, manteniendo el carrito intacto si es posible.
Todo lo demás está funcionando: puedo detectar los productos, enviar la información a la API de terceros y leer la respuesta. Excepto que estoy utilizando un módulo con este código:
$this->registerHook(‘actionValidateOrder’);
Mi entendimiento es que este gancho se llama después de que se realiza un pedido, por lo que no puedo bloquearlo si la llamada a la API falla.
¿Cuál es la manera correcta de abordar este escenario?
Intenté usar actionOrderStatusPostUpdate pero no creo que pueda tener conocimiento previo sobre el estado del pedido (los métodos de pago pueden variar).
¿Alguna idea? Parece una tarea básica de realizar pero estoy atascado.
Usando Prestashop 1.7.8
davy.ai
Para resolver este problema, puede utilizar el gancho
actionCartSave
, que se llama cada vez que se guarda el carrito (por ejemplo, cuando un cliente agrega o elimina un producto del carrito). Dentro de este gancho, puede verificar si el producto específico está en el carrito y, si está, hacer la llamada a la API a la plataforma externa. Si la llamada a la API falla, puede devolver un mensaje de error al cliente y detener el pedido al arrojar una excepción. Esto deshará cualquier cambio hecho en el carrito durante la ejecución del gancho, manteniéndolo intacto.Aquí hay un ejemplo de código para ilustrar este enfoque:
Nota: Reemplace
YOUR_PRODUCT_ID
con el ID del producto específico que le interesa. Además, asegúrese de manejar cualquier excepción arrojada por el código de llamada a API.