前言:公司的产品一个比较重要的场景是分享到微信中,在微信打开页面后,我们会通过打开微信的用户的信息,进行权限的判断,其中包括游客的,这样我们就没有办法弹窗强制让用户登录,最终选用了微信的静默授权登录
1. 微信授权登录
前端调用:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http://m.abc.cn/wx/login/?url=https%3A%2F%2Fm.abc.cn%2Fpages%2Fpassport%2FloginDemo.html%3FredirectNum%3D0&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
,与微信交互进行微信的授权登录,其中scope
有两种,具体的解释见微信官方文档,redirect_uri
的值前半部分是我们的接口,后半部分的url
的值要进行URLEncode
2. 接口/wx/login/
的处理逻辑
- 通过第一步后,
/wx/login/
会携带微信生成的code
的参数,根据code
获取当前的微信用户的openid
,接口调用https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
,其中CODE
的值就是code
- 返回值
{ "access_token":"ACCESS_TOKEN","expires_in":7200,"refresh_token":"REFRESH_TOKEN","openid":"OPENID","scope":"SCOPE" }
- 根据
OPENID
,查询数据库中用户的信息,并设置session