Magento用于发送订单确认邮件的事件是什么

时间:2014-03-25 10:49:20

标签: php magento zend-framework

我在写一个模块时遇到了一些问题。我创建了上传XML并发送管理员通知的观察者。

我测试了2个事件:<sales_order_place_after><sales_order_save_after>

问题在于我提供两种付款方式(银行转帐和信用卡)。一次更改状态为[New](银行转帐),另一种是通过信用卡付款,该信用卡在付款被捕获之前进入州[Processing],然后在获得付款后[New]

这给我带来了问题,因为我只想为每个订单上传一次XML,并且每次订单更新都会<sales_order_save_after>触发事件,<sales_order_place_after>只会触发一次,而不是在捕获付款时。

我认为解决方案是使用与Magento发送订单确认邮件相同的事件。那是哪个事件?

这是我的观察者无法正常工作。

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

有任何解决此问题的建议吗?

1 个答案:

答案 0 :(得分:2)

订单确认电子邮件不会从事件触发。它们是通过课程saveOrder()中的Mage_Checkout_Model_Type_Onepage方法触发的。

你应该看到一些代码,如;

/**
 * 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);
    }
}

除非付款方式有重定向网址(即第三方支付页面,如PayPal标准),否则一旦发出订单,这基本上会发送确认电子邮件。

如果您不希望针对特定付款方式发送电子邮件,则可以覆盖上述功能并让其检查付款方式;

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

要触发观察者发送确认电子邮件,只需加载订单对象并致电$order->sendNewOrderEmail();