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-您的付款层将快速,可预测且可抵抗银行和提供商的故障。