70

Magento の新しい支払いモジュールの実装に取り​​組んでおり、このロジックの背後にあるコア コンセプトを理解したいと考えています。Mage_Payment_Model_Method_Abstract またはその子クラスのいずれかから拡張する必要があることはわかっていますが、問題は、モデルでキャプチャ メソッドと承認メソッドをいつ、どのように使用するかです。たとえば、プロセス全体を次のように分割するとします。

  1. ユーザーがショッピングカートに来て、ゲートウェイである支払い方法を選択します。
  2. システムはリクエストをインターセプトし、送信されたすべてのデータを収集して、ユーザーをゲートウェイ URL に送信します。
  3. ユーザーは、ゲートウェイ サイトで注文 (またはキャンセル) を行い、そこから情報がストアに送信されます。
  4. 私のストアは、受信したデータを使用して注文にさらにいくつかの変更を加え、ステータスが完了またはキャンセルされた状態で注文を保存します。

これらの手順のどこで認証およびキャプチャ メソッドを使用する必要がありますか? 承認と取得の意味を誰かが説明してくれたら幸いです。

4

1 に答える 1

150

ここでは、私が常に概念を理解している方法と、Magento で支払いモジュールを実装するために知っておく必要があることを説明します。あなたが望んでいるほど単純ではありませんが、特定の「これはどこで起こりますか」に対する答えは以下に太字で示されています。

インターネット以前の従来型のクレジット カード取引は、2 段階のプロセスでした。

販売時に、商人が購入のために消費者のクレジット カードを受け取ると、クレジット カードの中央オフィスに電話をかけ、「このカードはこのネットワークで認証されているか、この特定の消費者の利用可能なクレジット枠は、この購入を許可するのに十分な大きさですか?」

購入が (拒否ではなく) 受け入れられた場合、請求は承認されたと言われます。消費者が製品を受け取ると、販売時点管理システム/キャッシュ レジスターは、取引が承認されたことを通知します。その後、一日の終わり、または週末、その他の所定の定期的なスケジュールで、または所有者が飲酒をやめることを決めたときに、商人はすべての承認された領収書を調べて、中央オフィスに別の要求を送信します。承認されたトランザクションから資金を取得します。資金を獲得すると、商人の口座にお金が入金されます。

これは、ほとんどのゲートウェイで現在も使用されているモデルであり、Magento Inc. が支払いモジュールの実装に選択したドメイン モデルです。

Magento のようなシステムで消費者が最終チェックアウト手順に到達すると、Magento はゲートウェイの API に認証要求を発行します。トランザクションが成功すると、注文がシステムに受け入れられ、承認リクエストからの一意の ID が保存されます。次に、消費者の商品が出荷されると、店主は Magento 管理者を使用して請求書を作成します。この請求書の作成により、キャプチャ リクエストが発行されます (承認リクエストから返されたストア ID を使用)。 これは、これらのメソッド呼び出しが Magento で発行される場所です。

ただし、すべての支払いゲートウェイがこれらの概念を少し異なる方法で解釈し、すべてのマーチャントが「発送するまでキャプチャしない」責任を異なる方法で解釈するため、注意が必要です. 上記のシナリオに加えて、支払いモジュールにはPayment Actionと呼ばれるシステム構成値があります。これは、上記のフローを実装するAuthorize Onlyに設定できます。また、オーソリとキャプチャーに設定することもできます。これは、注文時に支払いのオーソリとキャプチャーの両方を行います。それはさらに得ますメソッドは Authorize and Capture と呼ばれますが、現在のバージョンの Magento はこのモードに設定されている場合にのみキャプチャ リクエストを発行し (少なくとも Authorize.net の場合)、Authorize.net は内部的にキャプチャ リクエストを承認された状態のままにするため、混乱を招きます。一日のほとんどの状態をキャプチャしていません。Magento が注文、支払い、および請求書を処理する方法は、バージョンごとに大きく変わるコードベースの 1 つの領域です。

したがって、Magento 支払いモジュール システムの背後にあるアイデアは、支払いゲートウェイ ロジックをプログラミングしているクラスター F からユーザーを保護することです。メソッドで、支払いゲートウェイの承認 API への呼び出しを実装しますauthorize(または、この時点で必要なチェックとロジックを実行します)。このメソッドには、支払いオブジェクトと金額が渡されます。ロジックをリクエスト/実行し、何らかの理由で無効であると判断した場合は、例外をスローします

Mage::throwException('...');

これにより、Magento に承認が失敗したことが通知され、それに応じて動作します (エラー メッセージを表示するなど)。それ以外の場合は、Payment オブジェクトにデータ メンバーを設定し、

return $this;

データ メンバーは、後で支払いを取得するときに必要になるものです。これによりcapture、Payment モジュールのメソッドが表示されます。このメソッドには、支払いオブジェクトと金額も送信されます。このメソッドでは、キャプチャ リクエストを発行します。支払いオブジェクトにはcc_trans_idデータメンバーがあります

$payment->getCcTransId()

これにより、ゲートウェイに対してキャプチャを発行できます。これは、 に保存する責任があるデータ メンバーの 1 つですauthorize。繰り返しになりますが、キャプチャが失敗したとコードが判断した場合は、例外をスローします。そうでなければ、あなたreturn $this

authorize.net 支払いモジュールには、これがどのように行われるかの良い例があります。

app/code/core/Mage/Paygate/Model/Authorizenet.php

たとえば、captureメソッド のこの部分を考えてみましょう

public function capture(Varien_Object $payment, $amount)
{
    if ($payment->getCcTransId()) {
        $payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE);
    } else {
        $payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE);
    }   

    $payment->setAmount($amount);
    $request= $this->_buildRequest($payment);
    $result = $this->_postRequest($request);
    //...

ここで、capture メソッドは、支払いにcc_trans_id. 結果に応じて、次のanet_trans_typeいずれかに設定されます。

self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE
self::REQUEST_TYPE_AUTH_CAPTURE

この値は、API 要求オブジェクトによって使用され、いずれかの API 呼び出しを送信します。

  1. 事前承認済みトランザクションのキャプチャ
  2. 即時キャプチャ

お役に立てば幸いです。幸運を祈ります。

于 2011-03-20T19:22:50.327 に答える