2011-12-26 10 views
1

編集:これは改定問題であり、私はそれが私にいくつかの答えを与えることを期待しています:) 無効方法は

(元の質問には、線より下にあります)私はワークフローがPaypal Standardに似ているマジェンタでカスタム支払方法を統合しようとしています。つまり、ユーザは、CCの詳細を記入するために支払いゲートウェイにリダイレクトされます。これまでのところ、私はこの部分を実装しており、それは完璧に動作しています。

問題は、管理者から注文がキャンセルされた場合、支払いゲートウェイのアップデートAPIを呼び出す必要があることです。したがって、カスタム支払いメソッドモデルクラスでは、$_canVoid変数をtrueに設定し、voidメソッドを実装して、API呼び出しを行いました。しかし、それは呼ばれることはありません。

呼び出す関数を検索し、Magentoののコアコードにブレークポイントを入れた後、私は次の式がfalse

$authTransaction = $this->getAuthorizationTransaction();に評価されるためvoidが順番にある偽のためcanVoid方法のMage_Sales_Model_Order_Paymentリターンと呼ばれていないことを発見しました

私はauthorizeメソッドを支払いメソッドモデルで実装していないため、この問題が発生していると考えました。だから私はauthorizeメソッドを追加しましたが、それも呼び出されていません。 config.xmlファイルでは、 "authorize"がpayment_actionノードに追加されています。

私は、いつどこから、どこからメソッドが呼び出されるのかを理解することができず、注文の取り消し時にvoidが働くように何をしなければならないのか分かりません。私はAUTHORIZEとキャプチャなどの決済ゲートウェイに関連する概念のいくつかの基本的な理解が必要

元の質問..


を助けてください。

私はバックグラウンドを与えるために、paypalと同様の支払いゲートウェイをマゼンタに統合しようとしています。私は統合のチェックアウト部分を完了しました。すなわち、チェックアウト時に、パラメータを含む隠れたフォームがpaypalのように提出され、買い物客は、支払いゲートウェイサイトのクレジットカードの詳細を入力する。

これ以外にも、支払いのゲートウェイのupdate-apiを呼び出して、がキャンセルされた場合は、注文がキャンセルされるたびにとしてキャンセルする必要があります。そこで、私の支払い方法モデルクラスに次のコードを追加しました

protected $_canVoid = true; 

public function void(Varien_Object $payment) { 
    // some code here.. 
    var_dump($payment); exit; 
} 

しかし、このメソッドはまったく呼び出されません。コードを調べた後、 magentoは承認トランザクションを探し、見つからなければ上記のvoidメソッドを呼び出しません。 authorizeメソッドを最初に呼び出す必要があることを意味していますが、それだけが無効になる可能性がありますか?しかし、ユーザが支払いゲートウェイウェブサイトのクレジットカードの詳細を私の理解に従って に入力しているため、ゲートウェイサービスによって処理されるので、私は認可と取得を実装する必要はありません。これが間違っていたら間違いなく修正してください..

私はマゼンタでペイパルスタンダードコードをチェックしましたが、ボイドメソッドもありません。支払いゲートウェイのようなPaypalの標準では、これはマゼンタでは機能しませんか?

何か助けていただければ幸いです。

PS。私はすでにこの質問 - Magento Payment flowを通過しましたが、私の場合にvoidメソッドが呼び出されない理由を説明していません。

+0

このサイトにアクセスしたことはありますか? [独自の支払いゲートウェイの作成](http://roysimkes.net/blog/2009/11/creating-your-own-payment-gateway-for-magento-part-1/) –

+0

リンクをありがとう。クレジットカード情報が店舗のウェブサイト自体で受け入れられる支払い方法のためのものであることがわかります。私の場合、買い物客は支払いゲートウェイのサイトのCCの詳細を入力します。だから私は、マゼンタの支払いメソッドクラスは、承認する必要はない/キャプチャすると思います。注文が取り消され、クレジットメモがクリックされると、私はupdate-apiを呼び出して無効/払い戻しをする必要があります。私の質問は、これが可能であるか、または私は認可/キャプチャ/無効(一般的に)の概念をはっきりと理解していないのですか? – naiquevin

答えて

1

承認を無効にする場合は、トランザクションのクローズを防止する必要があります。

あなたが(ちょうどauthorize.netの実装のように再実装_addTransaction)それを悪い方法を行うことができます。もちろん、

しかし、最善のアプローチは、カスタム支払いゲートウェイのオーソライズ方法では、虚偽とsetIsTransactionClosedメソッドを呼び出すことです。

これはドキュメント化されていない機能です。このメソッドは、PHPの魔法の__callメソッドを使用してMage_Sales_Model_Order_Paymentの内部メンバーを設定するため、IDEで見つけるのが難しくなります。

$payment->setIsTransactionClosed(false); 
+0

これは私にとって同じ問題を解決しました。ありがとう! – Ziagl

+0

'$ payment-> setIsTransactionClosed(false);'は書かれていますか? –

関連する問題