Skip to content

支付系统

本章节介绍支付系统的核心设计,包括幂等性、对账与异常处理。

核心设计原则

  • 幂等性:同一笔支付请求多次提交结果一致
  • 一致性:资金变动与订单状态强一致
  • 安全性:防篡改、防重放攻击
  • 可追溯:完整的支付流水记录

支付流程

创建订单 → 发起支付 → 调用第三方支付 → 异步回调 → 更新订单状态 → 对账

幂等性实现

java
// 基于唯一支付单号实现幂等
public PayResult pay(PayRequest request) {
    String payNo = request.getPayNo();
    // 查询是否已处理
    PayOrder existing = payOrderDao.findByPayNo(payNo);
    if (existing != null) {
        return buildResult(existing);
    }
    // 分布式锁防并发
    try (Lock lock = redisLock.lock("pay:" + payNo)) {
        return doPayment(request);
    }
}

对账设计

对账类型说明
日切对账每日凌晨与第三方平台核对流水
实时对账支付回调时立即校验金额与状态
差错处理长款/短款自动告警,人工介入

常见异常处理

  • 回调超时:主动轮询第三方查单接口
  • 重复回调:幂等处理,返回成功不重复处理
  • 部分退款:记录退款流水,支持多次部分退款

基于 VitePress 构建