微信公众号网页授权失败

加入全栈技术交流群(QQ群号:254842154)

问题

今天同事在调试微信公众号网页授权时,发现一个非常诡异的问题。当scope为snsapibase时,可以正常授权,当scope为snsapiuserinfo时,无法授权,出现空白页面。

解决过程

首先可以排除接口权限的问题,因为snsapi_basesnsapi_userinfo需要的权限是一样的。也可以排除是微信sdk的问题,所以还是从自身找问题。通过后台调试,把授权页面的地址打印出来是这样子的:

//把下面url中的scope=snsapi_userinfo 改为 scope=snsapi_base可以正常授权

https://open.weixin.qq.com/connect/oauth2/authorize?appId=wx87cf9295e2eeba97&redirect_uri=http%3A%2F%2Fapi.fellowplus.com%2Fexam%2F&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect

对比官网wiki文章,同事肉眼对比链接没有发现任何问题。后来我表示不服,决定肉眼再观察一遍,终于发现 appId 中的字母I应该是小写的。改成小写后测试通过。OMG,又是linux的大小写问题。

非常简单的一个低级错误,一方面暴露了我们自己的不严谨,没有严格按照微信官方的wiki来做,忽略了url参数中的大小写问题;另外一方面,也反映出微信的不厚道,同样都是大写的字母I,为什么snsapi_base的授权模式是可以的,而snsapi_userinfo不行呢,我猜可能是前者在获取appid这个参数时,会统一转换成小写,而snsapi_userinfo时没有做这个操作。导致微信授权服务接收不到appid这个参数。此时,微信应该报一个类似于获取appid失败这样的错误的,可是并没有,而是停留在授权页面无法跳转到用户的redirect_uri,用户看到的表现就是空白页面。微信这样做可能是出于安全考虑吧。

假如在网页授权时有类似的空白页出现,可以从我刚刚提供的思路去查看,是否有类似的大小写问题。

其他问题

在做网页授权时,经常会遇到的一个其他问题是提示:redirect_uri参数错误。出现这个问题的原因通常都是没有在接口权限表中修改OAuth2.0网页授权的授权回调页面域名,或者填写在域名前面多加了http或者https

工具

在开发微信公众号时,可以申请测试号来体验,它拥有大部分高级权限(除微信支付之外)。在公众号处于申请阶段,用这个测试号来开发是非常棒的!点击进入测试号申请页面

另外,给大家推荐一个github上非常实用的微信公众号开发sdk,它对微信公众号的sdk做了二次封装,包括缓存access_token等处理,目前有php版本的。wechat-php-sdk

标签: none

→ 如果你觉得作者的文章不错,一不小心帮到了你,欢迎打赏作者几包辣条的钱💰