微信公众号支付接入
微信公众号支付在 Pay 模块中对应 wx_pub 渠道,也常称为微信 JSAPI 支付。它适合用户在微信公众号、微信内置浏览器或 H5 页面中拉起微信支付的场景。RuoYi Office 当前通过统一的 Pay 应用、渠道和收银台能力承接该链路。
本页基于当前 PayChannelEnum、支付应用渠道配置表单、示例订单和支付订单实现整理。
适用场景
| 项目 | 说明 |
|---|---|
| 渠道编码 | wx_pub |
| 渠道名称 | 微信 JSAPI 支付 |
| 典型终端 | 微信公众号、微信内置浏览器 |
| 业务前提 | 用户可获得微信 OpenID,商户号已绑定公众号 AppId |
| 本地参考页面 | apps/web-antd/src/views/pay/demo/order、apps/web-antd/src/views/pay/order |
如果只是验证 Pay 模块闭环,可先用模拟支付或支付宝沙箱;微信公众号支付需要微信商户、公众号 AppId、支付目录/授权域名等外部配置配合。
接入链路
示例订单仍使用 PayDemoOrderServiceImpl 中的 appKey = demo 创建支付单,收银台提交支付时选择 wx_pub 渠道。
渠道配置
在「支付管理 -> 支付应用」中找到目标应用,点击微信 JSAPI 渠道配置。当前前端配置字段来自 views/pay/app/data.ts:
| 字段 | 说明 |
|---|---|
| 微信 APPID | 公众号 AppId,需和商户号绑定 |
| 商户号 | 微信支付商户号 |
| API 版本 | 根据商户平台和证书选择 V2 / V3 相关配置 |
| 商户密钥 / API V3 密钥 | 用于签名和回调验签,严禁提交到仓库 |
| apiclient_key.pem | 商户私钥证书内容 |
| 证书序列号 | 微信支付 API v3 证书序列号 |
| 平台公钥 / 平台证书 | 用于验签,按当前微信支付要求配置 |
生产环境还需要在微信公众平台/商户平台配置支付授权目录、回调域名和接口权限。配置完成后,建议先创建小额示例订单验证。
和普通支付接入的关系
微信公众号支付并不会改变 RuoYi Office 的业务接入方式:业务仍然创建 Pay 支付单,Pay 模块仍然生成支付订单、接收渠道通知并回调业务系统。差异只在渠道参数和终端拉起方式。
| 环节 | 微信公众号支付关注点 |
|---|---|
| 创建支付单 | merchantOrderId、金额、过期时间仍由业务方控制 |
| 提交支付 | 渠道编码为 wx_pub |
| 用户身份 | 通常需要微信 OpenID 参与 JSAPI 支付 |
| 回调验签 | 依赖微信平台证书、公钥或 API v3 配置 |
| 业务回调 | 仍走业务系统的支付成功通知接口 |
排查清单
| 现象 | 优先检查 |
|---|---|
| 收银台无 JSAPI 渠道 | 支付应用下 wx_pub 渠道是否配置并启用 |
| 拉起支付失败 | 公众号 AppId 与商户号绑定关系、OpenID、支付授权目录 |
| 回调验签失败 | API v3 Key、平台证书/公钥、证书序列号是否匹配 |
| 支付成功但业务未更新 | PayNotifyJob、业务回调接口、支付单状态和金额校验 |
| 只能沙箱/测试失败 | 微信支付通常不等同支付宝沙箱,需真实商户能力和白名单配置 |
二次开发建议
- 会员端或公众号端要明确 OpenID 获取和登录用户绑定关系。
- 同一商户多公众号场景,建议用不同支付应用或清晰的渠道配置隔离。
- 回调接口必须支持幂等,微信可能重复通知。
- 微信证书和密钥应通过安全配置中心管理,不要写入前端或提交仓库。
