我正在运行一个脚本来自动取消订单。我的脚本看起来像这样。
$order->cancel()->save();这样做的问题是,它正确地取消了订单,但似乎没有调度order_cancel_after事件。
我应该如何解决这个问题,我可以在我的脚本中调度这个事件吗?为什么取消操作不同于在后端订单页面点击取消按钮?
发布于 2017-07-18 10:12:22
下面是我想出的在调用$order->cancel()时在前端触发order_cancel_after事件的方法。我必须为一个Magento_Authorizenet问题实现它,在这个问题中,当信用卡被拒绝时,该事件不会被触发。
编辑:我刚刚意识到你的问题是针对Magento1 EE的。我会把这个留在这里,以防任何人在Magento 2 EE上也有这个问题。
使用指定的内容创建以下文件(将供应商替换为您的供应商名称):
app/code/Vendor/Reward/registration.php
这个文件负责让Magento了解你的模块。在添加此答案中的所有文件后,您将需要运行php bin/magento setup:upgrade。
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'[Vendor]_Reward',
__DIR__
);app/code/Vendor/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>app/code/Vendor/Reward/etc/frontend/events.xml
这个文件将注册已经为adminhtml (后端)定义的股票Magento_Reward观察器,但是要为前端注册(因为它在adminhtml中的位置
<?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>发布于 2016-09-16 13:09:47
您可以像这样调度您自己的事件:
Mage::dispatchEvent(
'order_cancel_after',
array('order' => $order, 'quote' => $this->getQuote())
);根据您的使用情况放置此代码。
https://stackoverflow.com/questions/39512779
复制相似问题