Php Prestashop-付款生效时的变更单状态

Php Prestashop-付款生效时的变更单状态,php,e-commerce,hook,prestashop,Php,E Commerce,Hook,Prestashop,付款生效后,订单状态变为“付款已生效”(“法语中的Paiement accepté”)。我想在验证付款时设置另一个状态,以便历史记录显示以下内容: Current status : My personnal status History : My personnal status Payment validated 为此,我使用钩子actionOrderStatusPostUpdate。这是我的代码: public function hookActionOrderStatusPostUpdat

付款生效后,订单状态变为“付款已生效”(“法语中的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();
    }
}
配置值已正确定义。此代码有效,因为我看到状态已更改。但问题是,在更改为“付款验证”之前,它已更改。我不明白为什么。历史是这样的:

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

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

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

钩子ActionOrderStatusPostUpdate钩子调用是由changeIdOrderState执行的,但添加到order历史记录表是在调用changeIdOrderState之后执行的,如中所示

您需要将模块绑定到一个经典的钩子上,比如hookActionObjectOrderHistoryAddAfter


致以最诚挚的问候

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

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

你能给我一些截图吗?我不明白你的意思。截图:。状态“Paiement accepté”(即已验证付款的法语)是最后一次注册。另一个是“Paulle Par LabFablab”,这是我想做的最后一个。这是订单历史页面的截图?正确的?你想要“Paulle Fablab”在“接受接受”之前吗?是的,这就是我想要的。此外,配置::GET(‘XXXXXX,StasuSuthAuto’)给出了状态“id Puldar Par LeFablab”的ID,和配置::GET(“PSYOSYAY支付”)给出了状态“身份受理”,我理解。请你能发布你的validateOrder方法吗?已经尝试过了,它也不起作用。。。状态已在状态更新之前应用。这就是为什么我选择使用“更新后”的原因。也许是个愚蠢的问题,但通常在BO上,历史以相反的顺序显示订单状态,你是在那里看还是直接在mysql上看?在图片中,我们可以看到分秒,但看不到秒。尽管这个问题是两年前提出的,但我仍在想如何解决这个问题。然后你就想出了一个完美的答案。谢谢你:D!欢迎@YannBergonzat是的,这是因为我面临着同样的问题,我认为解决方案可能对那些关注这个话题的人有用。。。即使在2017年:)虽然答案是正确的,但是钩子名称中有一个主要的输入错误,它应该是hookActionOrderHistoryAddAfter(没有对象),因为这是一个动态钩子(),对象名称是“OrderHistory”。您还忘了提醒,应该在安装时使用$this->registerHook('actionOrderHistoryAddAfter')注册这个钩子;不,我认为
hookActionObjectOrderHistoryAddAfter
是正确答案。仔细看看这个文档,动态钩子是这样组成的:
actionObject+ObjectName+AddAfter
和/或直接查看源代码
$history = new OrderHistory();
$history->id_order = (int)$id_order;
$history->changeIdOrderState($status_id, (int)$id_order);
$history->addWithemail();
$history->save();