订单以编程方式取消时未触发Magento事件

时间:2016-09-15 13:47:57

标签: magento

我正在运行一个脚本来自动取消订单。 我的脚本看起来像这样。

$order->cancel()->save();

问题在于,它正确取消了订单,但似乎没有发送order_cancel_after事件。

我该如何解决这个问题,我可以在我的脚本中发送此事件吗?为什么此取消操作与单击后端订单页面中的取消按钮不同?

2 个答案:

答案 0 :(得分:1)

以下是我在调用order_cancel_after时获取$order->cancel()事件以在前端触发的内容。我不得不为Magento_Authorizenet问题实施此问题,当信用卡被拒绝时,该事件未被触发。

编辑:我刚刚意识到您的问题是针对Magento 1 EE的。如果有人在Magento 2 EE上遇到这个问题,我会留在这里。

使用指定的内容创建以下文件(用您的供应商名称替换 [Vendor] ):

的应用程序/代码/ [供应商] /Reward/registration.php

此文件负责让Magento了解您的模块。在此答案中添加所有文件后,您需要运行php bin/magento setup:upgrade

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    '[Vendor]_Reward',
    __DIR__
);

的应用程序/代码/ [供应商] /Reward/etc/module.xml

此文件声明模块的安装版本及其依赖的任何模块(在我们的示例中为Magento_Reward)。

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="[Vendor]_Reward" setup_version="0.1.0">
        <sequence>
            <module name="Magento_Reward"/>
        </sequence>
    </module>
</config>

的应用程序/代码/ [供应商] /Reward/etc/frontend/events.xml

此文件将注册已为adminhtml(后端)定义的股票Magento_Reward观察者,但是为前端(因为它在etc / 前端中的位置)执行此操作:

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="order_cancel_after">
        <observer name="magento_reward" instance="Magento\Reward\Observer\ReturnRewardPoints" />
    </event>
</config>

答案 1 :(得分:0)

您可以像这样发送自己的活动:

Mage::dispatchEvent(
        'order_cancel_after',
        array('order' => $order, 'quote' => $this->getQuote())
    );

根据您的使用情况放置此代码。