【问题标题】:Magento manually change order status to 'complete'Magento 手动将订单状态更改为“完成”
【发布时间】:2013-01-31 16:37:58
【问题描述】:

我正在尝试手动更改订单状态以在我的代码中的某个点完成。这是我目前所拥有的:

$order = Mage::getModel('sales/order')->load($_GET['orderid']);
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true, 'Pedido completado exitosamente.', true, false)->save();

当我这样做时,我得到了错误:

The Order state 'complete' must not be set manually.

好的,我试了一下:

$order = Mage::getModel('sales/order')->load($_GET['orderid']);
$order->setStatus("complete");
$order->save();

当我这样做时,我得到了错误:

Call to a member function getMethodInstance() on a non-object

那么如何手动设置订单状态为完成。

我尝试使用第一个注释掉Sales/Order.php 中的以下行:

if ($shouldProtectState) {
            if ($this->isStateProtected($state)) {
                Mage::throwException(
                    Mage::helper('sales')->__('The Order State "%s" must not be set manually.', $state)
                );
            }
        }

但不行,我仍然得到上面的未设置完成错误。

我正在使用 Magento 1.7.0.2。

【问题讨论】:

    标签: php magento


    【解决方案1】:

    首先像你已经做的那样获取订单 ID:

    $order = Mage::getModel('sales/order')->load($_GET['orderid']);
    

    然后,

    试试

    $order->addStatusToHistory(Mage_Sales_Model_Order::STATE_COMPLETE);
    

    $order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);
    $order->save();
    

    您无法使用setState() AFAIK 方法手动将订单状态设置为 COMPLETE 或 CLOSED。

    【讨论】:

    • 对不起,这会引发以下错误Call to a member function getMethodInstance() on a non-object
    • 这可能是由于其他一些错误。getMethodInstance() 通常出现在付款方式中。您的错误表明您正在尝试在非对象上获取付款方式
    • 我正在尝试在全额付款后在成功页面上设置订单状态。由于某种原因,Magento 在返回时不再设置付款状态。因此,在我的付款模块中,我尝试在最终成功页面上设置付款。我正在尝试设置它在onestepcheckout 成功页面上。只有当我将这些东西添加到页面时才会发生错误,如果我不添加这些东西就不会出错。
    • 问题在于设置支付方式代码。或者在最坏的情况下,您加载的订单不存在或无效,因此无法获取付款方式详细信息。
    【解决方案2】:

    我用

    $order->addStatusHistoryComment("My comment why the status was changed", 
    Mage_Sales_Model_Order::STATE_COMPLETE);
    

    根据 Mage_Sales_Model_Order 代码,方法 addStatusToHistory 已被弃用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2019-06-01
      • 1970-01-01
      • 2023-03-19
      • 2016-04-17
      • 2013-04-30
      • 2011-06-04
      相关资源
      最近更新 更多