Magento事件为Paypal IPN标记订单为处理中


Magento event for Paypal IPN marking order as Processing

我正在为Magento (1.4 CE)的扩展工作,一旦订单已支付,需要触发。我很难找到一个事件挂钩,将触发当贝宝IPN(贝宝标准)已经做了它的事情。

我已经尝试使用sales_order_invoice_save_after和sales_order_invoice_register事件,但这两个事件似乎都不是由Paypal IPN响应触发的。

我现在尝试使用sales_order_save_after事件来检测订单何时进入"处理"状态,如下所示:

class Lightbulb_Blastramp_Model_Observer {
    public function sendOrderToBlastramp(Varien_Event_Observer $observer) {
        Mage::log('Start' . "'n'n", null, 'blastramp.log');
        $order = $observer->getEvent()->getOrder(); // get order data
        // make sure the order is in the processing state
        if ($order->getState() != Mage_Sales_Model_Order::STATE_PROCESSING) {
            Mage::log('Not processing, return.' . "'n'n", null, 'blastramp.log');
            return $this;
        }
        // order has reached "processing" state, do stuff...
    }
}

从日志文件中我可以看到,当订单最初以"payment pending"状态创建时,我的代码被触发,但是当它移动到"processing"状态时,没有被触发。当订单到达Paypal IPN设置的"处理"阶段时,是否有一些我可以挂钩的事件会触发?

欢呼

经过一段时间的努力,我最终通过覆盖Mage_Sales_Model_Order_Payment中的_isCaptureFinal($amount)方法成功地解决了这个问题。

class Lightbulb_Blastramp_Model_Order_Payment extends Mage_Sales_Model_Order_Payment {
    public function _isCaptureFinal($amount) {
        // do things here
        return parent::_isCaptureFinal($amount);
    }
}

这要归功于另一个问题的答案:https://stackoverflow.com/a/5024475/602734

希望这能帮助到一些人!

如果有人像我一样偶然发现这个问题,一个观察者按照最初的请求做这个;

checkout_onepage_controller_success_action

只返回订单id,所以;

$order_id = $observer->getData('order_ids');
$order = Mage::getModel('sales/order')->load($order_id);

,您看到订单状态为'处理',付款已批准(或未批准)。