Php 在付款捕获后调用Magento事件观察者

Php 在付款捕获后调用Magento事件观察者,php,magento,Php,Magento,我试图在订单创建后和付款被捕获后给观察员打电话。 到目前为止我已经试过了; 签出\提交\所有\之后, 销售、订单、付款、地点、结束、, 销售(订单)(地点)(地点), 销售、订单、付款、付款、, 销售、订单、付款、捕获、, 销售\订单\付款\交易\保存\之后 仅列举主要的几个。 我还在dispatchEvent()中记录了所有事件调度,但没有发现任何突出的事件,只有在需要时才会触发。 我遇到的问题是,订单的状态始终是“付款待定”或在此之前的状态;这意味着我不知道订单是会失败还是会成功 我的目标是

我试图在订单创建后和付款被捕获后给观察员打电话。 到目前为止我已经试过了; 签出\提交\所有\之后, 销售、订单、付款、地点、结束、, 销售(订单)(地点)(地点), 销售、订单、付款、付款、, 销售、订单、付款、捕获、, 销售\订单\付款\交易\保存\之后

仅列举主要的几个。 我还在dispatchEvent()中记录了所有事件调度,但没有发现任何突出的事件,只有在需要时才会触发。 我遇到的问题是,订单的状态始终是“付款待定”或在此之前的状态;这意味着我不知道订单是会失败还是会成功

我的目标是,仅在成功的订单上启动功能。
谢谢。

我也尝试了所有活动,但没有成功。然后我开始覆盖Mage OnePageController并调用我的自定义函数。下面是覆盖一步签出的代码

app\etc\modules\Namespace\u Module.xml

<Namespace_Checkout>
    <active>true</active>
    <codePool>local</codePool>
</Namespace_Checkout>

真的
地方的
app\code\local\Namespace\Checkout\etc\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>

0.1.0        
名称空间校验
app\code\local\Namespace\Checkout\controllers\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()
wher,您可以将自定义代码放入其中

希望它能帮助你

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>

0.1.0
独生子女
名称空间\u模块名称\u模型\u观察者
自定义函数
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

    }        

}

经过更多的测试后,我发现下面的观察者做了这个把戏

checkout_onepage_controller_success_action
您可以看到订单状态为“正在处理”,付款已批准(或未批准)。

感谢您的贡献,但正如我在问题中所说的,我尝试过,但没有任何效果。
$order_id = $observer->getData('order_ids');
$order = Mage::getModel('sales/order')->load($order_id);