微信公众号支付接入
这篇解决什么
在应用下打开 wx_pub、填公众号商户参数、在微信内置浏览器里带 openid 调起 JSAPI。读完能对上 WxPubPayClient,以及它和小程序支付差在哪。
默认端口 48080。先完成 支付功能设计。公众号登录、openid 先看 三方登录。
示意图:预下单在服务端。调起必须在微信里,用公众号粉丝的 openid。
从哪配
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 模块 | 微信客户端 | ruoyi-office/yudao-module-pay/ |
| 渠道码 | wx_pub | PayChannelEnum.WX_PUB |
| 客户端 | JSAPI,TradeType JSAPI | WxPubPayClient |
| 配置 | 和小程序共用 | WxPayClientConfig |
| 小程序渠道 | 继承公众号客户端,只换编码 | WxLitePayClient |
| 回调 | POST /pay/notify/order/{channelId} | PayNotifyController |
WxPayClientConfig 字段和小程序篇相同:公众号 appId、商户号、v2 / v3、证书。这里的 appId 必须是公众号,不是小程序。
示例订单仍可用应用 demo。PC 收银台选 wx_pub 通常调不起来,因为管理端用户没有公众号 openid。联调要在微信里打开业务页,先完成网页授权再提交渠道。
和 wx_lite 的差别
下单协议都是 JSAPI。WxLitePayClient 直接继承 WxPubPayClient,只是渠道码改成 wx_lite。差别在用户身份:
wx_pub:公众号网页授权拿到的 openidwx_lite:小程序wx.login拿到的 openid
两套 openid 不能混用。商户平台也要分别绑定公众号 AppId 和小程序 AppId。
三个 AppId 不要混
公众号 AppId、小程序 AppId、开放平台移动应用 AppId 不是同一个。wx_pub 填公众号那个。社交登录配置也要是同一套,否则 openid 对不上商户。
渠道通知进 yudao.pay.order-notify-url/{channelId}。本机地址微信打不进来,要换成公网。没穿透时先用 模拟支付。
H5 在微信外是 wx_wap,扫码是 wx_native,本篇不展开。
配置与操作
走 应用信息(1126,/pay/app)开通 wx_pub。填公众号 appId、商户号 mchId、API v2 或 v3 和证书。appId 必须是公众号那个,不要填小程序。
调起必须在微信内置浏览器,带网页授权拿到的 openid。两套 openid 不能和 wx_lite 混用。PC 示例单用户是管理员,没有公众号 openid,管理端选 wx_pub 通常调不起来。通知 POST /pay/notify/order/{channelId} 要公网。开启见 支付功能设计。

本系统截图:支付管理 → 应用信息。wx_pub 在应用下开渠道,不是单独菜单。

本系统截图:支付&退款案例。渠道配好后,真正调起要在微信内置浏览器完成。
