Files
junhong_cmp_fiber/openspec/changes/add-agent-self-recharge-payment-methods/design.md
break 370fd3e67f
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
update
2026-09-03 09:28:28 +08:00

2.5 KiB

Decisions

  • 线上充值复用支付单和实际商户路由,成功消费者以支付单/钱包流水唯一约束入账。
  • 线下申请保存不可变金额和付款证据快照;审批回调在主钱包锁事务中条件入账。
  • 线上未知结果和线下审批未知均保持在途,复用既有查询/恢复,不把重试当作新入账。

配置与充值动作契约

允许方式与查询

  • GET /agent-self-recharge-payment-methods:代理、平台用户仅返回“全局允许方式 ∩ 当前启用商户池可用方式”的有序 wechat/alipay 列表;不得返回商户身份、凭证或全局允许范围。交集为空返回空列表。
  • PUT /agent-self-recharge-payment-methods:仅超级管理员,保存 wechat_onlyalipay_onlywechat_and_alipay;记录操作者、前后值和时间。修改不更新任何已有充值/支付单的支付方式、商户 ID 或快照。

自身店铺充值

  • POST /agent-recharges 的代理在线分支强制 shop_id 为空且认证店铺为已启用代理自身店铺;传入下级/其他店铺返回无权。线上请求 amountpayment_methodrequest_id,其中方式必须在当前交集内;以 request_id 与调用者/店铺唯一复用既有支付创建结果,失败预下单不入账。
  • 在线创建在事务内选择实际商户、冻结支付/商户快照并创建充值记录;渠道成功消费者锁定支付、充值和主钱包,以支付 ID/钱包流水唯一约束一次入账。失败、关闭、退款或未知状态不加余额;未知结果由既有查单/回调恢复,禁止客户端重试直接增加余额。

线下转账

  • 线下请求必须包含 amount(正分)、payer_nametransferred_at(带时区时间)、transfer_channel_or_banktransaction_no、至少一个 payment_voucher_key 和可选备注;创建时冻结全部字段、状态为待企业微信审批,不增加主钱包。
  • 企业微信通过消费者锁定申请、审批实例和主钱包,条件更新一次增加余额和钱包流水;驳回、撤回、关闭不入账。仅未成功申请可修改上述材料并创建新审批实例重提;未知审批保持在途。平台/超级管理员查询和处理一律先应用既有店铺数据范围,审计不记录凭证正文。

Migration Plan

新增线下充值申请、附件快照、审批关联及唯一约束的成对迁移;验证权限、回调重放、未知、驳回重提和 up/down/up。