2012-04-05 10 views
2

Magento 1.5.1.0と "mPAY24 Payment Gateway"エクステンションを使用しています。 イベント "sales_order_payment_pay"にObserverクラスがあり、商品の製造元に通知する メールを送信しています。Observerメソッドが2回呼び出されないようにする

このソリューションは、いくつかの奇妙なbehavourがあります。登録ユーザとしてログインした場合

  • を - 予想通りオブザーバメソッドは、ゲストユーザとしてチェックアウトする場合は、「sales_order_payment_pay」イベントが発生 ある
  • と呼ばれています「決済取引」(マスターカード、VISA)が成功したとき」と 二回クリックした後、 『バックMagentoのショップに取得するには戻るボタン』。 この動作Eメールを2回送信されるため。

オブザーバーメソッドが2回実行されないようにする方法はありますか?

種類よろしく、クライアント(VSシステム)開発者として バーティ

+0

私の質問は「mPAY24 Payment Gateway」に固有のものではありません。オブザーバーメソッドが2回実行されないようにする方法をヒント/ヒントを報告してください。 THX – Bertie

+0

ここをクリックしてください:http://stackoverflow.com/questions/5838346/magento-customer-save-after-always-fired-twice –

答えて

1

いいえ、あなたは時にイベントが発生するかを決定するために得ることはありません。ここで

は、この問題を解決するためのポイントを飛び降り、いくつかの一般的です:

代わりに、あなたはあなたのオブザーバメソッドの動作を変更する必要があります。オブザーバーメソッドで電子メールを盲目的に実行する代わりに、配列内のシステムおよび/またはオブジェクトの状態を調べ、イベントが支払取引後に発生したのか、それとも解雇されたのかを判断する必要があります「戻るボタンをクリックする」をクリックしてください。

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

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

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

+0

ご意見ありがとうございました。この情報は私には大いに役立ちます。オブザーバーはカスタム拡張の一部であり、現時点では利用できない別の開発者になっています。 Observerメソッドには、Varien_Event_Observerオブジェクト$ observerが引数として渡されません。 クラスFOO_Bar_Observer { パブリック関数のsendEmail($パラメータ){// Eメールを送信 }} – Bertie

関連する問題