我在写一个模块时遇到了一些问题。我创建了上传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' ) {
有任何解决此问题的建议吗?
答案 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();
。