我正在尝试在特定事件上发出观察员代码,该事件将在成功的在线支付(如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;”语句。
有人请指点我正确的方向吗?
答案 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);