💰 如何避免重复扣款

支付系统最严重的问题之一:重复扣款

\g<1>

支付系统如何保证恰好执行一次?拆成两个问题 👇

📌 至少一次 = 重试
网络错误或超时时重试,保证支付最终成功

📌 至多一次 = 幂等性检查

  • 客户端生成唯一的幂等键(推荐UUID)
  • 放在HTTP Header中:idempotency-key: key_value
  • 服务端收到相同幂等键的请求时,返回之前的结果而不重复执行

📌 恰好一次 = 重试 + 幂等性
数学上:exactly-once = at-least-once + at-most-once

💡 Stripe和PayPal都推荐使用UUID作为幂等键。这是支付系统设计的基本功。


#支付系统 #幂等性 #系统设计 #后端开发 #程序员 #技术干货