公众号 JSAPI 网页支付集成指南
在 CloudBase 控制台「集成中心」创建微信支付集成后,平台会自动为你生成一个 HTTP 云函数,封装好下单、查单、退款、回调等全部能力。本指南介绍如何在**微信公众号网页(H5 within WeChat)**端使用 JSAPI 支付,基于该云函数完成从下单到回调的完整支付闭环。
关于函数名的约定:集成中心生成的云函数名形如
<集成名>-<随机串>(例如miniapp-wxpay-rwmx67sc)。为方便讲解,本文统一称其为pay-common——你在自己的代码中替换为实际函数名即可。
适用场景:用户在微信浏览器内打开的公众号 H5 页面发起支付(最常见的服务号支付)。
不适用:
- 微信外浏览器(Chrome/Safari/系统浏览器)→ 应使用 H5 支付下单接口
- PC 网页 → 应使用 Native(扫码)支付
整体调用链路:
- 正向请求:网页 → 业务后端获取微信网页授权 → CloudBase 云 API 网关(accessToken 鉴权)→
pay-commonHTTP 云函数 → 微信支付 API - 异步回调:微信支付 → 集成中心(验签 + 解密)→
pay-common→ 业务侧
架构总览
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
│ 公众号网页 │ │ 网页授权后端 │ │ CloudBase 云 API │
│ (微信浏览器)│───►│ code → openid│ │ 网关 │
│ │ └──────────────┘ │ accessToken 鉴权 │
│ fetch │ │ │ │
│ ──────────►│ Bearer │ │ HTTP invoke │
│ │ Token │ │ ────────────►│
│ │ ▼ │ │
│ │ ┌──────────────────────────────────────┴───┐
│ │ │ pay-common (HTTP 云函数) │
│ │ │ SDK 自签 → 调用 /v3/pay/transactions/jsapi
│ │ └────────────┬─────────────────────────────┘
│ │ │ 统一下单
│ │ ▼
│ │ ┌──────────────────┐
│ │ │ 微信支付 API │
│ │ │ (JSAPI/小程序) │
│ │ └────────┬─────────┘
│ WeixinJSBridge.invoke │ 异步支付回调
│ ('getBrandWCPayRequest') ▼
│ │ ┌──────────────────┐
│ │ │ 集成中心 │
└──────────────┘ │ (验签 + 解密) │
└────────┬─────────┘
│ 明文转发
▼
┌──────────────────┐
│ pay-common │
│ /wechatpay/order │
└──────────────────┘
JSAPI 与小程序支付的关键区别:
| 维度 | 小程序支付 | 公众号 JSAPI 网页支付 |
|---|---|---|
| 下单接口 | /v3/pay/transactions/jsapi | /v3/pay/transactions/jsapi(同一个) |
appid | 小程序 AppID | 公众号 AppID |
| openid 来源 | signInWithOpenId() 直接拿 | 微信网页授权(OAuth2.0)code → openid |
| 调起支付 API | wx.requestPayment | WeixinJSBridge.invoke('getBrandWCPayRequest', ...) |
| 运行环境 | 微信小程序容器 | 微信内置浏览器(必须) |
因此 pay-common 函数本身无差异,差异在「openid 获取」与「前端调起 API」两处。
职责分工:
| 角色 | 职责 |
|---|---|
| 公众号网页 | 通过微信网页授权拿 code → 业务后端换 openid;携带 Bearer Token 调用 pay-common;用 WeixinJSBridge.invoke 调起支付 |
| 业务后端(自备) | 持有公众号 AppSecret,调用 sns/oauth2/access_token 用 code 换 openid(不能让 AppSecret 出现在前端) |
| 云 API 网关 | 校验 Bearer {accessToken},将请求转发到 HTTP 云函数 |
| pay-common 云函数 | 处理下单、查单、退款;接收并处理回调 |
| 微信支付 API | 支付业务实际执行方 |
| 集成中心 | 统一托管凭证;接收回调后完成验签与解密,并以明文转发至云函数 |
前置条件
| 项 | 要求 |
|---|---|
| 公众号 | 服务号(订阅号不支持 JSAPI 支付)已通过微信认证 |
| 公众号 JSAPI 支付权限 | 在公众平台「微信支付」中开通并通过审核 |
| 微信支付商户号 | 已申请并在商户平台完成与上述公众号的绑定 |
| 公众号支付授权目录 | 商户平台 → 产品中心 → JSAPI 支付 → 添加授权目录(必须与下单页面 URL 前缀一致,含末尾 /) |
| 公众号网页授权域名 | 公众平台 → 设置与开发 → 公众号设置 → 功能设置 → 网页授权域名 |
| 商户超管权限 | 用于下载 API 证书、设置 APIv3 密钥 |
| 业务后端(任选) | 用于换 openid 的轻量服务(自有 Node/Java/Go 服务,或一个独立的云函数) |