前后端分离-获取公众平台用户信息流程

1.根据appId,重定向到https://open.weixin.qq.com/connect/oauth2/authorize

   请求中参数指定redirect_uri,response_type=code,scope=snsapi_userinfo,

     redirect_uri是公众平台重定向到自己业务平台接口路径,接口中会返回公众平台返回的code

   state是业务平台携带给业务平台的回调接口的自己业务平台的数据,当然这个携带的数据你也可以把他放在redirect_uri中携带

2.携带接口获取到code后,根据appId和appsecret发送一个http请求,是一个

        https://api.weixin.qq.com/sns/oauth2/access_token?appid=xxx&&secret=xxx&code=xxx&grant_type=authorization_code

3.步骤2接口会返回用户在公众平台的openId和accessToken,根据这两个数据,继续发送http rest风格的请求,

得到用户基本信息。

注意,步骤1是重定向,步骤2是发送一个RESTFULL风格的公众平台的接口请求,两者区别很明显,

接口请求的返回分两种:1种是view类型的(网页),1种的数据类型的

转发和重定向都是针对网页请求结果,这是传统的前后端在一起通过model做数据传递的方式

rest风格的请求是前后端分离的,支持页面局部刷新的请求方式

相关逻辑:

1)为什么这个过程会涉及到两种请求方式

   步骤1请求后需要一个用户授权页面,这个页面要保证统一的话,就必须由公众平台定义这个页面,所以第一次是请求页面,

   点击确认完成授权后要跳转到业务平台的页面,这个页面一定要重定向的方式,所以后台的这个接口一定是一个view类型的接口

2)  用户已经授权的情况下再进入到授权页面的话,微信会自动跳转到你的redirect_url,还是会走之前的流程,只是他不弹授权框

3)所以,即使是前后端分离的开发模式,微信也要先重定向到后台接口,然后后台接口返回的是前端的路由页面,路由页面相关数据可以

需要的相关数据可以通过参数的方式让前端去截取;

所以,扫描登录二维码的时候(包含前端路由页面以及携带设备参数),先走前端页面,前端缓存中先判断是否已经获取了用户登录信息以及设备号信息。如果已经获取了,那么就不需要再去授权了,直接在前端处理,前端要保存用户的openId,以及用户的基本信息以及设备信息。

如果用户未登录,先通过接口请求后台的appId,拿到appId后,前端发起重定向请求到微信公众平台获取code的接口,该接口中携带

业务后台的回调地址,业务后台拿到code后,通过code请求openId,再通过openId请求用户信息,最后,将用户信息和openId以参数的形式

重定向给前端路由页面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。