让代理充值复用现有网页支付能力
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m7s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m7s
微信按当前 v2/v3 配置分别生成 MWEB/H5 链接,支付宝复用 C 端 WAP 链接,并让可用支付方式基于生效配置判断。 Constraint: 支付链接统一通过 qr_content 返回,由前端渲染二维码;按要求不运行测试 Rejected: 微信 Native 与支付宝当面付 | 会引入非当前商户配置所需的额外产品开通 Confidence: high Scope-risk: moderate Directive: 微信 H5/MWEB 二维码仅承诺系统相机或外部浏览器扫码链路 Tested: 相关 Go 包编译通过;gofmt 与 git diff --check 通过 Not-tested: 按用户要求未运行自动化测试及真实支付联调
This commit is contained in:
@@ -22,22 +22,22 @@
|
||||
|
||||
平台或超级管理员的 `offline` 线下代充 MUST 继续使用现有目标 `shop_id`、付款凭证和企业微信审批契约,在线充值 100 元最低金额 MUST NOT 改变线下代充金额规则。平台、超级管理员和企业账号 MUST NOT 创建代理在线扫码充值单。
|
||||
|
||||
在线创建 MUST 在同一 GORM 事务中保存充值单、支付单及请求幂等事实,再调用创建时选定的支付 Adapter:微信 MUST 使用 Native 支付,支付宝 MUST 使用 `alipay.trade.precreate`。成功响应 MUST 使用统一 `{code,msg,data,timestamp}` 格式,并在 `data` 中至少返回 `recharge_id`、`recharge_no`、`payment_no`、`payment_method`、`recharge_source`、`recharge_source_name`、`amount`、`qr_content`、`status` 与 `status_name`。后端 MUST 返回支付渠道原始付款字符串,不得生成或保存二维码图片。
|
||||
在线创建 MUST 在同一 GORM 事务中保存充值单、支付单及请求幂等事实,再按当前生效支付配置调用选定 Adapter:`provider_type=wechat` 使用微信 v3 H5 并返回 `h5_url`,`provider_type=wechat_v2` 使用微信 v2 MWEB 并返回 `mweb_url`,支付宝复用 C 端 `alipay.trade.wap.pay` 手机网站支付链接能力。成功响应 MUST 使用统一 `{code,msg,data,timestamp}` 格式,并在 `data` 中至少返回 `recharge_id`、`recharge_no`、`payment_no`、`payment_method`、`recharge_source`、`recharge_source_name`、`amount`、`qr_content`、`status` 与 `status_name`。`qr_content` MUST 为支付渠道 HTTPS URL,前端自行渲染二维码;后端不得生成或保存二维码图片。
|
||||
|
||||
充值订单创建、列表、详情和在线支付状态响应 MUST 使用稳定来源枚举区分创建路径:`platform_offline` 表示平台线下代充,`agent_online` 表示代理在线自充。列表 MUST 支持使用 `recharge_source` 筛选;来源可由受控创建方式推导,不要求新增重复数据库字段。
|
||||
|
||||
支付单 MUST 同时保存创建时的收款身份快照:微信记录商户号,支付宝记录应用 ID,并保留支付方式与 `payment_config_id`,供后续导出对账。创建响应 MUST NOT 返回该内部收款身份快照。
|
||||
|
||||
第三方预下单失败时,系统 MUST 记录 Integration Log,并将本次支付单标记为失败、充值单标记为已关闭;不得返回缺少有效 `qr_content` 的成功响应。
|
||||
支付链接生成失败时,系统 MUST 将本次支付单标记为失败、充值单标记为已关闭;微信 H5/MWEB 外部下单尝试 MUST 记录 Integration Log,支付宝本地签名生成 WAP URL 不得伪造外部调用日志。系统不得返回缺少有效 `qr_content` 的成功响应。
|
||||
|
||||
#### Scenario: 代理创建微信 Native 扫码充值
|
||||
#### Scenario: 代理创建微信 H5/MWEB 链接扫码充值
|
||||
- **WHEN** 代理提交 `amount=10000`、`payment_method=wechat` 和新的 `request_id`
|
||||
- **THEN** 系统从登录上下文确定当前店铺主钱包,创建充值单和支付单,调用微信 Native 预下单,并将 `code_url` 映射为 `qr_content`
|
||||
- **THEN** 系统从登录上下文确定当前店铺主钱包,创建充值单和支付单,按当前配置调用 v3 H5 或 v2 MWEB,并将 `h5_url` 或 `mweb_url` 映射为 `qr_content`
|
||||
- **THEN** 响应不得包含支付配置 ID、商户密钥或其他店铺信息
|
||||
|
||||
#### Scenario: 代理创建支付宝当面付扫码充值
|
||||
#### Scenario: 代理创建支付宝 WAP 链接扫码充值
|
||||
- **WHEN** 代理提交有效金额、`payment_method=alipay` 和新的 `request_id`
|
||||
- **THEN** 系统创建充值单和支付单,调用 `alipay.trade.precreate`,并将 `qr_code` 映射为 `qr_content`
|
||||
- **THEN** 系统创建充值单和支付单,使用 `alipay.trade.wap.pay` 生成签名 HTTPS URL,并将 URL 映射为 `qr_content`
|
||||
|
||||
#### Scenario: 区分平台代充与代理自充
|
||||
- **WHEN** 调用方查询充值订单列表、详情或在线支付状态
|
||||
@@ -53,14 +53,14 @@
|
||||
|
||||
#### Scenario: 相同请求重放
|
||||
- **WHEN** 同一提交账号使用相同 `request_id` 和相同业务字段重试
|
||||
- **THEN** 系统 MUST 返回首次创建的充值单、支付单和付款内容,不得再次创建业务单或再次向第三方预下单
|
||||
- **THEN** 系统 MUST 返回首次创建的充值单、支付单和支付链接,不得再次创建业务单或再次调用支付渠道生成链接
|
||||
|
||||
#### Scenario: 幂等请求载荷冲突
|
||||
- **WHEN** 同一提交账号使用已有 `request_id` 但改变金额或支付方式
|
||||
- **THEN** 系统 MUST 返回 `CodeConflict`,不得改变原充值单或创建新单
|
||||
|
||||
#### Scenario: 支付方式不可用
|
||||
- **WHEN** 所选支付方式缺少完整配置、扫码预下单能力或回调验签能力
|
||||
- **WHEN** 所选支付方式缺少完整配置、支付链接生成能力或回调验签能力
|
||||
- **THEN** 系统 MUST 返回统一支付配置不可用错误,且不得创建只有本地记录而无法付款的待支付订单
|
||||
|
||||
---
|
||||
@@ -491,12 +491,12 @@ Outbox 消费者 MUST 在独立事务中复用统一代理主钱包入账能力
|
||||
|
||||
### Requirement: 查询代理在线充值可用支付方式
|
||||
|
||||
系统 SHALL 提供 `GET /api/admin/agent-recharges/payment-methods`,仅根据当前生效支付配置返回真正具备扫码预下单、回调验签和查单能力的在线支付方式。路由 MUST 注册在 `/:id` 动态路由之前。
|
||||
系统 SHALL 提供 `GET /api/admin/agent-recharges/payment-methods`,仅根据当前生效支付配置返回真正具备支付链接生成、回调验签和查单能力的在线支付方式。路由 MUST 注册在 `/:id` 动态路由之前。
|
||||
|
||||
成功响应 MUST 使用统一 `{code,msg,data,timestamp}` 格式;`data.methods` MUST 为按 `wechat`、`alipay` 固定顺序排列的字符串数组,并同时返回 `min_amount=10000` 与 `max_amount=100000000`。接口不得返回支付配置 ID、商户号、应用 ID、密钥或具体缺失的敏感配置。
|
||||
|
||||
#### Scenario: 微信与支付宝均可用
|
||||
- **WHEN** 当前支付配置完整支持微信 Native 和支付宝 PreCreate
|
||||
- **WHEN** 当前支付配置完整支持对应协议的微信 H5/MWEB 和支付宝 WAP 支付
|
||||
- **THEN** 接口 MUST 返回 `methods=["wechat","alipay"]` 及在线金额上下限
|
||||
|
||||
#### Scenario: 没有可用扫码支付方式
|
||||
@@ -558,14 +558,14 @@ Outbox 消费者 MUST 在独立事务中复用统一代理主钱包入账能力
|
||||
| 1 | 待支付(订单已创建,等待支付) |
|
||||
| 2 | 已支付(第三方收款已确认,钱包入账处理中) |
|
||||
| 3 | 已完成(钱包余额和唯一流水已提交) |
|
||||
| 4 | 已关闭(第三方预下单失败或确认订单已关闭) |
|
||||
| 4 | 已关闭(支付链接生成失败或确认订单已关闭) |
|
||||
|
||||
**支付方式枚举**
|
||||
|
||||
| 值 | 含义 |
|
||||
|----|------|
|
||||
| wechat | 微信 Native 扫码支付 |
|
||||
| alipay | 支付宝当面付扫码支付 |
|
||||
| wechat | 微信 H5/MWEB 支付链接扫码支付 |
|
||||
| alipay | 支付宝 WAP 支付链接扫码支付 |
|
||||
| offline | 线下转账(仅平台账号可用) |
|
||||
|
||||
**支付通道枚举**
|
||||
|
||||
Reference in New Issue
Block a user