Lil*_*zat 4 php hook e-commerce prestashop
验证付款后,订单状态将变为"付款验证"(法语中的"Paiementaccepté").我想在验证付款时设置另一个状态,因此历史记录将显示以下内容:
Current status : My personnal status
History :
My personnal status
Payment validated
Run Code Online (Sandbox Code Playgroud)
为此,我使用了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();
}
}
Run Code Online (Sandbox Code Playgroud)
配置值已正确定义.此代码有效,因为我看到状态已更改.但事情是在更改为"付款已验证"之前已更改.我不明白为什么.历史看起来像这样:
Current status : Payment validated
History :
Payment validated
My personnal status
Run Code Online (Sandbox Code Playgroud)
我应该怎样做才能使我的个人状态显示为最后状态?
小智 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();
}
Run Code Online (Sandbox Code Playgroud)
最好的祝福