我用自定义付款网关处理订单。(PS v1.6.1.6)网关返回用户浏览器到商店页面(支付模块前端控制器http://demo.site.com/module/latcard/paymentreturn),其中包含新的订单状态id:
STATUS: ERROR
ERRORINFO: 981:ERROR 3D-secure
ORDER_ID: 66
AMOUNT: 45.99 我以编程方式在前端控制器中更新(更改状态)订单:
paymentreturn.php
public function _postProcess() {
if (isset($_POST) && Tools::getValue('INDEX') == sha1( Tools::getValue('ORDER_ID') . Tools::getValue('AMOUNT') . Tools::getValue('DT'))) {
if (Tools::getValue('STATUS') == 'ERROR') {
...
/*** calling update method ***/
$new_status=15;
// change status directly in Order
$order = new Order(Tools::getValue('ORDER_ID'));
$order->setCurrentState($new_status);
// change status in OrderHistory
$history = new OrderHistory();
$history->changeIdOrderState($new_status, Tools::getValue('ORDER_ID'));
}
...
}问题是,如果我只在OrderHisotry中更改状态,则状态似乎会更新,如admin orders页面所示:

然而,当我单独打开该命令时,将显示在之前的状态:

如果我也在Order模型/表中更改状态,那么订单状态是OK的。“所有订单”面板和“单个订单”页面都显示相同的更新状态。
我知道两个db表orders和order_history。但有时
$order = new Order($order_id);
$order->setCurrentState($new_status);使shop显示PS v1.6.1.7的空白页(错误500)。当我打开调试模式时,错误是调用未定义实例Swift_Message::newInstance() in /home/vitpict/bstyle.lv/classes/Mail.php第179行-为什么是?代码与1.6.1.6节中的代码相同.
我在setCurrentState() order方法上没有发现多少.有医生吗?
示例代码只在OrderHistory类中讲授更新/更改订单状态。有什么评论吗?
发布于 2016-09-15 11:25:58
如果要检查setCurrentState方法代码,有以下内容:
/** Set current order status
* @param int $id_order_state
* @param int $id_employee (/!\ not optional except for Webservice.
*/
public function setCurrentState($id_order_state, $id_employee = 0)请注意@param int $id_employee (/!\除Webservice.之外,不可选)。
https://stackoverflow.com/questions/39493149
复制相似问题