Prestashop - 验证付款后更改订单状态

Prestashop - Change order status when payment is validated

付款通过验证后,订单状态变为 "Payment validated"(法语为 "Paiement accepté")。我想在验证付款时设置另一个状态,因此历史记录将显示以下内容:

Current status : My personnal status
History :
My personnal status
Payment validated

为此,我使用了钩子 actionOrderStatusPostUpdate。这是我的代码:

public function hookActionOrderStatusPostUpdate($aParams) {
    $oOrder = new Order($aParams['id_order']);

    if($aParams['newOrderStatus']->id == Configuration::get('PS_OS_PAYMENT')) {
        $oOrder->setCurrentState(Configuration::get('XXXXXX_STATUS_WAITING'));
        $oOrder->save();
    }
}

配置值定义正确。此代码有效,因为我看到状态已更改。但问题是它在更改为 "Payment validated" 之前发生了变化。我不明白为什么。历史看起来像这样:

Current status : Payment validated
History :
Payment validated
My personnal status

我应该怎么做才能让我的个人状态显示为最后一个状态?

我认为它适用于其他挂钩:actionOrderStatusUpdate

hookActionOrderStatusPostUpdate hook 调用是由 changeIdOrderState 调用的,但是添加到 order_history table 是在调用 changeIdOrderState 之后进行的,就像在 https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/controllers/admin/AdminOrdersController.php#L521-L542 中一样

您更需要将模块绑定到经典挂钩上,例如 hookActionObjectOrderHistoryAddAfter https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/ObjectModel.php#L535-L537

public function hookActionObjectOrderHistoryAddAfter($params) {
$orderHistory = $params['object'];

if($orderHistory->id_order_state == Configuration::get('PS_OS_PAYMENT')) {
    $oOrder->setCurrentState(Configuration::get('XXXXXX_STATUS_WAITING'));
    $oOrder->save();
}

此致

我认为这是您应该在付款验证后更改订单状态的方法,当状态更改或状态更改时调用这些挂钩。

$history = new OrderHistory();
$history->id_order = (int)$id_order;
$history->changeIdOrderState($status_id, (int)$id_order);
$history->addWithemail();
$history->save();