プロバイダのAPI支払いの仕組み
支払いAPIは、アプリケーションとプロバイダとの間の契約で、「支払いを作成」「、確認」「3DS,返金」「、クライアントへの支払い」「、ステータスの取得」を信頼性の高い繰り返し可能なコールに変換します。フードの下には、トークン化、idempotency、 webhook、不正防止、キュー、SLA、監査など、何十ものルールがあります。以下は、これがほとんどのプロバイダーにとってどのように機能するかの実用的なマップです。
基本モデル: エンティティがほとんど常に何であるか
Payment/Charge-書き込みを試みます(承認+キャプチャまたは即時購入)。
支払方法-カード(PAN/トークン)、銀行口座/エイリアス、ウォレット、ローカルメソッド。
顧客-顧客/支払者エンティティ(場合によってはオプション)。
Payout/Transfer-クライアント/マーチャントへの送金。
払い戻し/逆転-元の支払い(クローズループ)に戻ります。
Webhook Event-非同期ステータス通知。
紛争/チャージバック-決済ネットワーク上の紛争(カードの場合)。
注文/請求書-支払いに関するビジネスコンテキスト。
認証とセキュリティ
APIキー/OAuth 2。0/mTLS-サーバー間のサーバー。
クライアントトークンは、フロントエンドの使い捨てトークンです(秘密を照らさないように)。
カードのトークン化-PANはプロバイダに移動します。トークンだけを保存します。
PCI DSS-PANが表示された場合、PCIゾーンにあります。ホストされているフィールド/SDKを避けて使用することをお勧めします。
HMAC署名webhooks-イベントがプロバイダから送信されたことを確認します。
デュアルゾーンアーキテクチャ-パブリックフロント(JS/SDK)とプライベートバックエンド(キー、リスクロジック)。
Idempotency、キュー、一貫性
ヘッダーのIdempotency-Key:リクエストを繰り返し(タイムアウト時)、重複を作成しません。
Outbox/Saga with you:「支払いを送信する→元帳に書く→webhookを待つ」ことに同意しました。
バックオフ付きのレトライ-一時的なエラーのみ。retryable/non-retryable行列が必要です。
典型的なエンドポイント(スキームとフロー)
1)カード(Visa/Mastercardなど)
POST/payments-支払い('amount'、 'currency'、 'payment_method_token'、 'capture'=false/true)を作成します。
POST/payments/{ id }/confirm-3-D Secure 2(チャレンジ/リダイレクト結果)。
POST/payments/{ id }/capture-承認後のキャプチャ(部分/完全)。
POST/payments/{ id }/refund-返品(部品、元の金額まで)。
GET/payments/{ id}-Path(認可、キャプチャ、失敗、requires_action)。
3-D Secure/SCA:プロバイダはチャレンジのために'requires_action'+'client_secret'/URLを返します。クライアントによる確認後、フロントはバックエンドに結果を返します→"/confirm'をプルします。
2) A2A/オープンバンキング(銀行払い)
POST/payments→'redirect_url'から顧客の銀行への応答。
クライアントは銀行→webhook 'paymentによって承認されます。succeeded/failed'。
GET/payments/{ id}-最終ステータス(しばしば非同期のみ)。
3)ローカルメソッド(PIX、 PayID、 FPX、 iDEALなど)
POST/payments→'qr_code'/'deeplink'/'copy_code'を取得します。
ユーザーを表示し、登録についてwebhookを待ちます。
コードタイムアウトとTTLは契約の一部です。
4)支払い方法
POST/ペイアウト ('amount'、 'currency'、 'destination_token'、 'destination_token'、 'card_token'/'bank_alias')。
GET/payouts/{ id}-'queued'、 'sent'、 'paid'、 'failed')。
Webhooksのペイアウト。「paid/failed」は真実の源です。
クローズドループ:代替前にソース(逆転)に支払うことをお勧めします。
Webhooks: 「真実の源」
イベント:'支払い。pending/authorized/captured/failed'、'payment。requires_action'、払い戻し。'、'ペイアウトに成功しました。支払われた、論争。作成された'など。
配信:HMACによって署名されたリトレイでは、多くの場合「少なくとも一度」→ハンドラをidempotent保ちます。
ベストプラクティス:webhook→update the ledger→respond 2xxを処理します。後のビジネスロジックは非同期です。
エラーとステータス処理
HTTPコード:'2xx'成功;'4xx'クライアントエラー(検証、詐欺/銀行障害、誤ったトークン);'5xx'-プロバイダ。
「unsufficient_funds」、 「do_not_honor」、 「stolen_card」、 「limit_exceeded」、 「risk_decline」、 「bank_unavailable」。
やり直しウィンドウ:3DSの場合-あなたは無限に引き込むことはできません。A2Aの場合-リダイレクト/コードTTLが有効です。支払いのために-バックオフ。
アンチフラウドとリスク
デバイス指紋と行動データ-プロバイダのJS/SDKまたは独自のレイヤーを介して。
リスト:BINリスク、メソッド/ASN/国の黒/白リスト。
調節可能なゲート:新しい用具の限界、涼しい、速度、RG/AMLのしきい値の点検。
ポリシー:スコア+ルールに基づいて'pass/step-up/hold/block'。
レール上の特徴
カード:承認とクリア(量をシフトすることができます)、3DS2、元のトランザクションのリターン、紛争/チャージバック。
A2A/Open銀行:リダイレクト/同意フロー、高いapruv、低コスト。すべてが非同期で銀行に依存しています。
ローカル高速:QR/エイリアス、 インスタントWebhook、 TTLおよび厳密なコンパイル。
OCT/Push-to-Card(カード決済):3DSなしでカードトークン、発行者からのファストファンドサポートが必要です。
バージョン管理と互換性
APIバージョン:'/v1'、ヘッダーまたはphicheflagsの「data version」。
下位互換性のある変更:非破壊的なフィールドのみ。
廃止:古いバージョンの撤退のスケジュール、移行ガイド、移行中の重複したWebhook。
観測可能性とSLA
メトリクス:p95承認/支払い時間、BIN/銀行/方法によるレートの承認、レトレイのシェア、webhooks-lag。
ログ:'request_id'、 'idempotency_key'、 'payment_id'による相関。
アラート:特定の銀行/国の拒否の急増、タイムアウトの増加、重複イベント。
スイープとファイナンス
元帳:二重エントリ、変更できないログ、'authorized/captured/refunded'ステータス。
三面コンパイル:レジャー↔ webhook ↔プロバイダ/銀行レポート。
参照:'provider_reference'、 'network_reference'、 'payout_reference'を保持すると、サポートが保存されます。
サンドボックス、認証、生産
サンドボックス:トークン/カード/バンク、3DS/redirectsのシミュレーション、Webhookステータスの「ボタン」。
テストケース:成功/失敗、3DSチャレンジ、プロバイダのタイムアウト、webhookの重複、部分的なキャプチャ/払い戻し、リダイレクトのキャンセル、支払い失敗。
Go-live:プロッドキー、Webhookドメイン、IP-allowlist、不正防止を有効にし、制限とアラートを設定します。
ミニサンプル(回路図)
支払い(カード)を作成する)
POST/v1/支払い
{
"amount': 9232、" currency":"EUR"、"payment_method_token": "pm_tok_123," capture":true、" metadata":{"order_id":"ORD-1001"}
}
→200 {「id」: 「pay_abc,」 「status」: 「requires_action,」 next_action": {「type」: 「redirect」、 「URL」:「……」}}
登録に成功したWebhook
POST/Webhooks
{
"type":"支払い。キャプチャ、""データ":{"id":"pay_abc"、"量":9232、"通貨":"EUR"、"メタデータ":{"order_id":" ORD-1001"}}
}
ペイアウト(Payout)
POST/v1/支払い
{
「amount': 5000、」 currency「:」EUR「、」destination_token": 「dest_tok_456,」 「metadata」: {「user_id」: 「u_77」}
}
実装チェックリスト
1.キーアーキテクチャ:サーバーの秘密、クライアントの秘密-1回限り。
2.Idempotency:各書き込みコール+idempotent webhookハンドラ。
3.Webhooks: HMAC署名、レトライ、タスクキュー、ラグ監視。
4.3DS/SCAとリダイレクト:キャンセル/タイムアウトの処理、friend-UXの再試行。
5.Antifraud/limits:速度、新しい詳細、ブラックリスト、RG/AMLしきい値。
6.元帳と和解:二重エントリ、三側和解、異常アラート。
7.オーケストレーション:スペアプロバイダ、BIN/国/金額によるルーティングルール。
8.監視:ダッシュボードは、レート/p95/リトレイ、銀行/メソッドによるアラートを承認します。
9.Legal/PCI:トークン化、返品ポリシー、クローズドペイアウトループ。
10.劣化計画:重要な操作のためのキルスイッチチャネル、キュー、手動モード。
頻繁なミス
PCIとトークン化なしでPANをその側に格納します。
タイムアウトを伴うidempotency→duplicate payoutsなし。
Webhookを考慮せずに同期応答のロジック。
市場への1つのプロバイダー、フォールバック/カスケードはありません。
3DS元に戻す/リダイレクト処理がない→ごみ箱を紛失しました。
弱いバンドル→「凍結」と「失われた」トランザクション。
明確なSLAとアラートの欠如→クライアントが見る問題、あなたではありません。
Mini-FAQ
どちらがより信頼性が高いですか:同期ステータスまたはWebhook?
Webhookは真実の源です。同期応答-「action accepted/needed」のみ。
3DSなしでできますか?
規制/リスクに依存します。EC/UKではSCAは必須です。ハイリスクのために、ステップアップはよりよいです。
承認率を上げるには?
BIN/bank/methodオーケストレーション、ローカルレール、スマートレトラ、正しい記述子、低いFPR不正防止。
なぜ「即時」ではないのですか?
レール(OST/A2A/ローカル)、受取人の銀行および限界によって決まります。正直なSLAウィンドウとステータスストリームを持ってみましょう。
API支払いは「支払いを作成する」だけではありません。"この規律:セキュア認証→トークン化→idempotency→非同期webhooks→ledger and folding→anti-fraud/AML→orchestration and monitoring。このスキームに従ってプロセスを構築し、スペアチャネルと透明なUXを維持します。支払いレイヤーは迅速で予測可能で、銀行やプロバイダーの失敗に耐えます。