API支付在提供商中的運作方式
付款API是您的應用程序與提供商之間的合同,該合同將「創建付款」,「確認3DS」,「退款」,「支付客戶」和「獲得狀態」轉換為可靠的,可重復的呼叫。引擎蓋下有數十條規則:標記化,idempotency,webhooks,antifrod,隊列,SLA和審計。下面是大多數提供商如何排列的實用地圖。
基本模型: 幾乎總是存在哪些實體
Payment/Charge-嘗試註銷(authorize+捕獲或立即購買)。
付款方法是卡(PAN/token),銀行帳戶/alias,錢包,本地方法。
客戶是客戶/付款人的實體(有時是可選的)。
Payout/Transfer是客戶/商人的出站付款。
Refund/Reversal-返回原始付款(閉環)。
Webhook事件-異步狀態通知。
Dispute/Chargeback是有關付款網絡(用於地圖)的爭議。
Order/Invoice是圍繞付款的業務上下文。
認證和安全性
API 密碼/OAuth 2。0/mTLS-用於服務器對服務器。
客戶令牌-frontend的一次性令牌(以免泄露秘密)。
卡令牌-PAN留給提供商;只存儲令牌。
PCI DSS-如果您看到PAN,則在PCI區域中;最好避免和使用主機字段/SDK。
HMAC簽名webhooks-驗證事件來自提供商。
兩區體系結構-公共戰線(JS/SDK)和私人後端(鑰匙,風險邏輯)。
Idempotency、隊列和一致性
標題中的Idempotency-Key:請求重播(在taymouth中)不會創建重復。
Outbox/Saga給你:「發送付款→ 寫入leder →等待webhook」是一致的。
帶有backoff的retrai僅用於時間錯誤。Retryable/non-retryable矩陣是必需的。
示範終點(圖和流通)
1)卡(Visa/Mastercard等)
POST/payments-創建收費表('amount'、'currency'、'payment_method_token'、'capture'=false/true)。
POST /payments/{id}/confirm — шаг 3-D Secure 2 (challenge/redirect result).
POST/payments/{id}/捕獲-授權後捕獲(部分/完整)。
POST/payments/{id}/refund-退款(部分,以原始金額為單位)。
GET /payments/{id} — статус (authorized, captured, failed, requires_action).
3-D Secure/SCA:提供程序將返回「requires_action」+「client_secret」/URL進行挑戰。客戶確認後,前線將返回結果到您的後臺→您正在抽動「/confirm」。
2) A2A / Open Banking (Pay by Bank)
POST/payments →客戶銀行的「redirect_url」響應。
客戶從銀行→ webhook'payment授權。succeeded/failed`.
GET/payments/{id}-最終狀態(通常僅異步)。
3)本地方法(PIX、PayID、FPX、iDEAL等)
POST/payments →獲得「qr_code」/「deeplink」/「copy_code」。
向用戶顯示,等待webhook報名。
代碼的Taymauts和TTL是合同的一部分。
4)付款(付款)
POST /payouts (`amount`, `currency`, `destination_token` или `card_token`/`bank_alias`).- GET /payouts/{id} — статусы (`queued`, `sent`, `paid`, `failed`).
Webhuki'payout。paid/failed'是真相的來源。
封閉環路:最好在替代品之前支付給源(逆向)。
Webhuki: 「真理之源」
事件:'支付。pending/authorized/captured/failed`, `payment.requires_action`, `refund.succeeded`, `payout.paid`, `dispute.created'等。
交付:HMAC簽名的轉發通常是「至少一次」,→保持處理人員的平均水平。
最佳實踐:處理webhook →更新leder →響應2xx。之後的任何業務邏輯都是異步的。
錯誤和狀態處理
HTTP代碼:'2xx'成功;'4xx'客戶端錯誤(驗證,frod/Bank故障,錯誤令牌);'5xx'-提供程序。
Причины отказов: `insufficient_funds`, `do_not_honor`, `stolen_card`, `limit_exceeded`, `risk_decline`, `bank_unavailable`.
重播窗口:對於3 DS-不能無限期地重新編輯;對於A2A,TTL重新分配/代碼有效;對於payouts-backoff。
防凍和風險
設備指紋和行為數據-通過提供商的JS/SDK或您自己的層。
列表:BIN風險,黑色/白色方法列表/ASN/國家/地區。
可調節網關:新工具限制,「cool-off」、velocity、RG/AML閾值檢查。
策略:基於評分+規則的「pass/step-up/hold/block」。
軌道上的功能
地圖:授權vs清算(可能的金額轉移),3DS2,原始操作的退款,爭議/回收。
A2A/Open Banking: redirect/consent-flow,高安息日,低成本;一切都是異步的,嚴重依賴銀行。
本地快速:QR/alias,即時網絡手冊,TTL和嚴格的焊接。
OCT/Push-to-Card(卡支付):需要卡令牌,發行商支持Fast Funds,沒有3 DS。
測試和兼容性
API版本:「/v1」,標題中的「數據版本」或ficheflagi。
Backwards兼容的更改:僅無損字段。
刪除: 舊版本的輸出時間表,遷移海德,復制的webhooks遷移期間.
可觀察性和SLA
度量標準:p95授權時間/付款時間、BIN/bank/方法的 approve率、回收份額、webhook-lag。
Logi: 「request_id」、「idempotency_key」、「payment_id」上的相關性。
Alerts:特定銀行/國家的拒絕激增,taymout的興起,事件的重復。
掃蕩與財務
Ledger:雙重條目、不可變期刊、「授權/captured/refunded」狀態。
三向秋千:您的ledger ↔ webhooks ↔提供商/銀行的報告。
參照:存儲「provider_reference」、「network_reference」、「payout_reference」-這將保存劄幌。
Sandbox、認證和prod
Sandbox:測試令牌/卡/罐子,3 DS模擬/重做,webhook狀態的「按鈕」。
測試案例:成功/失敗,3 DS挑戰,提供商計時器,webhook復制,部分捕獲/收回,取消重新分配,付款失敗。
Go-live:prod密鑰、webhook域、IP allowlist、啟用防凍、設置限值和變量。
迷你示例(示例)
創建支付卡(地圖)
POST /v1/payments
{
"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": "payment.captured", "data": {"id":"pay_abc","amount":9232,"currency":"EUR","metadata":{"order_id":"ORD-1001"}}
}
付款(付款)
POST /v1/payouts
{
"amount": 5000, "currency": "EUR", "destination_token": "dest_tok_456", "metadata": {"user_id":"u_77"}
}
實施支票清單
1.密鑰體系結構: 服務器機密是分開的,客戶機是一次性的.
2.Idempotency:在每個write呼叫中+等效的webhook處理程序。
3.Webhuki:HMAC簽名,轉發,任務隊列,滯後監測。
4.3DS/SCA和重定向:處理取消/定時,重復嘗試friendli-UX。
5.Antifrod/限值:velocity,新道具,黑名單,RG/AML閾值。
6.Ledger and Swirk:雙重記錄、三向對賬、異常變異。
7.編排:備用供應商,BIN/國家/總和路由規則。
8.監測:dashbords approve rate/p95/retrai,alerta by bank/方法。
9.法律/PCI:標記化,退貨政策,封閉式付款循環。
10.降級計劃:kill-switch頻道、隊列、關鍵操作的手動模式。
經常出錯
將PAN存儲在其側面,而無需使用PCI和令牌化。
缺少idempotency → taymauts的付款/付款。
同步響應上的邏輯不考慮webhook。
每個市場有一個提供商,沒有倒退/級聯。
沒有3 DS取消處理/重新引導→丟失的籃子。
微弱的卷曲→「掛起」和「丟失」的交易。
沒有清晰的SLA和Alert →客戶而不是你看到這個問題。
Mini-FAQ
更可靠的是:同步狀態或webhook?
Webhook是真理的來源。同步響應-只是「接受/需要操作」。
可以沒有3 DS?
取決於調節/風險。在EC/UK-SCA中是強制性的;對於高風險來說,更好。
如何提高approve率?
通過BIN/bank/方法進行編排,本地導軌,智能後繼器,正確描述符,低FPR防凍劑。
為什麼payout「不是即時」?
取決於軌道(OST/A2A/本地),收件人的銀行和限制。讓我們誠實的SLA窗口和狀態流。
API付款不僅僅是「創建付款」。這些學科是:安全身份驗證→令牌化→ idempotency →異步webhooks → ledger和swirk → antifrod/AML →編排和監視。按照此模式構建流程,保持備用通道和透明的UX-您的付款層將快速,可預測且可抵抗銀行和提供商的故障。