我正在为Magento(1.4 CE)进行扩展,需要在订单付款后触发。我很难找到一个可以触发的事件,当Paypal IPN(Paypal Standard)做了它的事情时会触发。
我尝试过使用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...
}
}
从日志文件中我可以看到,我的代码是在最初使用“付款待处理”状态创建订单时触发的,但是当它移动到“处理”状态时不会被触发。当订单遇到Paypal IPN设置的“处理”阶段时,是否有一些我可以挂钩的事件会触发?
干杯
答案 0 :(得分:2)
经过一段时间的努力,我最终通过覆盖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
希望这有助于某人!
答案 1 :(得分:1)
如果有人像我一样偶然发现了这个问题,那么观察者会按照最初的要求做到这一点;
checkout_onepage_controller_success_action
这只返回订单ID,所以;
$order_id = $observer->getData('order_ids');
$order = Mage::getModel('sales/order')->load($order_id);
您看到订单状态为“正在处理”且付款已被批准(或未付款)。