【发布时间】:2012-04-26 17:31:25
【问题描述】:
我遇到了一个问题,我的第三方支付网关已将订单的已取消订单状态更改为待处理,因此我现在永远被待处理订单所困扰。
我正在与客户通话,他说信用卡有问题,所以我取消了她的订单,当后端收到银行通知时,它变成了待处理。
那么有没有办法再次取消呢?也许通过 SQL?
问候,
【问题讨论】:
我遇到了一个问题,我的第三方支付网关已将订单的已取消订单状态更改为待处理,因此我现在永远被待处理订单所困扰。
我正在与客户通话,他说信用卡有问题,所以我取消了她的订单,当后端收到银行通知时,它变成了待处理。
那么有没有办法再次取消呢?也许通过 SQL?
问候,
【问题讨论】:
我正在经营企业,并设法做到了:
UPDATE sales_flat_order_grid SET status = 'processing';
UPDATE sales_flat_order SET state = 'processing', status = 'processing';
有人设法清除了所有订单状态,这就是我能够轻松取回它们的方式。
当然,如果您想更新特定记录,您可以在查询末尾添加WHERE entity_id = '12345' 或其他任何内容。
并且在运行上述任何查询之前始终备份数据库!
【讨论】:
以前的答案缺少更新“sales_flat_order_grid”表的请求。 如果问题仍然有效,完整的请求是:
UPDATE sales_flat_order_grid SET status = 'canceled' WHERE increment_id = <order_increment_id>;
UPDATE sales_flat_order SET state='canceled', status='canceled' WHERE increment_id =<order_increment_id> (or WHERE entity_id = <order_id>);
【讨论】:
向 Silas 答案添加信息:您可能需要在销售状态历史记录中插入新状态。
INSERT INTO sales_flat_order_status_history (`parent_id`,`is_customer_notified`,`is_visible_on_front`,`comment`,`status`,`entity_name`,`created_at`) VALUES (YOUR_ORDER_ID,0,0,'',NEW_STATUS_CODE,'order','2014-05-20 11:42:29')
【讨论】:
SQL 呢:
UPDATE sales_flat_order SET state="canceled", status="canceled" WHERE entity_id = {order id should be here} AND increment_id = {order increment id should be here}
在此查询中,您应该指定 entity_id 或 increment_id 或两者。如你所愿。
在更改某些内容之前备份您的数据库。我没有时间分析与订单相关的数据库结构和约束。
PHP 怎么样:
从根文件夹运行以下 PHP 脚本:
错误报告(E_ALL); ini_set('display_errors', 1); require_once('app/Mage.php'); 法师::app('admin'); $order = Mage::getModel('sales/order')->loadByIncrementId($id);//id是你的订单增量id 或者 $order = Mage::getModel('sales/order')->load($id);//id是你的订单id if ($order->getId()) { $order->cancel()->save(); }【讨论】:
请考虑更改订单状态/状态是不够的:您还应该取消商品和金额信息,加入sales_flat_order_item。
【讨论】: