微信转账接入
微信转账接入用于演示企业通过微信支付能力向用户微信零钱或相关账户付款。RuoYi Office 当前在“示例提现单”中提供微信余额类型,后端使用 Pay 转账能力生成转账单并等待渠道回调。
本页聚焦微信转账差异点;通用转账单能力请阅读 转账管理。
当前实现边界
| 层 | 路径 / 接口 |
|---|---|
| 示例提现页面 | apps/web-antd/src/views/pay/demo/withdraw |
| 示例提现接口 | apps/web-antd/src/api/pay/demo/withdraw/index.ts |
| 示例提现服务 | PayDemoWithdrawServiceImpl |
| Pay 转账单 | PayTransferController、PayTransferService |
| 示例回调接口 | POST /pay/demo-withdraw/update-transferred |
示例提现类型为“微信余额”时,服务会选择:
java
PayChannelEnum.WX_LITE.getCode()同时微信转账会额外构造渠道扩展参数:
java
PayTransferCreateReqDTO.buildWeiXinChannelExtra1000("测试活动", "测试奖励")生产环境需要把这里的用途、场景、活动名称等替换为真实业务信息,并满足微信商户平台要求。
示例链路
管理端表单会在提现类型选择“微信余额”时,将收款人账号提示调整为“微信 openid”。这意味着前置业务必须能拿到和支付商户/小程序/公众号匹配的 OpenID。
微信转账关注点
| 关注点 | 说明 |
|---|---|
| OpenID | 必须属于当前商户/应用可识别的用户身份体系 |
| 商户权限 | 需要开通对应商家转账、零钱付款或相关能力 |
| 用途说明 | 微信转账通常要求明确付款用途、场景、活动等信息 |
| 限额风控 | 微信侧存在单笔、单日、账户实名等限制 |
| 回调验签 | 依赖微信支付证书、API v3 Key、公钥/平台证书 |
和微信小程序支付的关系
示例服务当前使用 wx_lite 渠道作为微信转账渠道选择,这不代表“小程序支付”和“微信转账”是同一种业务。它们共享部分商户和证书配置,但资金方向、产品权限、参数和风控都不同。
| 能力 | 资金方向 | 关键身份 |
|---|---|---|
| 小程序支付 | 用户付款给商户 | 小程序 OpenID、支付单 |
| 微信转账 | 商户付款给用户 | 收款用户 OpenID、转账单 |
回调与重试
微信转账完成后,Pay 会通知示例提现单更新状态。服务会校验转账单金额、业务单号、渠道和终态。若转账失败,示例页面会显示“重新转账”入口,后端会将失败状态重置为等待中再重新创建转账。
生产环境建议:
- 限制重试次数和重试间隔。
- 记录每次失败的渠道错误码和错误信息。
- 对疑似风控失败的单据转人工处理。
- 大额或批量转账前加审批和财务复核。
排查清单
| 现象 | 优先检查 |
|---|---|
| 提示 OpenID 无效 | OpenID 是否来自同一公众号/小程序/商户绑定体系 |
| 渠道返回无权限 | 商户平台是否开通转账产品,是否完成认证 |
| 转账失败无明显原因 | 查看 Pay 转账单详情的渠道错误码/错误信息 |
| 回调后状态不变 | /pay/demo-withdraw/update-transferred 日志、merchantTransferId 和渠道编码 |
| 重试仍失败 | 是否触发微信风控、限额、实名或场景限制 |
