2

我正在使用 Magento 1.5.1.0 和“mPAY24 支付网关”扩展。我有一个事件“sales_order_payment_pay”的观察者类,向物品的制造商发送通知电子邮件。

这个解决方案有一些奇怪的行为:

  • 以注册用户身份登录时 - 按预期调用观察者方法
  • 以访客用户身份结账时,“付款交易”(万事达卡,VISA)成功时触发“sales_order_payment_pay”事件,并在单击“返回按钮”返回 Magento 商店后第二次触发。因为这个行为电子邮件被发送两次。

有没有办法防止观察者方法被执行两次?

亲切的问候,伯蒂

4

1 回答 1

1

不,作为客户端(与系统)开发人员,您无法决定事件何时触发。

以下是解决此问题的一些一般出发点:

相反,您需要更改观察者方法的行为。您需要检查系统的状态和/或数组中的对象,而不是盲目地在观察者方法中触发电子邮件$observer->getData(),并确定事件是在支付交易之后触发,还是在之后触发点击“点击返回按钮”。

如果是前者,请按预期发送您的电子邮件。如果是后者,只需return通过观察者方法和/或跳过带有条件的电子邮件。

如果这不是您自己的观察者方法的问题(它是核心观察者或作为模块一部分的观察者),请使用类重写将观察者方法替换为您自己的方法。如果检测到正确的状态,则调用return parent::observerMethodName,如果是“点击返回按钮”状态,则返回 null 并跳过调用父级。

如果观察者是使用硬编码的类名(不是类别名)设置的,那么您需要使用代码池覆盖来更改方法的行为。

于 2012-04-05T22:26:10.190 回答