检索Magento中观察者当前结帐会话的order_id

时间:2011-10-18 04:38:53

标签: magento magento-1.5

我正在尝试检索刚刚在结帐过程中创建的订单的order_id(点击了下订单按钮后)。

我有一个观察者正在听sales_order_place_after事件。我正在尝试使用以下代码检索order_id

$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();

返回先前订单的order_id,而不是结帐时刚刚创建的当前订单。如果我使用这样的东西:

$order = Mage::getModel('sales/order');
$order->load(Mage::getSingleton('sales/order')->getLastOrderId());
$lastOrderId = $order->getIncrementId();

我没有得到order_id

我尝试这样做的原因是在最初创建时将所有订单状态设置为保持或挂起,并且当用户成功完成交易时,我将把状态更改为处理。

如何在观察者中检索正在进行的结帐会话的当前order_id

1 个答案:

答案 0 :(得分:2)

如果您检查代码并使用grep查找您正在使用的事件:

grep 'sales_order_place_after' app/code -rsn
app/code/core/Mage/Sales/Model/Order.php:1074:        Mage::dispatchEvent('sales_order_place_after', array('order'=>$this));

然后你会看到订单对象被传递给事件,而你的观察者方法可以做到

public function myCreateOrderAfterObs($observer){
    $order = $observer->getEvent()->getOrder();
    $orderEntityId = $order->getId(); 
    $orderIncrementId = $order->getIncrementId();
    //print_r($order->getData());
}

您可以请求传递给观察者的所有内容,我鼓励您只使用传递的对象而不是某些全局或会话项,因为它们可能在您的观察者上下文中或在调用观察者时不可用。