目录
1. 支付整体流程
1.1 标准支付链路(必背)
下单 → 生成订单 → 校验库存/价格 → 创建支付单 → 调起第三方支付 → 用户付款 → 支付回调 → 验签 → 修改订单状态 → 发货/报告生成/业务后续
1.2 核心角色
- 商户系统(我方)
- 支付渠道(微信/支付宝/通联/银联/工行)
- 用户
- 财务对账系统
1.3 关键目标
- 不丢单
- 不重复支付
- 不篡改金额
- 资金安全
- 状态一致
2. 幂等性设计
2.1 什么是幂等
同一请求执行多次,结果一致,不会重复支付、重复发货、重复生成报告。
2.2 为什么必须做
- 网络重试
- 回调重入
- 页面刷新
- 接口重放
2.3 实现方案
- 订单号唯一
- 支付流水号唯一
- 状态机前置判断
- 分布式锁
- 数据库唯一索引
2.4 面试必答
支付接口必须保证幂等,任何情况下都不能重复扣款、重复发货。
3. 支付安全机制
3.1 签名验签
- 所有请求/回调必须做签名验证
- 防止篡改金额、订单号、商品信息
- 秘钥加密存储,不上传、不打印、不记录日志
3.2 参数校验
- 订单号、金额、商品、用户必须强校验
- 前端传金额无效,后端必须以数据库为准
3.3 防篡改
- 金额不可信
- 用户不可信
- 第三方参数不可全信
3.4 传输安全
- 必须 HTTPS
- 敏感字段加密
- 不明文传输密钥
4. 回调处理
4.1 回调是支付的核心
支付结果以回调为准,不是前端返回。
4.2 回调处理步骤
- 验签
- 校验订单号、金额
- 判断订单状态
- 执行业务(发货/开通服务/生成报告)
- 返回成功(success)
- 记录日志
4.3 异常处理
- 回调失败自动重试
- 超时未回调主动查询
- 漏单兜底机制
5. 订单状态机
5.1 标准状态
- 待支付
- 支付中
- 已支付
- 已取消
- 已退款
- 已完成
5.2 状态流转严格控制
- 只能单向流转
- 已支付不能重复支付
- 取消后不能再支付
- 退款必须走退款接口
6. 常见支付对接场景
6.1 微信支付
JSAPI、小程序支付、H5、Native
6.2 支付宝
电脑网站、手机网站、小程序
6.3 通联支付
企业支付、代付、分账
6.4 工行支付
对公、大额、医疗行业常用
6.5 你项目可背诵
我对接过微信支付、支付宝、通联、工行支付,封装统一支付SDK,支持统一下单、统一回调、统一对账。
7. 面试高频扩展知识点
7.1 掉单如何处理
- 主动查询接口
- 定时任务兜底
- 对账系统
7.2 退款流程
- 原路退回
- 必须验权
- 记录退款流水
7.3 对账
- 每日自动对账
- 订单金额 vs 渠道流水
- 差异告警、人工处理
7.4 面试必背总结
支付系统核心:安全、幂等、验签、状态一致、不丢单、可对账。
评论区