订阅号实现微信网页授权登陆(原创)

发布于 2019-08-07 18:17:00

首先需要说明的是,普通的微信订阅号是不支持oauth2.0网页授权的。网上很多文章说通过微信开放平台的网站应用漏洞可以实现,但交了钱拿到认证后测试,发现并没什么卵用,跟很多网友反馈的一样,提示scope 权限不足。花钱的东西,谨慎尝试啊!

当然最后还是找到了解决方法,虽然不是很完美,但至少我的领导看后还是很欣然接受的。

解决方案:

方法1:

        通过用户点击菜单,触发微信异步通知,然后获取用户信息,然后再把专属URL发给用户(也就是加上token的URL)

       虽然订阅号没有oauth2.0网页授权,但是 ”获取用户基本信息“这个接口是有权限的。使用这个接口得用到openId,那怎么拿openId呢。其实用户在操作公众号时,公众号都相应的与绑定的服务器地址进行异步操作,比如点击菜单。此时我们就可以在异步方法里获取openId,同时也拿到了用户信息。虽然拿到了用户信息,但是新的问题就来了,既然是公众号与我们服务器进行异步操作,我们怎么知道服务器获取用户信息是对应哪个当前操作的用户,又如何引导他进入授权登陆后的页面。我目前想到的方法是,通过公众号消息响应 的机制,把用户授权登陆后的URL(也就是带上token)返回给用户,用户点击后进入,间接实现授权登陆。效果如图所示:

5d4b807398e24.png

    异步代码:

5d4b80d8b9587.png

方法2(推荐)

     使用另一个服务号的oauth2.0网页授权接口实现订阅号授权登陆

     这里可能就有小伙伴郁闷了,oauth2.0授权登陆不是得先关注公众号,那不是得让客户先关注服务号。其实不然,服务号的oauth2.0授权有两种方式。

     第一种是静默授权,以snsapi_base为scope发起的网页授权,这种是最常见的方式,用户无需点击授权,但前提是得先关注公众号。

     第二种是用户手动同意的授权,以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

     很显然,第二种符合我们的要求,毕竟所谓的授权登陆,无非就是获取用户信息,并引导其进入相应页面。开发步骤和代码跟服务号oauth2.0授权登陆一样的,只是请求的URL有所区别,具体的开放文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

    效果如图:

   5d4b880cdb52e.png

对比:

      方法1:

            优点:仅需要自身接口即可实现,不需要另一个微信服务号支持。

            缺点:体验差,用户每次”授权“,都需要进行两部操作,先获取专用url(其实就是token),然后再点击url进入授权页面。

      方法2:

          优点:体验好,用户首次授权后,一段时间内再授权无需用户手动同意,体验跟静默授权一样。

          缺点:成本较高,需要另一个服务号支持。

总结:很明显如果手头有服务号或者不介意在申请一个的,推荐使用方法2。当然如果对应体验不怎么敏感的,可以使用成本更低的方法1.

注释:本项目开发语音:PHP,微信开发插件:easywechat

1 条评论

发布
问题