【发布时间】:2017-01-22 10:04:28
【问题描述】:
我使用自定义支付网关处理订单。 (PS v1.6.1.6) 网关将用户浏览器返回到商店页面(支付模块前端控制器http://demo.site.com/module/latcard/paymentreturn),其中包含新订单状态 id 的 http POST 有效负载:
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 中进行更改,则状态似乎已更新,如管理所有订单页面所示:
如果我还更改了订单模型/表的状态,则订单状态正常。 所有订单面板和单个订单页面都显示相同的更新状态。
我知道两个数据库表 orders 和 order_history。然而有时
$order = new Order($order_id);
$order->setCurrentState($new_status);
导致商店显示 PS v1.6.1.7 的空白页(错误 500)。当我打开调试模式时,错误是 在第 179 行调用 /home/vitpict/bstyle.lv/classes/Mail.php 中未定义的实例 Swift_Message::newInstance() - 为什么? 那里的代码与 v.1.6.1.6 中的相同 ...
我没有找到太多关于 setCurrentState() 订购方法的信息...任何文档?
example code 仅在 OrderHistory 类中教导更新/更改订单状态。 有cmets吗?
【问题讨论】:
标签: php prestashop payment-gateway prestashop-1.6