微信网页授权接口文档
面向业务网站与 App 的统一接入说明。请根据服务号来源选择对应章节:平台统一微信登录,或自有服务号授权(可选)。
一、平台统一微信登录
适用于不使用自有服务号的租户。平台托管微信服务号与 PC 网站应用,业务系统只需保存 site_key、site_secret 和 redirect_uri。
1. 授权请求
GET http://auth.aikelaidev.cn/oauth/authorize
| 参数 | 必填 | 说明 |
|---|---|---|
site_key | 是 | 站点唯一标识 |
redirect_uri | 是 | 已登记的 HTTP 或 HTTPS 回调白名单地址;协议、主机、端口和路径必须与登记值完全匹配 |
login_mode | 否 | 推荐省略或传 auto:微信内直接进入 H5 授权;普通手机浏览器显示微信唤起与复制链接引导;电脑浏览器自动展示扫码;仅调试时传 h5 或 website |
entry_url | 否 | 普通手机浏览器引导页展示的业务登录入口;必须与 redirect_uri 同源并参与签名 |
scope | 否 | H5 可传 snsapi_base 或 snsapi_userinfo;PC 自动使用 snsapi_login |
timestamp、nonce | 是 | 服务端生成 |
sign | 是 | 去掉 sign 后按字段名排序,拼接 key=value,以 site_secret 做 HMAC-SHA256 |
手机浏览器说明:微信网页授权只能在微信内置浏览器完成。普通手机浏览器会显示“尝试打开微信”“复制微信授权登录链接”和业务系统入口;若系统禁止唤起,请复制授权登录链接到微信聊天窗口打开,即可继续授权并返回原业务回调。
签名计算:删除 sign 字段,忽略空值,按参数名 ASCII 升序排列,拼接为 key=value&key=value,再使用站点 site_secret 进行 HMAC-SHA256;最终结果使用小写十六进制。
timestamp=1710000000\nnonce=abc123\nredirect_uri=https://your.example.com/oauth/callback\nscope=snsapi_userinfo\nsite_key=YOUR_SITE_KEY\nsign=HMAC_SHA256(上述字段, SITE_SECRET)
自动模式:不传 login_mode 或传 auto 时,微信内未指定 scope 默认使用 snsapi_base 静默登录,只保证返回 openid。需要昵称头像时显式传 scope=snsapi_userinfo,由用户确认授权;电脑浏览器继续使用 PC 扫码。
2. 回调与验票
业务回调收到一次性 ticket、state 后,服务端立即请求:
POST http://auth.aikelaidev.cn/api/oauth/ticket/verify
{"site_key":"YOUR_SITE_KEY","ticket":"CALLBACK_TICKET","timestamp":1710000000,"nonce":"SERVER_RANDOM","sign":"HMAC_SHA256_SIGNATURE"}3. 成功返回
{"code":0,"message":"ok","data":{"openid":"微信用户 openid","unionid":"可选 unionid","nickname":"微信昵称","avatar_url":"头像地址","scope":"snsapi_userinfo","expires_in":7200}}4. 授权确认与重复回调
SDK 场景 h5_userinfo 对应接口参数 login_mode=h5、scope=snsapi_userinfo。用户在微信内确认后可获取昵称和头像;h5_base 对应 snsapi_base 静默授权,通常只有 openid。电脑扫码使用 login_mode=website,自动采用 snsapi_login。
同一微信回调若被手机浏览器重复请求,授权中心会在短时间内复用首次成功的跳转结果。业务回调可能收到相同 ticket,只能在服务端验票一次,并由业务系统根据 Session 处理重复访问。OAUTH_STATE_EXPIRED 表示授权状态过期,AUTHORIZATION_PROCESSING 表示首次回调仍在处理,WECHAT_USERINFO_FAILED 表示获取微信用户资料失败;这些情况可重新发起授权。
二、自有服务号授权(可选)
仅适用于租户坚持使用自己的服务号。会员套餐开放多少个自有服务号,租户即可在额度内授权并使用多少个;额度为 0 时需先升级套餐。平台管理员配置开放平台组件、租户完成服务号授权后,H5 与 PC 仍使用和平台公共服务号完全相同的业务接口与 SDK。
1. 前置配置
在后台“站点基础设置 → 开放平台授权(仅自有服务号,可选)”配置组件凭证、微信服务器回调地址、统一 OAuth 回调地址,并上传业务域名验证文件。租户在“我的公众号”完成管理员扫码授权。
2. 授权请求
请求地址仍为 GET http://auth.aikelaidev.cn/oauth/authorize,参数与上方完全一致;自动模式下,手机浏览器和微信内使用站点绑定的自有服务号,电脑浏览器使用平台网站应用扫码,租户无需维护两套接口。手机系统或浏览器若限制自动打开微信,用户需允许跳转或在微信中打开当前页面。两种来源的用户应优先通过 unionid 关联,无法取得 unionid 时由业务系统提供账号绑定。
3. 回调与验票
回调收到 ticket 后,调用 POST http://auth.aikelaidev.cn/api/oauth/ticket/verify 验证。不要使用公众号 AppSecret 或组件 AppSecret 生成业务签名,签名只使用站点 site_secret。
{"site_key":"YOUR_SITE_KEY","ticket":"CALLBACK_TICKET","timestamp":1710000000,"nonce":"SERVER_RANDOM","sign":"HMAC_SHA256_SIGNATURE"}4. 返回结果
返回结构与平台统一微信登录一致:code、message 和 data(openid、unionid、昵称、头像、scope、expires_in)。
三、安全与接入检查
- 业务回调支持 HTTP 或 HTTPS,但必须提前登记白名单;协议、主机、端口和路径必须完全匹配。建议生产环境使用 HTTPS。
site_secret只能保存在业务服务端,不得出现在前端或 App 公共代码中。- 回调收到 ticket 后立即验票;ticket 只能使用一次。
- 验票成功后再创建或更新本地 Session,不能仅凭浏览器参数登录。