微信网页授权需认证服务号、正确配置授权域名(https已备案,与业务/js安全域名一致),区分snsapi_base(静默获openid)和snsapi_userinfo(手动授权获昵称头像,仅关注用户可用),unionid需绑定开放平台且用户在同平台其他应用关注过,code换token须用sns接口且不可复用,返回数据需校验openid与token匹配。

微信网页授权获取用户信息,不是简单调用接口就能拿到昵称头像——很多开发者卡在 code 换取 access_token 失败、unionid 获取不到、静默授权却弹出登录框 这几个关键点上。核心问题不在代码写法,而在配置和流程理解偏差。
确认公众号类型与授权域名是否匹配
只有认证服务号才支持网页授权(包括静默和用户手动授权)。订阅号、未认证号、测试号(即使有网页授权权限)在生产环境无法获取用户敏感信息(如 openid/unionid)。授权域名必须在公众号后台「公众号设置 → 功能设置 → 业务域名」和「JS 接口安全域名」中同时添加且完全一致(不带 http://,不带路径,区分 www 和非 www)。
- 例如:你跳转的页面是 https://www.example.com/auth.php,那么授权域名必须填 www.example.com(不能填 example.com 或 https://www.example.com)
- 本地调试(localhost)无法走网页授权,必须用已备案域名 + HTTPS(微信强制要求)
- 修改授权域名后需等待 5–10 分钟生效,缓存可能导致立即测试失败
区分 snsapi_base 与 snsapi_userinfo 的使用场景
snsapi_base 是静默授权,只能获取 openid;snsapi_userinfo 是手动授权,可获取 nickname、headimgurl、sex 等字段。很多人误以为只要 scope=snsapi_userinfo 就一定能拿到用户信息——其实前提是用户已关注公众号,否则仍会弹出授权页;若未关注,即使点了允许,返回的也是空用户数据(仅 openid)。
公众号运营:文章发布至草稿、样式封面、评论与用户管理、数据统计等。用户要求将 Markdown 发送到公众号草稿、查看阅读量统计或类似后台操作时,使用本技能。
- 获取 unionid 必须满足:用户已关注公众号 + 公众号已绑定开放平台 + 用户在该开放平台下其他公众号/小程序也关注过
- 不要在未关注时强依赖 nickname 或 headimgurl,应做好兜底(如显示默认头像+“未授权用户”)
- 建议先用 snsapi_base 拿 openid 做基础识别,再按需引导用户点击按钮触发 snsapi_userinfo 授权
code 换取 access_token 时别忽略 token 类型和有效期
网页授权获取到的 code,必须用 https://api.weixin.qq.com/sns/oauth2/access_token 接口换取,不是基础接口的 access_token(后者用于客服消息、菜单等)。这个 access_token 有效期 2 小时,且每个 code 只能兑换一次,重复使用会返回 invalid code 错误。
- 注意接口返回字段:access_token、expires_in、refresh_token、openid、scope(值为 snsapi_base 或 snsapi_userinfo)
- 如果需要长期获取用户信息,可用 refresh_token 刷新 access_token(有效期同原 token,7 天内有效)
- 别把网页授权 access_token 和公众号全局 access_token 混用,它们作用域、有效期、获取方式完全不同
获取用户信息前务必校验签名与 openid 有效性
调用 https://api.weixin.qq.com/sns/userinfo 接口前,必须确保 access_token 和 openid 来自同一授权流程(即同一个 code 换来的),否则返回 errcode=40003(invalid openid)。另外,该接口返回的用户信息不包含 unionid,除非公众号已绑定开放平台且用户满足 unionid 规则。
- 返回数据中的 openid 是加密标识,不可用于跨公众号识别;unionid 才是跨应用唯一标识
- 若返回字段为空(如 nickname 为 ""),大概率是用户未关注公众号或授权被拒绝,不要直接报错,应提示重新授权
- 敏感字段(如手机号)需额外调用「手机号快速验证」接口,且需用户主动授权,网页授权本身不提供
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










