Вызов события Magento Наблюдатель ПОСЛЕ удержания платежа

Я пытаюсь вызвать 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() чтобы вы могли поместить свой собственный код.

Надеюсь, это поможет вам!