1.9 KiB
1.9 KiB
PAYMENT_DOMAIN_DESIGN
最后更新: 2026-06-14
1. 设计目标
把 T12 中的支付、退款、回调、对账从“页面动作”提升为一等领域对象,避免把订单状态与支付状态混为一体。
2. 领域对象
payment_order
payment_idorder_idprovideramount_centsstatus(pending/paying/paid/failed/refund_pending/refunded)checkout_tokenprovider_trade_nocreated_atupdated_at
payment_attempt
- 用于保留多次发起支付/重试尝试
- MVP 可先不单独建表,但设计必须保留扩展位
refund
refund_idpayment_idorder_idamount_centsstatusreasoncreated_at
reconciliation_job
- 用于后续对账任务
- MVP 允许只停留在设计层
3. 状态机拆分
订单状态
pendingpaidservingdeliveredcompletedrefunded
支付状态
pendingpayingpaidfailedrefund_pendingrefunded
原则:
- 订单状态不直接替代支付状态
- portal 展示阶段由订单 + 支付 + 交付物共同推导
4. 回调处理要求
回调验收至少要覆盖:
- provider 签名校验
payment_id / order_id对应关系校验amount_cents金额校验- 幂等处理(重复通知不能重复记账)
- provider trade no 持久化
- 异常记录与人工补偿入口
5. 当前实现状态
已存在:
data/payments/models.pydata/payments/dao.pydata/payments/service.pymock/alipay_simprovider- webhook 归一化处理
未完成:
- 真实
alipayprovider - refund 一等对象
- reconciliation job
- provider 级签名/证书联调
6. 决策
- MVP 只允许一个真实 provider 先闭环
alipay_sim只用于上线前模拟,不可冒充真实支付验收- 真实支付上线前,必须先完成 provider doctor 与环境前置校验