微信开放平台登录功能
PC 网站的微信扫码登陆有两种,一种是微信开放平台提供的,参考文档:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
这种技术实现是通过 OAuth2.0 授权登录,授权并经过用户同意后获取用户信息,然后在平台进行登陆获取平台登录态。
表现方式为,PC 浏览器根据自己的 AppID 调用微信的 JS SDK,创建一个登陆二维码,其中有登陆成功的回调地址。弹出微信页面,页面显示一个微信二维码。用户微信扫码授权后,弹出页面重定向到回调地址。业务根据回调地址处理登陆逻辑。
优点是微信处理好了大部分逻辑,业务只需要完善成功的回调逻辑。
缺点是用户扫码后还要点击授权,不能实现要求用户关注公众号。我们采用下面的方式实现。
微信公众号组合接口实现登陆
表现方式为,页面请求后端获取一个微信的二维码,然后显示该二维码,并开始轮询后端,等待扫码结果(轮询等待 5 分钟二维码过期)。
用户扫码后(未关注公众号的需要关注公众号)轮询接口返回用户 jwt 并且重定向到登录结果页。
需要了解的官方文档
-
创建二维码 ticket,这里我们创建临时二维码就行
-
获取 access_token, 公众号调用各接口时都需使用access_token。开发者需要进行妥善保存,建议公众号开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务。
官方文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
-
事件推送,重点关注“2 扫描带参数二维码事件”
官方文档: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html
-
获取用户信息,根据扫码事件获取到的用户 openid 获取用户信息
主要流程
说明:
access_toke 有效期为两个小时,统一由一个定时任务一个小时刷新一次并保留到 Redis,刷新后5分钟内新老access_token都可用,业务一般不用特殊考虑。
scene_str 可以根据一定规则创建,事件推送监听可以根据不同规则生成的 scene_str 来处理不同的业务逻辑(不一定只是登陆逻辑)。
v_code 类似一个随机字符串效验码,前端轮询的时候带上并在后端做效验防止伪造攻击。