mosaic101 / blog

my blog (keep running~~~)
https://github.com/mosaic101/blog/issues
39 stars 6 forks source link

微信订阅号里实现oauth授权登录,并获取用户信息 [2015-11-09] #9

Open mosaic101 opened 5 years ago

mosaic101 commented 5 years ago

前端时间折腾过的蛋疼问题,好不容易解决了,现在把这个分享出去;众所周知,微信公众号分订阅号、服务号、企业号;每个号的用途不一样,接口开放程度也不一样。微信还有个扯淡的开放平台,号称统一管理众多公众号的。反正都是交钱的功能多,两个平台把我弄得傻傻分不清楚。

切入正题,上个公司有个微信订阅号,内嵌了一个微网站,并且要实现授权登录。这个授权登录的接口只有认证的服务号才能调用,订阅号要实现这个功能只能另辟蹊径;

第一次尝试: ​ 我看了开放平台的api里的网页授权登录,里面有个网页授权登录。但是是扫码登录,根本不适用于移动端,折腾了半天,失败。

第二次尝试: ​ 方倍工作室有一篇文章说可以借助服务号的oauth interface,在订阅号里使用。api里也说是可以在未关注该公众号的情况下,获取用户基本信息,如下图:

img ​ 实际上,然并卵。折腾了半天回调地址都没有code值,然后放到该服务号里或者关注该服务号就能获取到code了,这个该死的api 忽悠人。

第三次尝试: ​ 这种问题懂得人实在太少,百度又是个垃圾搜索,想找个预期的回答都很难。最后好不容易找到个跟我经历很像的哥们,成功解决该问题。

img ​ 这个逻辑就又回到第一次尝试了,然后把url的开头换成微信公众号里的开头,就能变向的实现微信订阅号里的授权登录。

前提需要在开放平台交300元认证费开通相关功能,并创建网站应用,等待通过

img

如果直接使用开放平台的微信登录功能,只能出现基于二维码的扫一扫页面,并且只适用于pc端的微信登录。

开放平台官方提供的认证地址是:

https://open.weixin.qq.com/connect/qrconnect?……

他会生成一个二维码需要微信扫描登陆后获取信息,这和微信内自登陆相差太远

经过不断的摸索,发现一个小捷径:即更换上面的认证地址为:

https://open.weixin.qq.com/connect/oauth2/authorize?……

目前这个方法微信没写入开放平台的官方文档,但是却可以实现订阅号的微信内自登陆,不过和服务号的OAuth不同的是,这种方式是登陆操作(snsapi_login必须只能设置成这个),不是直接的获取操作(snsapi_base,snsapi_userinfo)

参考微信订阅号:e城e乡

long long ago 实现的功能,目前仍然可行。微信开发我只做过这个,其他的不一定会,^_^