我正在尝试手动更改订单状态以在我的代码中的某个点完成.这是我到目前为止:
$order = Mage::getModel('sales/order')->load($_GET['orderid']);
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true, 'Pedido completado exitosamente.', true, false)->save();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到错误:
The Order state 'complete' must not be set manually.
Run Code Online (Sandbox Code Playgroud)
好的,我试过这个:
$order = Mage::getModel('sales/order')->load($_GET['orderid']);
$order->setStatus("complete");
$order->save();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到错误:
Call to a member function getMethodInstance() on a non-object
Run Code Online (Sandbox Code Playgroud)
那么如何手动设置订单状态才能完成.
我尝试用第一个评论出以下几行Sales/Order.php:
if ($shouldProtectState) {
            if ($this->isStateProtected($state)) {
                Mage::throwException(
                    Mage::helper('sales')->__('The Order State "%s" must not be set manually.', $state)
                );
            }
        }
Run Code Online (Sandbox Code Playgroud)
但是没有去,我仍然没有设置完成上面的错误.
我正在使用Magento 1.7.0.2.
首先获得您已经做过的订单ID:
$order = Mage::getModel('sales/order')->load($_GET['orderid']);
Run Code Online (Sandbox Code Playgroud)
然后,
尝试
$order->addStatusToHistory(Mage_Sales_Model_Order::STATE_COMPLETE);
Run Code Online (Sandbox Code Playgroud)
要么
$order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);
$order->save();
Run Code Online (Sandbox Code Playgroud)
您无法使用setState()方法AFAIK 手动将Order状态设置为COMPLETE或CLOSED .
我用
$order->addStatusHistoryComment("My comment why the status was changed", 
Mage_Sales_Model_Order::STATE_COMPLETE);
Run Code Online (Sandbox Code Playgroud)
根据Mage_Sales_Model_Order代码不推荐使用addStatusToHistory方法.