Я пытаюсь вызвать Observer после создания заказа и ПОСЛЕ оплаты. До сих пор я пробовал; checkout_submit_all_after, sales_order_payment_place_end, sales_order_place_after, sales_order_payment_pay, sales_order_payment_capture, sales_order_payment_transaction_save_after
Просто чтобы назвать основные. Я также зарегистрировал все Диспетчер событий в dispatchEvent (), но не нашел ничего, что выделяется, и только уволено, когда оно мне нужно. проблема, с которой я сталкиваюсь, заключается в том, что статус заказа – это всегда простой «Платежный платеж» или что-то, что предшествовало этому; это означает, что я не знаю, будет ли заказ неудачным или успешным.
Моя цель – запустить функцию только по успешным заказам. Благодарю.
после гораздо большего тестирования я нашел следующего наблюдателя, чтобы сделать трюк;
checkout_onepage_controller_success_action
Это возвращает только идентификатор заказа, так что;
$order_id = $observer->getData('order_ids'); $order = Mage::getModel('sales/order')->load($order_id);
и вы видите, что статус заказа – это «обработка», и платеж утверждается (или нет).
1) здесь пользовательский файл config.xml для файла наблюдателя
<?xml version="1.0"?> <config> <modules> <Namespace_Modulename> <version>0.1.0</version> </Namespace_Modulename> </modules> <frontend> <events> <checkout_submit_all_after> <observers> <Namespace_Modulename_Customevent> <type>singleton</type> <class>Namespace_Modulename_Model_Observer</class> <method>customFunction</method> </Namespace_Modulename_Customevent> </observers> </checkout_submit_all_after> </events> </frontend> </config>
2) создайте файл observer.php внутри вашего каталога модулей / моделей и вставьте этот код
<?php class Namespace_Modulename_Model_Observer { public function customFunction(Varien_Event_Observer $observer) { $order = $observer->getEvent()->getOrder(); //here you can add your custom code } }
попробуйте это .. уверен, что это вам поможет!
Я также пробовал все события, но не добился успеха. Затем я перешел на переопределение Mage OnePageController и вызвал мою пользовательскую функцию. Ниже приведен код для отмены проверки onestep.
приложение \ и т.д. \ модули \ Namespace_Module.xml
<Namespace_Checkout> <active>true</active> <codePool>local</codePool> </Namespace_Checkout>
Приложение \ код \ Local \ Namespace \ Checkout \ и т.д. \ config.xml
<?xml version="1.0"?> <config> <modules> <Namespace_Checkout> <version>0.1.0</version> </Namespace_Checkout> </modules> <frontend> <routers> <checkout> <args> <modules> <Namespace_Checkout before="Mage_OneStepCheckout">Namespace_Checkout</Namespace_Checkout> </modules> </args> </checkout> </routers> </frontend> </config>
Приложение \ код \ Local \ Namespace \ Checkout \ Контроллеры \ OnepageController.php
<?php require_once 'Mage/Checkout/controllers/OnepageController.php'; class Namespace_Checkout_OnepageController extends Mage_Checkout_OnepageController{ public function successAction(){ $session = $this->getOnepage()->getCheckout(); if (!$session->getLastSuccessQuoteId()) { $this->_redirect('checkout/cart'); return; } $lastQuoteId = $session->getLastQuoteId(); $lastOrderId = $session->getLastOrderId(); $lastRecurringProfiles = $session->getLastRecurringProfileIds(); if (!$lastQuoteId || (!$lastOrderId && empty($lastRecurringProfiles))) { $this->_redirect('checkout/cart'); return; } $this->customFunction(); // Custom function to call $session->clear(); $this->loadLayout(); $this->_initLayoutMessages('checkout/session'); Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId))); $this->renderLayout(); } function customFunction(){ // This function is calling before clearing order session //Here you can put all your custom code } } ?>
В вышеописанном контроллере я добавил customFunction()
чтобы вы могли поместить свой собственный код.
Надеюсь, это поможет вам!