公众号集成接入指南
在 CloudBase 控制台「集成中心」创建微信公众号集成后,平台会自动为你生成一个 HTTP 云函数,封装好网页授权、access_token 托管、JS-SDK、 模板/订阅消息、客服消息、菜单、二维码、用户管理、素材等全部能力。本指南只介绍网页授权(OAuth 2.0)——也是公众号集成最常用、最高频的能力,用于在公众号场景下让网页拿到用户的 openid 与(可选的)昵称/头像等信息。
关于函数名的约定:集成中心生成的云函数名形如
<集成名>-<随机串>(例如offiaccount-demo-rwmx67sc)。为方便讲解,本文统一称其为offiaccount-common——你在自己的代码中替换为实际函数名即可。
其他能力(access_token 托管、JS-SDK、模板/订阅消息、客服消息、菜单、二维码、用户管理、素材等)由同一个 offiaccount-common 云函数提供,本指南不展开。
整体调用链路:
- 网页跳转 → 微信授权页 → 微信回跳带回
code - 网页携带
code→ CloudBase 云 API 网关(accessToken 鉴权)→offiaccount-commonHTTP 云函数 → 微信sns/oauth2/access_tokenAPI offiaccount-common返回{ openid, access_token, ... }给网页或业务后端
架构总览
公众号网页授权(OAuth2.0)换取 openid 的完整时序:
职责分工:
| 角色 | 职责 |
|---|---|
| 公众号网页 | 引导用户跳转微信授权页;回跳后把 code 发给后端 |
| 云 API 网关 | 校验 Bearer {accessToken},将请求转发到 HTTP 云函数 |
offiaccount-common 云函数 | 持有 AppID + AppSecret,用 code 调微信换 openid 与 OAuth tokens;按需调用 sns/userinfo 拉用户资料 |
| 微信公众平台 | 颁发 code、openid,下发用户资料 |
| 集成中心 | 统一托管 AppID/AppSecret,作为环境变量注入云函数 |
前置条件
| 项 | 要求 |
|---|---|
| 公众号 | 服务号或已开通 snsapi_base 权限的订阅号;已通过微信认证 |
| 公众号 AppID + AppSecret | 持有可用值,AppSecret 可在公众平台 → 基本配置中重置 |
| 网页授权域名 | 公众平台 → 设置与开发 → 公众号设置 → 功能设置 → 网页授权域名,已添加发起授权的页面域名并完成 MP_verify_xxx.txt 校验 |
| CloudBase 环境 | 已开通;至少有一种认证登录方式可用(匿名登录不能调云函数,参见 4.3 节) |
第一步 · 准备公众号凭证
登录 微信公众平台 → 设置与开发 → 基本配置:
- AppID:形如
wxc1546068399a59fc - AppSecret:点击「重置」生成,仅显示一次,妥善保存
AppSecret 不要泄露给前端,CloudBase 集成中心会把它托管并注入到云函数环境变量。
第二步 · 在 CloudBase 创建集成
前置说明 · 公众号 IP 白名单
CloudBase 调用公众号涉及两类来源 IP,需加入公众平台「设置与开发 → 基本配置 → IP 白名单」:
- ① 网关 IP(必配):创建集成时平台会经云 API 网关校验凭证,网关出口 IP 必须先加入白名单,否则集成创建失败。务必在 2.2 填写集成信息 提交前配置。
- ② 云函数固定 IP(按需):若由云函数主动外呼公众号 API(如模板/订阅消息、客服消息、菜单等需全局
access_token的接口),需补充配置,详见 2.4。注:网页授权接口(
sns/oauth2/access_token)本身不校验来源 IP,但 ① 网关 IP 仍是创建集成的必要条件。
2.1 进入集成中心
路径:云开发平台 → 模板与集成 → 集成中心 → 微信公众号 → 创建集成。
2.2 填写集成信息
控制台向导需填写:
- 集成名称(自定义,例如
offiaccount-demo) - 公众号 AppID 与 AppSecret
⚠️ 提交前必做 · 配置网关 IP 白名单
创建集成时平台会用填写的 AppID/AppSecret 通过云 API 网关校验公众号凭证,网关出口 IP 未加入公众号白名单会导致集成创建失败。
创建集成的页面会直接提示云 API 网关的出口 IP,复制即可,先到 微信公众平台 → 设置与开发 → 基本配置 → IP 白名单 粘贴保存,再回到本页提交创建。
集成中心将统一托管上述凭证。
2.3 自动生成云函数资源
创建成功后,系统自动完成两项操作:
- 按集成名称创建一个 HTTP 云函数(函数名形如
<集成名>-<随机串>,本文统称offiaccount-common)。 - 将 AppID、AppSecret 作为环境变量注入到该云函数。
2.4 配置公众号 IP 白名单
公众号通过全局 access_token 调用的 API(模板/订阅消息、客服消息、菜单等)会校验调用来源 IP,需将相关 IP 配置到 微信公众平台 → 设置与开发 → 基本配置 → IP 白名单。(仅做网页授权 sns/oauth2/access_token 不校验 IP,可跳过本节。)
① 网关 IP(必配)
即云 API 网关的出口 IP,已在 2.2 填写集成信息 创建集成时配置。前端经网关转发到云函数的链路依赖该 IP。
② 云函数固定 IP(按需)
如果你在 offiaccount-common 云函数中直接调用公众号 API(即由云函数主动外呼微信接口),则该云函数的出口 IP 也必须在白名单内。云函数默认出口 IP 不固定,需先为其开启固定出口 IP,再把这个固定 IP 配置到公众号 IP 白名单:
- 进入 云开发平台 → 云函数 →
offiaccount-common→ 配置,开启公网访问并启用固定出口 IP(详见 云函数固定出口 IP)。 - 将得到的固定出口 IP 填入公众号「IP 白名单」。
仅经网关转发只需 ①(已在 2.2 配置);当云函数主动调用公众号 API 时需补充 ②。两类 IP 都加入白名单后,公众号接口调用才不会被拦截。
第三步 · 了解 offiaccount-common 云函数
第二步创建集成时,平台已经把 AppID、AppSecret 作为环境变量注入到云函数。运行时通过 process.env 读取,业务代码中不会出现明文凭证。
如需修改配置,进入「集成中心 → 对应集成 → 编辑」,保存后平台将自动重新部署云函数。
3.1 网页授权相关路由
⚠️ 与「微信支付」集成的 pay-common 不同,
offiaccount-common不使用_action字段分发,而是直接使用 REST 路径。调用云函数时请使用完整路径,例如POST /oauth/token。
云函数对外暴露的网页授权 5 个 REST 路由:
| 路由 | 用途 | 必填请求体 |
|---|---|---|
POST /oauth/config | 返回当前集成配置的公众号 appId,便于前端拼授权 URL(避免在前端硬编码) | — |
POST /oauth/token | 用 code 换取 openid + OAuth access_token + refresh_token | { code } |
POST /oauth/refresh | 刷新 OAuth access_token(30 天有效的 refresh_token 换新的 2 小时 token) | { refresh_token } |
POST /oauth/userinfo | 用 OAuth access_token 拉取授权用户昵称/头像(仅 snsapi_userinfo scope 有效) | { access_token, openid } |
POST /oauth/verify | 校验 OAuth access_token 是否仍有效 | { access_token, openid } |
所有路由统一返回 { code: 0, msg: 'success', data: <业务数据> },错误返回 { code: -1, msg, data: null }。
这里的 OAuth
access_token与公众号的全局access_token(用于调菜单/消息接口)是两个不同的东西,前者只能用于拉取本用户的资料、不能调其他接口。
3.2 链路与鉴权
调用 offiaccount-common 的链路与 pay-common 完全一致:
前端登录 CloudBase 获取 accessToken → 携带 Authorization: Bearer {accessToken} 请求云 API 网关 → 网关分发至 offiaccount-common。
accessToken 必须来自「认证登录」——匿名登录拿到的 token 无权调用云函数,网关会直接返回 401。具体登录方式(邮箱、手机号、自定义登录等)请参考 CloudBase Web SDK · 认证登录。