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

时间:2015-02-09 11:24:30

标签: php e-commerce hook prestashop

验证付款后,订单状态将变为“付款验证”(法语中的“Paiementaccepté”)。我想在验证付款时设置另一个状态,因此历史记录将显示以下内容:

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

为此,我使用了hook 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

如何使我的个人状态显示为最后状态?

3 个答案:

答案 0 :(得分:5)

hookActionOrderStatusPostUpdate 挂钩调用是由changeIdOrderState进行的,但是在调用changeIdOrderState之后添加到order_history表,如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();
}

最好的问候

答案 1 :(得分:1)

我认为它可以在其他钩子上运行:actionOrderStatusUpdate

答案 2 :(得分:0)

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

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