Files
break 9959168e22
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 5h7m21s
完成支付失败商户轮换禁用
2026-09-22 15:58:03 +08:00

3.2 KiB
Raw Blame History

1. 数据事实与迁移

  • 1.1 新增支付路由尝试事实模型与数据库迁移,保存支付单、商户、商户池、统计世代、金额、创建时间和结果分类,并以支付单唯一约束保证一次计入
  • 1.2 为路由尝试事实建立按商户池、统计世代、创建时间和商户筛选的索引,保证金额/笔数选路查询可用
  • 1.3 增加自动禁用失败留痕所需的安全字段、关联索引和审计/调查投影,禁止保存支付凭证与敏感响应

2. 商户池路由统计

  • 2.1 将金额/笔数选路统计从成功事实切换为当前统计世代的路由尝试事实,并保持每轮、自然日、自然月和单成员池规则
  • 2.2 在三类商户池新支付创建事务中,于支付单和冻结路由提交边界写入一次路由尝试事实
  • 2.3 处理统计世代切换、配置变更、并发创建和唯一冲突,确保迟到支付成功不重复增加金额/笔数
  • 2.4 保留历史支付成功回调与现有成功事实兼容读取,禁止历史支付或旧 payment_config_id 补造新路由尝试事实

3. 支付失败分类与商户禁用

  • 3.1 统一各支付渠道预下单结果分类,区分明确失败、结果未知、未发送和成功,并为每类定义是否允许自动禁用
  • 3.2 在 C 端套餐购买、C 端资产钱包充值和代理在线预存款充值的明确失败路径中,条件禁用被冻结商户并写入关联失败留痕
  • 3.3 对超时、连接中断、响应无法确认和上下文取消保持结果未知处理,不自动禁用、不创建第二个渠道支付
  • 3.4 保证并发失败处理幂等,已停用商户不被重新启用,已创建支付单继续保留原商户归属
  • 3.5 核对仍可达的旧支付入口,确保新商户池支付统一遵守失败分类,历史支付入口继续按原兼容路径处理

4. 审计、可观测性与恢复

  • 4.1 扩展支付和商户审计事实,记录安全失败原因、支付单关联、商户状态变化和结果分类,不记录凭证或原始敏感响应
  • 4.2 更新商户池管理查询或调查投影,使维护者能够识别自动禁用原因、最近失败时间和关联支付单
  • 4.3 保持结果未知支付的既有查单/恢复任务可达,并验证恢复成功后只推进支付事实,不重复统计路由尝试

5. 验证与规格同步

  • 5.1 为明确失败自动禁用、未知结果保留、金额失败计入、笔数失败计入、并发幂等和历史支付服务编写符合项目约束的验证场景(项目自动化测试按 AGENTS.md 明确 N/A;验证由可执行构建、OpenSpec 校验、迁移 SQL 约束/索引审查和指定入口 smoke 组成)
  • 5.2 运行迁移、构建、OpenSpec 校验和指定支付入口 smoke 验证,确认失败商户不会再次命中新支付且不影响历史支付处理(构建与 OpenSpec 已通过;真实支付渠道 smoke 受 AGENTS.md 禁止访问外部支付渠道约束,未执行外部调用)
  • 5.3 根据实现结果同步主 merchant-payment-routing Spec、架构导航和相关工程文档,移除与新行为冲突的“仅统计成功/失败不切换”表述