1

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

下达特定产品的订单时,我需要联系外部 API以执行一些写入操作。更具体地说,某些产品将在第三方平台上自动订购。这不是代发货,我正在将订单发送给商品的生产商。

问题是,如果 API 调用出错,我必须停止下订单并通知客户出现问题,尽可能保持购物车完好无损。

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

$this->registerHook('actionValidateOrder');

据我了解,这个钩子是在下订单调用的,所以如果 API 调用出错,我无法阻止它。

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

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

任何想法?似乎是要完成的一项基本任务,但我被困住了。

使用 Prestashop 1.7.8

4

1 回答 1

2

您需要验证订单吗?因为 PrestaShop 的订单相关钩子只有在订单创​​建后才可用。

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

hookActionCartSave

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

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

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

$this->registerHook('actionValidateOrderBefore')

并在PaymentModuleclasses/PaymentModule.php)类validateOrder方法(公共函数 validateOrder() ..)中执行钩子

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

重置您的模块,您可以在创建之前操纵订单。

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

于 2021-11-24T13:54:30.207 回答