Prestashop:在hookActionOrderStatusUpdate中更改订单状态

时间:2014-10-06 10:45:24

标签: php prestashop prestashop-1.6

我正在开发模块,在“付款已接受”状态后执行它自己的流程,如果一切正常 - 将订单状态更改为已发货。为此我使用了hookActionOrderStatusUpdate:

public function hookActionOrderStatusUpdate($params)
{
  if($params['newOrderStatus']->id == 2)
        {
           if(!$this->doSomething())
              return false;            
        }
    return /*function for changing order's state*/;
}

但问题是,新订单状态在“已接受付款”之前发生变化。 例如:

  1. 等待银行付款
  2. 递送
  3. 接受付款
  4. 有谁知道如何重新解决这个问题? P. S.尝试了hookActionOrderStatusPostUpdate。 PS 1.6.0.9

3 个答案:

答案 0 :(得分:1)

请尝试 displayOrderConfirmation displayPaymentReturn 挂钩。这些挂钩在付款后收到params变量中的订单明细。

答案 1 :(得分:0)

我遇到了类似的问题,我使用了hookActionOrderStatusUpdatehookActionOrderHistoryAddAfter的组合。

原因是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);

解决此问题的方法是改用 actionOrderHistoryAddAfteractionObjectOrderHistoryAddAfter

这在 I made a PR to the docs 之前没有记录,并在这个钩子周围引起了许多麻烦和误解。