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


Prestashop - Change order status when payment is validated

验证付款后,订单状态变为"payment validated"(法语为"Paiment 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();
    }
}

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

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

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

hookActionOrderStatusPostUpdate钩子调用由changeIdOrderState进行,但添加到order_history表是在调用changeIdOrderState之后进行的,如https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/controllers/admin/AdminOrdersController.php#L521-L542

您需要将模块绑定到一个经典的钩子上,比如hookActionObjectOrderHistoryAddAfterhttps://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();

我认为它可以在其他挂钩上工作:actionOrderStatusUpdate