---
name: payment-rules
when: '支付, 支付流程, 支付宝, 微信支付, 退款, 交易, 结算, 订单支付, 充值, 提现'
scope:
  - backend
products:
  - '*'
id: ka-domain_knowledge-payment-rules
asset_kind: domain_knowledge
lifecycle_status: active
authority: supporting
routes:
  - '*'
primary_triggers:
  - 支付
  - 支付流程
  - 支付宝
  - 微信支付
  - 退款
  - 交易
  - 结算
  - 订单支付
  - 充值
  - 提现
priority: P2
specificity: 3
version: 1.0.0
last_reviewed: '2026-05-22'
consumes: []
emits: []
secondary_triggers: []
negative_triggers: []
type: domain
status: active
---

## 业务规则
- 支付操作必须幂等：同一笔订单不可重复扣款，支付回调必须做幂等校验（支付流水号唯一约束）
- 支付状态必须明确：待支付→支付中→支付成功→支付失败→已关闭，不可跳跃
- 金额计算禁止使用浮点数，必须使用 BigDecimal 或整数分（1 元 = 100 分）
- 退款金额不得超过实付金额，部分退款累计不得超过实付金额
- 支付超时未支付订单必须自动关闭（建议 30 分钟），释放库存等占用资源
- 对账机制：每日定时与第三方支付平台对账，差异记录必须有告警和人工处理流程
- 支付金额必须校验精度（使用 BigDecimal，禁止 float/double），防止精度丢失
- 支付状态必须通过主动查询支付网关确认，不能只依赖回调通知
- 退款必须支持部分退款和全额退款，退款总额不能超过支付总额

## 约束条件
- 支付密钥必须加密存储，禁止明文配置
- 支付回调接口必须验证签名，禁止无签名校验直接处理
- 支付流水表独立于业务表，禁止与订单表耦合
- 支付敏感操作必须有审计日志（操作人、时间、金额、状态变更）
- 支付操作必须记录完整流水（请求、响应、回调），便于对账和纠纷处理
- 支付超时时间必须与支付网关一致（如 30 分钟），超时自动关闭订单
- 同一笔支付必须防止重复扣款（幂等性），使用支付流水号去重

## 例外情况
- 测试环境使用沙箱支付，禁止真实交易
- 充值卡/优惠券抵扣不走第三方支付，但走相同的金额计算和审计规则
- 银行卡支付按 T+1 到账处理，必须通过异步回调或对账任务确认最终状态

## 关联模式
- [[concurrency-control]] 并发扣款控制
- [[transaction-pattern]] 支付事务保障
- crud-operation
- concurrency
