【问题标题】:Retrieving the order_id of a current checkout session within an observer in Magento在 Magento 的观察者中检索当前结帐会话的 order_id
【发布时间】:2011-10-18 04:38:53
【问题描述】:

我正在尝试检索刚刚在结帐过程中创建的订单的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

【问题讨论】:

    标签: magento magento-1.5


    【解决方案1】:

    如果您检查代码并 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());
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 2023-04-06
      • 2011-03-10
      相关资源
      最近更新 更多