← 中文资源

简体中文版本

支付失败激增响应工作流

把支付失败激增当作在流血的收入:区分网关还是内部原因,安全排队重试,恢复后对账。

阅读英文原文

目标

支付失败激增是每分钟都在流血的收入,而它的恢复标准比可用性更严:每笔交易必须恰好落地一次。隔离故障层、幂等排队、穷尽对账是三条纪律——缺任何一条,要么钱没回来,要么回来的是双倍扣款与拒付。

步骤要点

  1. 立刻量化流血:按网关、币种、卡型对照基线算失败率,折算每分钟收入影响,把事件转成财务严重度。
  2. 隔离网关与内部:用相同请求形态测支付商沙箱或备用网关,外部通而主网关挂即坐实网关侧故障。
  3. 先防重复扣款:确认所有支付请求都带幂等键,排队重试按幂等键去重,并做双提交验证。
  4. 排队加告知:失败扣款进持久队列按健康网关定时重试,明确告知用户支付会自动重试而非静默失败。
  5. 恢复后穷尽对账:提供商报告与内部账逐笔核对,排队交易恰好解决一次,无孤儿成功也无孤儿失败。

排错提示

重试引发了双倍扣款说明幂等键缺失或键设计错位,键用订单加尝试序号并先在演练中双提交验证;对不上账就结案是对账缺失,关单条件必须是零错配报告;只看可用性曲线说恢复了还不够,钱对不对要靠全窗口对账说话。

适用边界

快速失败转移在资金路径上有引入新型故障的风险,部分劣化时排队优先于切换;对账精度受提供商报告粒度限制,部分渠道只能按日对账。

代码示例

INC-2988  payments failing  14:20Z
bleed:      3.1%/min failure x $4,200/min volume
            = ~$130/min revenue at risk
isolation:  primary gateway: timeouts (97% of fails)
            sandbox same shape: OK   -> gateway-side
idempotency: key = order_id + attempt  (verified)
queue:      failed charges -> durable, retry 5m/30m/2h
            user msg: "payment will retry automatically"
recovery:   16:05Z primary recovers
reconcile:  17:30Z provider report vs internal ledger
            1,204 queued charges -> 1,204 resolved
            duplicates: 0   orphans: 0   mismatches: 0