2012-05-30 10 views
5

したがって、horray - 私は新しいカスタムPayment Gatewayを作成しようとしています。サードパーティのAPIを使用して認証/取得を行うように設計されていますが、サードパーティのサイトにリダイレクトする必要はありません。Magentoカスタム支払いゲートウェイが「承認」または「キャプチャ」メソッドを起動しない

私が理解しているように、Magentoで注文が確定/ファイナライズされ、ゲートウェイが「Authorize and Capture」に設定されている場合、ゲートウェイモデルから「キャプチャ」メソッドを起動する必要があります。現在、これは行っていません。

もちろん、私が管理者オーダービューから具体的に取得すると、キャプチャが試みられますが、これはチェックアウト時に直ちに実行する必要があります。私のゲートウェイモデルで

、私が持っている、以下の(読みやすくするために切り捨て):

<?php 
class Example_Gateway_Model_Payment extends Mage_Payment_Model_Method_Cc 
{ 
    protected $_code = 'example'; 

    protected $_isGateway = true; 
    protected $_canAuthorize = true; 
    protected $_canCapture = true; 
    protected $_canUseInternal = true; 
    protected $_canUseCheckout = true; 

    // This is an empty block class that extends Mage_Payment_Block_Form_Cc 
    protected $_formBlockType = 'example/form_example'; 

    public function authorize(Varien_Object $payment, $amount) 
    { 
     Mage::log('Authorizing!'); 
    } 

    public function capture(Varien_Object $payment, $amount) 
    { 
     Mage::log('** Capturing **'); 
     // Third-party API stuff would go here, with exceptions being thrown if the gateway determines they've provided an invalid card, etc. 
    } 

    public function assignData($data) 
    { 
     Mage::log('Assigning Data'); 
    } 
} 

この支払モデル自体は間違いなく動作します - 私はそれを追加した場合、私は同様__construct()として、assignData()validate()のためのログ出力を取得。しかし、私が何をするにしても、実際に注文をするときには、キャプチャメソッドや権限メソッドは起動しません。私は、追加のテーブルを必要としないとしてリソース・モデルの必要性があると信じていません

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Example_Gateway> 
      <version>0.0.5</version> 
     </Example_Gateway> 
    </modules> 
    <global> 
     <blocks> 
      <gateway> 
       <class>Example_Gateway_Block</class> 
      </gateway> 
     </blocks> 
     <models> 
      <gateway> 
       <class>Example_Gateway_Model</class> 
      </gateway> 
     </models> 
     <helpers> 
      <gateway> 
       <class>Example_Gateway_Helper</class> 
      </gateway> 
     </helpers> 
    </global> 
    <frontend> 
     <!-- Snip.. Nothing special here --> 
    </frontend> 
    <default> 
     <payment> 
      <gateway> 
       <sort_order>0</sort_order> 
       <model>gateway/payment</model> 
       <enabled>1</enabled> 
       <order_staus>processing</order_status> 
       <payment_action>authorize_capture</payment_action> 
       <cctypes>VI,MC,AE,DI</cctypes> 
       <useccv>1</useccv> 
      </gateway> 
     </payment> 
    </default> 
</config> 

;:

私のconfig.xmlには、多少のように読み込みます私は、単にsales_flat_order_paymentとそれに関連するテーブルを使用して、ゲートウェイ関連の/提供データ(txn idなど)を格納することを期待しています。

同様に、デフォルトのCCブロックを拡張して標準支払いフォームを取得します。

私には何が欠けていますか?それは私が見落としているような小さくてシンプルなものでなければなりません。

ありがとうございます!


UPDATE: はこれまでのところ、私は手動でキャプチャ()メソッドを呼び出しますcheckout_type_onepage_save_orderイベントにオブザーバーを使用し、回避策を実装している - しかし、私は、これは正しい方法ではないかなり確信しています行く。

Magentoが自動的にcapture()を呼び出すべきであると私は間違っていません。ゲートウェイがauthorize_captureに設定されていれば、最初の注文時に保存されます。

+0

他の支払いゲートウェイに対して 'authorize()'や 'capture()'が呼び出されているかどうか、またいつログを記録することができますか? – nachito

+0

あなたの 'config.xml'の中でヘルパークラスを' Example_Gateway_Model'から 'Example_Gateway_Helper'に変更しようとしましたか?また、 'system.xml'はどのように見えますか、サードパーティのチェックアウトモジュールがインストールされていますか? Magentoのバージョンも同様に役立つかもしれません。 – B00MER

+0

@ B00MER - 申し訳ありませんが、それはタイプミスでした。それは私の実際のコードでは適切に 'ヘルパー'です。これはエンタープライズ1.11インスタンスです。サードパーティのチェックアウトモジュールはインストールされていません。私はsystem.xmlを投稿しますが、それが何かにあまりにも多くの光を当てるとは想像できません。 – Morgon

答えて

0

私は手動でキャプチャメソッドを呼び出すためにオブザーバを使用しました。
最も洗練されたソリューションではありませんが、十分に機能します。

3

解決済み!あなたはこれを必要とする:

protected $_isInitializeNeeded  = false; 

私はこれが必要な理由はわかりませんが、この時点で、私は実際に物事を得ることに賛成理由のMagentoのを把握しようとあきらめました。私はあなたとまったく同じ問題を抱えていました。ソースコードを調べると、isInitializeNeededがtrueを返したときにPayment.phpが_authorizeを呼び出さないことがわかりました。だから、あなたのモデルにその線を張ってください。それはうまくいくでしょう。

私は方法があるべきだと思う
+0

私は同じ問題を抱えていましたが、これをfalseに変更すると自分のメソッドが起動しました。 – jeruki

+0

@Benubird、私はこれを探していたので、ここで答えを見つけました[Magento Payment Model Wrapup](http://tweetorials.tumblr.com/post/10801322037/magento-payment-model-wrapup) –

2

: "authorize_capture" とない設定にそのような

<payment_action>authorize_capture</payment_action> 

を述べたように "キャプチャ":

public function authorize_capture(Varien_Object $payment, $amount) 
{ 
    Mage::log('** Capturing **'); 
    // Third-party API stuff would go here, with exceptions being thrown if the gateway determines they've provided an invalid card, etc. 
} 

i「が承認する同様の問題がありました"authorize_action"が空だったため、メソッドは一切起動されませんでした。メソッド自体をハードコーディングすることでこれを解決できました。 authorizeメソッドを取得するには、 "getConfigPaymentAction"が呼び出されます。

public function getConfigPaymentAction() { 
    return 'authorize'; 
} 
関連する問題