2014-03-25 106 views
3

我遇到了一些模塊問題。我創建了一個觀察者,用於上傳XML併爲管理員發送通知。Magento用於發送訂單確認郵件的事件

我有兩個事件testet:<sales_order_place_after><sales_order_save_after>

問題是我提供2種付款方式(銀行轉賬和信用卡)。一個立即更改狀態爲[New](銀行轉賬),另一個是通過信用卡支付,在付款被捕獲之前,然後在支付已被捕獲之後,該狀態爲[Processing][New]

這給了我一個問題,因爲我只想爲每個訂單上傳一次XML,並且每個訂單更新的<sales_order_save_after>觸發事件和<sales_order_place_after>僅觸發一次,而不是在支付被捕獲時觸發。

我認爲解決方案是使用與Magento用來發送訂單確認郵件相同的事件。那是哪個事件?

這是我的觀察員,不正確工作。

public function salesOrderSaveAfter($observer) { .... if ($orderStatus == 'pending' || $orderStatus == 'bank_transfer') {

任何建議,以解決這個問題?

回答

2

訂單確認電子郵件不會從事件觸發。他們在類Mage_Checkout_Model_Type_Onepage中的saveOrder()方法中觸發。

你應該看到一些類似的代碼;

/** 
* a flag to set that there will be redirect to third party after confirmation 
* eg: paypal standard ipn 
*/ 
$redirectUrl = $this->getQuote()->getPayment()->getOrderPlaceRedirectUrl(); 
/** 
* we only want to send to customer about new order when there is no redirect to third party 
*/ 
if (!$redirectUrl && $order->getCanSendNewEmailFlag()) { 
    try { 
     $order->sendNewOrderEmail(); 
    } catch (Exception $e) { 
     Mage::logException($e); 
    } 
} 

這基本上只要下訂單,除非支付方法有重定向URL發送確認郵件(即第三方支付頁面,如貝寶標準)。

如果您不希望以特定付款方式發送電子郵件,則可以覆蓋上述功能並檢查付款類型;

if (!$redirectUrl && $order->getPayment()->getMethod() != 'your_payment_method' && $order->getCanSendNewEmailFlag()) { 
    try { 
     $order->sendNewOrderEmail(); 
    } catch (Exception $e) { 
     Mage::logException($e); 
    } 
} 

要觸發確認電子郵件的發送從你的觀察,只需加載順序對象,然後調用$order->sendNewOrderEmail();

相關問題