- 一、核心认知:这到底是什么?
- 二、第一坑:根本找不到配置入口!
- 三、第二坑:验证文件上传失败
- 四、第三坑:”redirect_uri参数错误”
- 五、第四坑:Scope参数错误或没权限
- 六、后端实现的隐形坑
- 七、检查清单
这是一篇根据实际经验整理的「微信公众号网页授权配置」开发踩坑记录。希望能帮你绕开我走过的那些坑。
一、核心认知:这到底是什么?
简单说,网页授权就是让你的网页能在微信里安全地拿到用户的唯一标识(OpenID)甚至昵称、头像。
一个很形象的比喻:
- 网页授权域名 = 你家的”收货地址”
- 用户的OpenID/信息 = 你的”快递包裹”
- 微信强制你登记”收货地址”,是为了确保”包裹”绝不会被送到骗子指定的”黑店”里去。
二、第一坑:根本找不到配置入口!
踩坑场景: 登录公众号后台,在”设置”里翻了个底朝天,就是找不到”网页授权域名”这几个字。
破坑方法:
记住这个路径,别再找了:
【公众号后台】-> 左侧菜单【设置与开发】-> 【开发接口管理】-> 【接口权限】-> 【网页服务】 ->【网页授权】右侧的修改
为什么藏这么深? 我猜微信产品经理觉得这是”开发功能”,所以把它和”服务器配置”放在了一起。
服务号需要微信认证通过后,才会在js安全域名下出现网页授权域名。
三、第二坑:验证文件上传失败
在后台配置域名,点击”保存”后,微信提示”验证文件无法访问”或”验证失败”。
为什么:
1. 文件放错位置
- 原因: 把文件放在了网站的某个子目录下。
- 解决办法: 必须放在你填写的域名根目录下(通常是
public_html,wwwroot,html或/目录)。
2. 内容被污染
- 原因: 你的Web服务器或框架给
.txt文件自动加上了HTML模板,或者文件开头有BOM头。 - 解决办法: 用浏览器直接访问这个文件的完整URL(如
http://www.yourdomain.com/MP_verify_xxxx.txt),必须看到纯文本、且只有一行验证码,不能有任何额外的HTML标签、空格或空行。
四、第三坑:”redirect_uri参数错误”
精心构造了授权URL,用户一点击就报这个错。
1. 域名不匹配(最常见)
- 原因: 你授权的
redirect_uri参数里的域名,和你在后台配置的网页授权域名不是一模一样。 - 解决办法: 如果你后台配的是
www.yourdomain.com,那么redirect_uri就必须是https://www.yourdomain.com/xxx。用yourdomain.com(无www)也是不行的!必须完全一致。
2. 加了URLEncode
- 原因: 按照官方的说法,
redirect_uri必须进行 URL编码。 - 解决办法: 不要进行编码,直接使用。
五、第四坑:Scope参数错误或没权限
请求 snsapi_userinfo 时,提示权限错误。
- 确认公众号类型: 只有认证过的服务号才有网页授权权限!订阅号、未认证的服务号,统统不行。去”账号详情”里确认你的类型和认证状态。
- 检查参数拼写:
scope参数只能是snsapi_base(静默授权,只拿OpenID)或snsapi_userinfo(弹窗授权,拿用户信息)。
六、后端实现的隐形坑
1. Code是一次性的
微信回调带来的 code 只能使用一次,换到 access_token 后立即失效。别想着重复用它。
2. 别泄露AppSecret
用 code 换 access_token 的请求需要 AppSecret,这个操作必须在你的后端服务器进行,绝对不要在前端JS中完成,否则 AppSecret 就暴露了。
3. State参数防CSRF
构造授权URL时,务必带上一个随机的 state 参数,并在回调时校验其一致性。这能有效防止CSRF攻击。
七、检查清单
当你卡住时,按这个清单逐项核对:
- 公众号是已认证的服务号吗?
- 网页授权域名在 【开发】->【基本配置】 里配好了吗?
- 验证文件能通过 HTTP 直接访问且内容纯净吗?
- 授权URL中的
redirect_uri域名和后台配置完全一致吗? redirect_uri已经做过 URL编码了吗?scope参数拼写正确吗?(snsapi_base/snsapi_userinfo)- 后端在用
code换access_token时,AppSecret没写错吗?
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
腾讯云开发者社区:孟斯特