Files
RuoYi-Vue/docs/virtual-pay-setup.md

73 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 资源直购虚拟支付上线配置
本项目使用微信小程序虚拟支付的 `short_series_goods`(道具直购)模式,不再提供人民币充值积分功能。
## 1. 执行数据库迁移
执行 `sql/virtual_pay_resource.sql`。脚本会:
- 为资源增加分单位价格 `price_fen`
- 创建价格档位表 `app_virtual_product`
- 创建虚拟支付订单表 `app_virtual_order`
- 创建资源访问权益表 `app_resource_entitlement`
- 将已有 `is_ad=3` 资源的 `ad_number`(元)迁移为 `price_fen`(分)。
## 2. 配置虚拟支付环境变量
```text
WX_VIRTUAL_PAY_ENABLED=true
WX_VIRTUAL_PAY_OFFER_ID=微信虚拟支付OfferId
WX_VIRTUAL_PAY_APP_KEY=微信虚拟支付现网AppKey
WX_VIRTUAL_PAY_ENV=0
WX_VIRTUAL_PAY_CALLBACK_TOKEN=CHANGE_ME_TO_A_RANDOM_SECRET
```
AppKey 和小程序 Secret 不应提交到 Git生产环境应由部署平台注入。
未设置这些环境变量时,虚拟支付默认关闭。
## 3. 配置价格档位道具
在微信公众平台的虚拟支付后台按价格创建并发布道具,例如:
| 价格 | productId 示例 |
| --- | --- |
| 1 元 | `resource_100` |
| 5 元 | `resource_500` |
| 10 元 | `resource_1000` |
然后在若依后台编辑付费资源:
- 获取方式选择“付费”;
- 价格填写分,例如 5 元填写 `500`
- 同一价格的资源填写同一个已发布 `productId`
后台会自动维护“价格 -> productId”唯一映射一个 productId 不能绑定多个价格。
## 4. 配置消息推送
在小程序后台配置:
```text
URL: https://你的域名/prod-api/app/virtual-pay/callback
Token: 与 WX_VIRTUAL_PAY_CALLBACK_TOKEN 相同
数据格式: JSON
消息加密方式: 明文模式
```
支付发货通知由服务端验签、校验 OpenID/订单/productId/价格后幂等发放资源权益。退款成功通知会撤销对应权益。
回调成功时接口返回 `{"ErrCode":0,"ErrMsg":"success"}`;业务校验或处理失败时返回非零错误码,微信会自动重试。
## 5. 上线检查
1. 后端启动时确认 `WX_VIRTUAL_PAY_ENABLED=true`
2. 确认道具已审核发布并等待配置生效。
3. 用一条最低价格资源完成真机支付。
4. 检查 `app_virtual_order.status=1``app_resource_entitlement.status=1`
5. 重新进入资源详情,确认下载链接只对购买用户返回。
## 6. 启用后台订单管理
执行 `sql/virtual_pay_order_menu.sql`,然后重新登录若依后台。在原“支付订单”菜单的同级位置会出现“虚拟支付订单”,支持按订单号、微信交易号、用户、资源、状态和创建时间查询,并可查看详情或导出 Excel。
虚拟支付订单由微信回调和主动查单流程维护,后台页面只提供查询与导出,不允许人工修改或删除订单。