Magento 1.8.1.0事件观察员

时间:2014-04-18 15:29:45

标签: magento

我正在尝试在特定事件上发出观察员代码,该事件将在成功的在线支付(如Paypal)之后将Magento的交易写入其他系统。

以下是我的要求:

(1)在用Paypal标准成功支付PayPal后,Magento将解雇观察员。

(2)Magento将加载页面结帐成功页面,该页面将显示已下订单。

(3)Magento将在管理区域显示“完成”作为订单状态。

(4)Magento应通知用户。

(5)Magento应显示前端登录用户的最近订单和订单历史记录。

(6)应生成订单的发票。

当我使用事件“sales_order_payment_pay”时,Magento成功触发观察者并将事务写入外部系统(要求1)并加载结账页面(要求2),但要求(3),(4), (5)和(6)不符合。订单状态处于待处理状态。未生成发票。用户不会收到通知。订单未显示在订单历史记录或用户的最近订单中。

public function myObserver (Varien_Event_Observer $observer) 
{ 
  $order_id = $observer->getPayment()->getOrder()->getId(); 

“""""""" REST OF THE CODE HERE “""""""" 
} 

当我使用事件“checkout_controller_onepage_success_action”时,Magento不会激活观察者,Checkout Success Page是BLANK,而满足要求(3),(4),(5)和(6)。如何触发事件以及要加载的页面?

public function myObserver (Varien_Event_Observer $observer) 
{ 
 $order_id = $observer->getEvent()->getOrder()->getId(); 

  “""""""" REST OF THE CODE HERE “""""""" 
} 

当我使用事件“controller_action_layout_render_after_checkout_onepage_success”时,Magento不会解雇观察者。在这种情况下,满足所有其他要求,包括(2)。我如何才能触发事件?

public function myObserver (Varien_Event_Observer $observer) 
{ 
 $order_id = $observer->getEvent()->getOrder()->getId(); 

 “""""""" REST OF THE CODE HERE “""""""" 
} 

我很想知道观察者是否需要在代码末尾的“exit;”或“return true;”语句。

有人请指点我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

收听Magento事件不应影响标准Magento功能。这就是为什么他们在那里。除非您的代码因致命错误而停止PHP进程。

您是否启用了开发者模式并显示错误? (http://alanstorm.com/magento_exception_handling_developer_mode)。也许您的代码中存在错误,导致其他事件无法触发。

你发布的代码看起来没问题,但我不确定Order类中是否有ID字段,getId()可能返回null,我认为你应该使用getEntityId()或getIncrementId()if您需要订单ID(Magento API order id vs. increment id)。

答案 1 :(得分:0)

首先确保您的活动被解雇。 通过节食来调试它

public function myObserver (Varien_Event_Observer $observer) 
{ 
  echo "hello";die;
}

检查这是否有效。如果没有请检查您的配置文件。希望你正在使用正确的活动。请查看您是使用onepage还是onetep,它们都有不同的活动。

如果有效,请检查您是否收到订单ID 尝试使用此代码获取最后订购的商品详情。

$order_id = Mage::getSingleton('checkout/session')->getLastRealOrderId();        
$order = Mage::getModel('sales/order')->loadByIncrementId($order_id);