在 Prestashop 模块中放置之前验证订单

Validate an order before is placed in Prestashop Module

我正在开发一个 Prestashop 模块来实现这一点。

下了特定产品的订单时我需要联系外部人员API来执行一些write 操作。更具体地说,某些产品将在第三方平台上自动订购。不是dropshipping,我是把订单发给商品的生产者

问题是,如果 API 呼叫失败,我必须停止下订单 并通知客户出现问题,保留购物车尽可能完整。

其他一切正常:我可以检测产品,将信息发送给第三方 api 并阅读回复。除了我使用带有此代码的模块:

$this->registerHook('actionValidateOrder');

据我了解,此挂钩在下订单后被调用,因此如果API调用出错,我无法阻止它。

处理这种情况的正确方法是什么?

我尝试使用 actionOrderStatusPostUpdate,但我认为我无法事先了解订单状态(付款方式可能会有所不同)。

有什么想法吗?似乎是一项需要完成的基本任务,但我卡住了。

使用 Prestashop 1.7.8

您需要验证订单吗?因为 PrestaShop 的订单相关挂钩仅在订单创建后可用。

当客户添加产品时检查购物车不是更好的解决方案吗?

hookActionCartSave

在这种情况下,您可以在将产品添加到购物车时告知客户该产品不可用,从而避免让他们失望。

更新 - 创建自定义挂钩 不幸的是,没有钩子可以阻止订单的验证和创建。 - 但你可以创建一个

注册一个新的自定义挂钩,例如 actionValidateOrderBefore。在您的模块中注册挂钩:

$this->registerHook('actionValidateOrderBefore')

并在 PaymentModule(classes/PaymentModule.php) class validateOrder 方法中执行钩子(public 函数 validateOrder() ..)

  Hook::exec('actionValidateOrderBefore', [id_cart] => $id_cart);

重置你的模块,你就可以在创建之前操纵顺序了。

如果你想做得很好,你可以为 PaymentModul 的 validateOrder 方法创建一个覆盖 class https://devdocs.prestashop.com/1.7/modules/concepts/overrides/