我正在开发模块,在“付款已接受”状态后执行它自己的流程,如果一切正常 - 将订单状态更改为已发货。为此我使用了hookActionOrderStatusUpdate:
public function hookActionOrderStatusUpdate($params)
{
if($params['newOrderStatus']->id == 2)
{
if(!$this->doSomething())
return false;
}
return /*function for changing order's state*/;
}
但问题是,新订单状态在“已接受付款”之前发生变化。 例如:
有谁知道如何重新解决这个问题? P. S.尝试了hookActionOrderStatusPostUpdate。 PS 1.6.0.9
答案 0 :(得分:1)
请尝试 displayOrderConfirmation 和 displayPaymentReturn 挂钩。这些挂钩在付款后收到params变量中的订单明细。
答案 1 :(得分:0)
我遇到了类似的问题,我使用了hookActionOrderStatusUpdate
和hookActionOrderHistoryAddAfter
的组合。
原因是hookActionOrderHistoryAddAfter
确实可以在"付费"之后添加其他状态。状态。 hookActionOrderStatusUpdate
之前添加了"已发送",但hookActionOrderHistoryAddAfter
不知道将要设置的状态。
所以它看起来像这样:
class MikolaHooks extends Module
{
public $newOrderStatusId = NULL;
public function hookActionOrderStatusUpdate($params) {
$this->newOrderStatusId = $params['newOrderStatus']->id;
}
public function hookActionOrderHistoryAddAfter($params) ....
答案 2 :(得分:0)
您无法将订单状态更改为 actionOrderStatusUpdate
挂钩。
出现这个问题是因为钩子是在 OrderHistory
实际注册到数据库之前执行的,原因只有一件事:
执行钩子的函数不会将 OrderHistory
保存到由 ->add
或 ->addWithemail
方法处理的数据库中--从外部脚本手动执行 .
例如this five lines in the PaymentModule
class:
$new_history = new OrderHistory();
$new_history->id_order = (int) $order->id;
// This line exec the Hook
$new_history->changeIdOrderState((int) $id_order_state, $order, true);
// This line save the OrderState into the database
$new_history->addWithemail(true, $extra_vars);
解决此问题的方法是改用 actionOrderHistoryAddAfter
或 actionObjectOrderHistoryAddAfter
。
这在 I made a PR to the docs 之前没有记录,并在这个钩子周围引起了许多麻烦和误解。