だから、ホレイ-私は新しいカスタムペイメントゲートウェイを作成しようとしています。サードパーティのAPIを介して認証/キャプチャを行うように設計されていますが、サードパーティのサイトにリダイレクトする必要はありません。
私の理解では、注文がMagentoで発注/確定され、ゲートウェイが「承認とキャプチャ」に設定されている場合、ゲートウェイモデルから「キャプチャ」メソッドを実行する必要があります。現在、これを行っていません。
もちろん、管理者注文ビューから具体的にキャプチャすると、キャプチャが試行されますが、これはチェックアウトの直後に実行する必要があります(これも、すでに実行する必要があることを理解しています)。
私のゲートウェイモデルには、次のものがあります(読みやすさのために切り捨てられています)。
<?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');
}
}
この支払いモデル自体は間違いなく機能します-とのログ出力を取得assignData()
し、追加した場合validate()
も同様です。__construct()
しかし、私が何をしても、実際に注文するときに、キャプチャメソッドも承認メソッドも起動しません。
私のconfig.xmlは次のようになります。
<?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>
追加のテーブルは必要ないので、リソースモデルは必要ないと思います。私の期待は、sales_flat_order_payment
ゲートウェイ関連/提供されたデータ(txn idなど)を格納するために、関連するテーブルを使用するだけであるということです。
同様に、デフォルトのCCブロックを拡張して、標準の支払いフォームを取得しています。
私は何が欠けていますか?それは私が見落としている小さくてシンプルなものでなければなりません。
前もって感謝します!
更新: これまで、capture()メソッドを手動で呼び出すcheckout_type_onepage_save_orderイベントにオブザーバーを使用する回避策を実装しましたが、これは正しい方法ではないと確信しています。
capture()
ゲートウェイがauthorize_captureに設定されている場合、Magentoが最初の注文の保存を自動的に呼び出す必要があると考えるのは間違いではありません。