验证付款后,订单状态将变为“付款验证”(法语中的“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
我应该怎样做才能使我的个人状态显示为最后状态?
解决方法:
hookActionOrderStatusPostUpdate钩子调用是由changeIdOrderState进行的,但是在调用changeIdOrderState之后,就像在https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/controllers/admin/AdminOrdersController.php#L521-L542中一样,添加到order_history表
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();
}
最好的祝福
标签:php,e-commerce,hook,prestashop
来源: https://codeday.me/bug/20190528/1171479.html