总体流程
在进行微信OAuth2.0授权登录接入之前,需要在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程
微信OAuth2.0授权登录 让微信用户 使用微信身份 安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。 微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:
- 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
- 通过code参数加上AppID和AppSecret等,通过API换取access_token;
- 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
获取access_token时序图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uancZ0ud-1609151084708)(assets/image-20201228150126007.png)]
微信登录WxApiController,分两个controller
一、生成微信扫描二维码controller
- 将相关参数传入微信开放平台授权url,其中重定向url需要URLEncoder编码
- 重定向到授权url
访问授权url后,得到一个微信登录二维码,用户扫描二维码看到确认登录的页面
![image-20201228152410252](assets/image-20201228152410252.png)
![image-20201228152511204](assets/image-20201228152511204.png)
用户点击“确认登录”后,微信服务器会向谷粒学院的业务服务器发起回调,因此接下来我们需要开发回调controller
二、获取扫码人信息,添加数据controller
- 获取授权临时票据code
- 拿着code请求微信固定的地址,得到两个值 access_token 和 openid
- 向固定地址传入参数,使用httpclient发送get请求,得到返回结果result字符串
- 将result字符串转成map集合,根据key分别获得 access_token 和 openid(工具:谷歌的Gson)
- 拿着得到的 access_token 和 openid,再去请求微信提供的固定地址,获取到扫码人信息
- 判断数据库表里是否存在相同的微信信息(根据openid查询)
- 表中没有相同的微信数据,那么进行添加,注册会员信息
- 访问微信的资源服务器,获取用户信息
- 使用httpclient发送请求,得到返回结果userInfo字符串
- 将result字符串转成map集合,根据key分别获得昵称和头像
- 创建一个会员对象,将昵称和头像存入,并将这条数据插入数据库保存
- 根据会员对象,使用jwt生成token字符串
- 重定向回到首页面,并且通过路径传递token字符串