Magento: получить идентификатор для заказа, прослушивая событие checkout_onepage_controller_success_action - PullRequest
2 голосов
/ 09 сентября 2010

Когда я смотрю на событие checkout_onepage_controller_success_action и работает, но не могу получить Id вновь созданного заказа.

У кого-нибудь есть идеи ??

Использование magento-1.4.1.0

Спасибо

Ответы [ 4 ]

5 голосов
/ 25 июля 2011

Событие отправляется так:

Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));

Итак, чтобы получить последний orderId, просто сделайте ваш метод наблюдателя следующим образом:

public function orderSuccessEvent($observer)
{
    $observer->getData('order_ids'));
}
3 голосов
/ 06 мая 2011

Это ответ, предоставленный Бранко Айзеле, и я только что успешно проверил:

        $order = new Mage_Sales_Model_Order();
    $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
    $order->loadByIncrementId($incrementId);

Спасибо ему и надеюсь, что это сработает.

2 голосов
/ 09 сентября 2010

Это событие, вероятно, вызывается перед выполнением самого действия. Можете ли вы использовать sales_order_save_after вместо этого?


РЕДАКТИРОВАТЬ: Вот ваш идентификационный код. По вашему наблюдателю:

public function setLinkStatus($observer) {
    $order = $observer->getEvent()->getOrder(); 
    $id = $order->getId();

    // do something useful
}
0 голосов
/ 30 июля 2013

Контроллер Onepage Checkout в версии 1.4.1 Magento не обновлен, чтобы иметь функции, которые могут получить идентификатор заказа, и, следовательно, вы не можете получить объект заказа и данные от наблюдателя события.Чтобы это работало в Magento 1.4.1, просто обновите ваш OnepageController необходимыми функциями.

Наилучшим подходом будет создание собственного модуля и переопределение контроллера ядра.

Добавьте это в config xml вашего модуля, чтобы ваш контроллер вызывался раньше, чем основной OnepageController.

...