この支払い拡張機能をインストールした後、注文グリッドに支払いゲートウェイからの注文ステータスを表示する別の列があるカスタム支払い方法を作成しました。
要件は、グリッド内の注文が、配送済み、処理中などの特定の支払いゲートウェイのステータスにある場合にキャンセルされないようにすることです。支払いゲートウェイのステータスが保留中の場合、注文はキャンセルされる必要があります。
注文のキャンセルを求める支払いゲートウェイへの API 呼び出しを行う必要があります。注文が保留中の場合、注文はキャンセルされます。注文が保留中でない場合、API はエラー コードとエラー メッセージを含む応答をスローし、注文をキャンセルできないことを伝えます。
すべての API 呼び出しを処理する PHP ライブラリがあります。上記の場合、注文をキャンセルできない場合に cancelOrder API サービスを呼び出すと、PHP ライブラリは API のエラー コードを例外コードとして、エラー メッセージを例外メッセージとして使用して例外をスローします。
このために、Order_save_before イベントを処理する Observer を実装しました。オブザーバーでは、PHP ライブラリの cancelOrder() メソッド (内部的に cancelOrder API 呼び出しを行う) を使用するコードを書きました。支払いゲートウェイのステータスが保留中の場合、注文はキャンセルされ、キャンセルできない場合は例外がスローされます。
支払い方法で作成された個々の注文を開き、キャンセル ボタンをクリックして注文をキャンセルすると、例外がカスケードされ、上部に注文をキャンセルできないという例外メッセージが表示されます。
しかし、注文を選択し、ドロップダウンからキャンセルを選択して送信を押して、注文グリッドから注文をキャンセルしようとすると、例外が発生したという例外ページにページがリダイレクトされます。この場合、注文のキャンセルを元に戻したり、キャンセルを防止したり、例外を処理したりする方法がわかりません。私のコードは以下の通りです。
public function cancelOrderObserver(Varien_Event_Observer $Observer)
{
try
{
//code that cancels order if it is pending else throws exception saying cannot cancel order;
}
catch (Exception $e){
Mage::throwException(Mage::helper('adminhtml')->__($e->getMessage()));
}
これについて私を助けてください。
この問題についてさらに説明が必要な場合はお知らせください。