2

私は Magento 1.5.1.0 と「mPAY24 Payment Gateway」拡張機能を使用しています。イベント「sales_order_payment_pay」のオブザーバークラスがあり、アイテムの製造元に通知電子メールを送信します。

このソリューションには、いくつかの奇妙な動作があります。

  • 登録ユーザーとしてログインすると、オブザーバー メソッドが期待どおりに呼び出されます。
  • ゲストユーザーとしてチェックアウトすると、「sales_order_payment_pay」イベントは、「支払いトランザクション」(Mastercard、VISA)が成功したときに発生し、「戻るボタン」をクリックして Magento ショップに戻ると 2 回目です。電子メールが 2 回送信される動作。

オブザーバー メソッドが 2 回実行されるのを防ぐ方法はありますか?

よろしく、バーティ

4

1 に答える 1

1

いいえ。クライアント (対システム) 開発者として、イベントが発生するタイミングを決定することはできません。

この問題を解決するための一般的な出発点を次に示します。

代わりに、オブザーバー メソッドの動作を変更する必要があります。オブザーバー メソッドでやみくもに電子メールを送信する代わりに、システムや$observer->getData()配列内のオブジェクトの状態を調べて、イベントが支払いトランザクションの後に発生したのか、それとも支払いトランザクションの後に発生したのかを判断する必要があります。 「戻るボタンをクリック」をクリックします。

前者の場合は、期待どおりにメールを送信してください。後者の場合returnは、オブザーバー メソッドから、および/または条件付きでメールをスキップします。

これが問題のオブザーバー メソッドではない場合 (コア オブザーバーまたはモジュールの一部であるオブザーバーである場合)、クラスの書き換えを使用して、オブザーバー メソッドを独自のものに置き換えます。正しい状態を検出した場合は、を呼び出します。return parent::observerMethodName「戻るボタンをクリックしている」状態の場合は、null を返し、親の呼び出しをスキップします。

オブザーバーが (クラス エイリアスではなく) ハードコーディングされたクラス名でセットアップされた場合、コード プール オーバーライドを使用してメソッドの動作を変更する必要があります。

于 2012-04-05T22:26:10.190 に答える