微信网页授权snsapi_base、snsapi_userinfo的问题

大道至簡 发布于 2015/06/20 11:15
阅读 34K+
收藏 4

微信网页授权SCOPE分为snsapi_base、snsapi_userinfo,前者是用户无感知的静默授权只能拿到openid;而后者需要用户确认,能拿到更多的用户信息。

我有一个系统需要进行网页授权,拿到用户信息。

方案1:

        只使用snsapi_useinfo授权,并把用户信息保存到数据库,30天后就重新用进行snsapi_userinfo授权

        弊端:实践发现很多用户换了头像,换了昵称,导致用户头像裂了,昵称对不上。增加授权频率又觉得用户体验不太好。。。

方案2:

        用户进行一次snsapi_userinfo授权,保存openid、refresh_token到数据库。以后使用snsapi_api授权拿到openid,然后根据openid用从数据库取出refresh_token,通过refresh_token获取access_token ,再通过access_token获取到用户信息。

        弊端:实践发现根本行不通,refresh_token拿access_token的时候就提示refresh_token已经过期了。。。

        我更倾向于方案2,于是就在找refresh_token过去的原因,后来发现snsapi_base授权也能返回access_token、refresh_token。正是由于snsapi_base授权导致了我通过snsapi_userinfo授权保存的refresh_token失效!那通过它能否拿到用户信息呢?经过实践发现snsapi_base得到的access_token也能拿到用户信息!!

        那这样就与官方文档冲突了。。。因为官网文档说snsapi_base授权只能拿到openid的。而且我实践也发现,有时snsapi_base授权得到的access_token是拿不到用户信息的

        那么有这种可能,那就是如果用户之前进行了snsapi_userinfo授权,那么在一定时间内进行snsapi_base授权拿到的access_token是可以拿到用户信息的,这个时间就不好测试了。

        我想请教下了解微信网页授权的同学,是不是如我猜想的这样?如果是,那么进行snsapi_userinfo授权后多次时间进行snsapi_base授权可以拿到用户信息。请对这方面了解的同学不吝赐教~~

以下是问题补充:

@大道至簡:把openid保存到cookies可以避免使用snsapi_base授权去拿openid导致snsapi_useinfo授权得到的refresh_token失效,但是无法保证openid的准确性。极端情况下考虑有人有多个微信号。。。 (2015/06/20 11:57)
加载中
3
g
gaoyao99409
只有在关注的情况下snsapi_base才可以获取到用户信息,否则只能获取到openid
0
javens
javens
你猜想的没错,经过证明如果先使用snsapi_userinfo参数去调用接口,在使用snsapi_base调用接口,确实会取到其它的参数,而直接使用snsapi_base参数调用接口只能获取到openid。
0
宋涛涛
宋涛涛
你好,我也遇到贴主类似的问题,请问你的困惑解决了吗?请多多指点~~
0
youngtreman
youngtreman
楼主,我也遇到同样问题,请问你最后的解决方案是什么?
0
page_zxy
page_zxy
token 是需要用缓存存储起来的,2个小时请求更新一次即可。保证不过期,相当于一天只请求12次,这个token官方有限制 一天不能超过一定的次数。所以选择自己存储。
0
回家养猪
回家养猪

也不是, 有时候关注了, 也拿不到会48001

返回顶部
顶部