如何防止Magento取消订单

时间:2012-05-02 12:43:29

标签: php magento

我创建了一种自定义付款方式,其中订单网格在安装此付款延期后,有另一列显示来自付款网关的订单状态。

要求是网格中的订单在某些特定的支付网关状态下不应被取消,例如已交付处理等。它应该在取消时取消支付网关状态为待处理

我需要向支付网关发出api呼叫,要求取消订单。如果订单是待处理,订单将被取消。如果订单未处于待处理状态,则API会抛出包含错误代码和错误消息的响应,并说该订单无法取消。

有一个处理所有API调用的PHP库。当我在上述情况下调用cancelOrder API服务时,如果订单无法取消,则PHP库会使用API​​的错误代码作为异常代码抛出异常,并将错误消息作为异常消息抛出。

为此,我实现了一个处理Order_save_before事件的Observer。在观察者中,我编写了使用PHP库的cancelOrder()方法(内部进行cancelOrder api调用)的代码,当支付网关的状态为待处理时,订单被取消,如果无法取消则抛出异常。 / p>

如果我打开由我的付款方式创建的单个订单并通过点击取消按钮取消订单,则会异常进行级联并显示顶部,并显示订单无法取消的异常消息

但是当我尝试通过选择订单从订单网格中取消订单时,从下拉菜单中选择取消并点击提交,页面将被重定向到异常页面,说明发生异常。在这种情况下,我不明白如何撤消或阻止取消订单并处理异常。我的代码如下所示。

public function cancelOrderObserver(Varien_Event_Observer $Observer)
{
try
   {
        //code that cancels order if it is pending else throws exception saying cannot cancel order;
   }
catch (Exception $e){
    Mage::throwException(Mage::helper('adminhtml')->__($e->getMessage()));
}

请帮我解决这个问题。

如果您需要更多关于此问题的解释,请与我们联系。

2 个答案:

答案 0 :(得分:1)

order_cancel_after 

不符合您的需求,因为在此阶段订单已被取消。

我会尝试像

这样的东西
order_save_before

你应该取消订单取消或不取消订单。如果是的话,请取消它。

更新1

我的主要观点是“取消”是回滚在> cancel()调用期间采取的行动。

目前我想到了其他选择。您可以尝试观察predispatch调用(如果massCancel操作存在以下事件),并检查您的服务是否可以取消订单。如果没有,则从请求中删除订单。像这样的东西。但我不确定这一点。

答案 1 :(得分:0)

sales_order_save_before事件:

$_order->setActionFlag(Mage_Sales_Model_Order::ACTION_FLAG_CANCEL, false);

相关问题