2011-11-25 26 views
3

我正在爲Magento(1.4 CE)的擴展工作,需要觸發一次訂單已付款。我很難找到一個事件,當貝寶IPN(貝寶標準)完成它的事情時,會觸發這個事件。Magento事件Paypal 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... 
    } 
} 

從日誌文件中我可以看到我的代碼時觸發訂單最初是在「付款待處理」狀態下創建的,但在移至「處理」狀態時不會觸發。是否有一些事件可以觸發,當訂單觸及Paypal IPN設置的「處理」階段時會觸發?

乾杯

回答

2

與此掙扎了一會兒後,我終於通過重寫Mage_Sales_Model_Order_Payment的_isCaptureFinal($量)方法必須有這樣的成功。

例如。

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

如果有人像我這樣偶然發現了這個問題,那麼這樣做的觀察者就是最初所要求的;

checkout_onepage_controller_success_action

這僅返回訂單ID,因此,

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

並且您看到訂單狀態爲'正在處理'且付款已被確認(或未確認)。