All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
26 lines
2.5 KiB
Markdown
26 lines
2.5 KiB
Markdown
## Decisions
|
|
|
|
- 线上充值复用支付单和实际商户路由,成功消费者以支付单/钱包流水唯一约束入账。
|
|
- 线下申请保存不可变金额和付款证据快照;审批回调在主钱包锁事务中条件入账。
|
|
- 线上未知结果和线下审批未知均保持在途,复用既有查询/恢复,不把重试当作新入账。
|
|
|
|
## 配置与充值动作契约
|
|
|
|
### 允许方式与查询
|
|
|
|
- `GET /agent-self-recharge-payment-methods`:代理、平台用户仅返回“全局允许方式 ∩ 当前启用商户池可用方式”的有序 `wechat`/`alipay` 列表;不得返回商户身份、凭证或全局允许范围。交集为空返回空列表。
|
|
- `PUT /agent-self-recharge-payment-methods`:仅超级管理员,保存 `wechat_only`、`alipay_only` 或 `wechat_and_alipay`;记录操作者、前后值和时间。修改不更新任何已有充值/支付单的支付方式、商户 ID 或快照。
|
|
|
|
### 自身店铺充值
|
|
|
|
- `POST /agent-recharges` 的代理在线分支强制 `shop_id` 为空且认证店铺为已启用代理自身店铺;传入下级/其他店铺返回无权。线上请求 `amount`、`payment_method`、`request_id`,其中方式必须在当前交集内;以 `request_id` 与调用者/店铺唯一复用既有支付创建结果,失败预下单不入账。
|
|
- 在线创建在事务内选择实际商户、冻结支付/商户快照并创建充值记录;渠道成功消费者锁定支付、充值和主钱包,以支付 ID/钱包流水唯一约束一次入账。失败、关闭、退款或未知状态不加余额;未知结果由既有查单/回调恢复,禁止客户端重试直接增加余额。
|
|
|
|
### 线下转账
|
|
|
|
- 线下请求必须包含 `amount`(正分)、`payer_name`、`transferred_at`(带时区时间)、`transfer_channel_or_bank`、`transaction_no`、至少一个 `payment_voucher_key` 和可选备注;创建时冻结全部字段、状态为待企业微信审批,不增加主钱包。
|
|
- 企业微信通过消费者锁定申请、审批实例和主钱包,条件更新一次增加余额和钱包流水;驳回、撤回、关闭不入账。仅未成功申请可修改上述材料并创建新审批实例重提;未知审批保持在途。平台/超级管理员查询和处理一律先应用既有店铺数据范围,审计不记录凭证正文。
|
|
|
|
## Migration Plan
|
|
|
|
新增线下充值申请、附件快照、审批关联及唯一约束的成对迁移;验证权限、回调重放、未知、驳回重提和 up/down/up。 |