【问题标题】:Magento Observer not being called on order payment payMagento Observer 没有被要求支付订单付款
【发布时间】:2011-08-04 16:12:23
【问题描述】:

2011 年 5 月 8 日更新 *

我是 magento 的新手,并试图创建一个将在支付订单时触发的观察者。目前观察者只是发送一封电子邮件,但我将在未来对此进行扩展,但我需要先让代码正常工作。

我正在使用 Magento 1.5.1.0 并查看了事件挂钩 cheatsheat @ http://www.nicksays.co.uk/magento_events_cheat_sheet/ 我可以看到我想要挂钩的事件是

'sales_order_payment_pay'

发出
'app/code/local/Mage/Sales/Model/Order/Payment.php'.

因为我已经覆盖了核心文件夹中的文件

阅读大量文章后,我了解到我需要创建 3 个文件,如下所示

  1. app/etc/modules/PackageName_ModuleName.xml -> 包含说明模块所在位置的 xml 文件

  2. app/code/local/PackageName/ModuleName/etc/config.xml -> 其中 将观察者附加到已调度的“sales_order_payment_pay”事件

  3. app/code/local/PackageName/ModuleName/Model/Observer.php -> 由一个类组成,该类包含一个在 'sales_order_payment_pay 事件被触发时由 config.xml 调用的方法。

这是我创建的文件和目录中的文件,当触发“sales_order_payment_pay”时,代码将被扩展以做更多的事情,我只是在调试。

我的代码如下,订单付款没有收到邮件

app/etc/modules/Juno_Sales.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Juno_Finalise>
            <active>true</active>
            <codePool>local</codePool>
        </Juno_Finalise>
    </modules>
</config>

app/code/local/Juno/Sales/etc/config.xml

 <?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Juno_Sales>
                <version>0.1.0</version>
        </Juno_Sales>
    </modules>
    <global>
        <models>
            <junofinalise>
                <class>Juno_Sales_Model</class>
            </junofinalise>
        </models>          
        <events>
                <sales_order_payment_pay>
                <observers>
                        <juno_sales_order_observer>
                                <type>singleton</type>
                                <class>junofinalise/order_observer</class>
                                <method>finaliseJunoOrder</method>
                        </juno_sales_order_observer>
                </observers>
                </sales_order_payment_pay>     
        </events>
     </global>
</config>

app/code/local/Juno/Sales/Model/Order/Observer.php

 <?php
Mage::log(__FILE__);

class Juno_Finalise_Model_Order_Observer
{

    public function finaliseJunoOrder($event)
    {
         mail('ian.cassidy1404@gmail.com','call_juno_api','now call juno api');

        /*
                Sale has now been processed and is paid for, function needs modifying to call juno api 
        */


    }

}

?>

任何帮助将不胜感激。

非常感谢

伊恩

【问题讨论】:

    标签: xml events magento observer-pattern


    【解决方案1】:

    你的班级Juno_Finalise_Model_Observer 应该是Juno_Finalise_Model_Order_Observer

    【讨论】:

    • 你好,我已经尝试过了,但仍然没有运气,你认为这是因为观察者需要与调度事件的文件位于同一目录中,即
    • 观察者绝对不需要在同一个目录下。
    • 让我们确保您的模块被正确加载。在管理员中转到 System > Cache Management 并在调试期间关闭所有缓存。安装this module 并检查您的是否已列出。还转到 System > Configuration > Developer 并打开日志记录,然后在观察者文件的顶部输入 Mage::log(__FILE__); - 观察 var/log/system.log 文件以查看该文件是否被读取.
    • 很抱歉,1. 我已关闭所有缓存 2. 模块已安装并显示 3. 没有任何内容写入核心文件,所以我假设观察者从未被调用我已更新我上面的代码现在看起来如何,我确实注意到调度事件来自覆盖核心文件的 app/code/local/Mage/Sales/Model/Order/Payment.php。这可能是它不起作用的原因吗?感谢您的所有帮助
    • 我看到您已将一些“Finalise”实例更改为“Sales”。请记住在任何地方都这样做,包括在两个 XML 文件中的类名(必须匹配它们的路径名)和模块名中。我从来不知道一个事件会因为它是从local 目录分派而失败,覆盖应该没有任何效果。您是否尝试过在您认为某个事件的起始点放置断点或另一个 Mage::log
    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2016-06-26
    • 2015-01-19
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多