微信扫码登录:
方式1、微信开放平台:第三方应用接入,依赖公司在【微信开放平台】用【公司营业执照】注册的账号,才能实现扫码登录 微信开放平台
方式2、微信公众平台:扫码通过微信公众号授权登录的,借助个人或者公司的微信公众号,生成微信带参二维码,实现扫码关注公众号后登录
我只研究了第2种方式,下面是详细介绍:
1.交互图
2.生成带参二维码(不同场景值)
官方文档:微信开放文档
1.获取token
2.根据token获取带参二维码
3.回调事件
接收事件消息(处理扫码结果)
- 关注/取消关注事件 subscribe/unsubscribe
- 未关注扫码带参二维码事件 subscribe
- 已关注扫码带参二维码事件 scan
请求包体
关注/取消关注事件
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName> <!-- 开发者微信号 扫描时使用的微信号-->
<FromUserName><![CDATA[FromUser]]></FromUserName> <!-- 发送方账号(一个OpenID)微信官方生成-->
<CreateTime>123456789</CreateTime> <!-- 消息创建时间 (整型)-->
<MsgType><![CDATA[event]]></MsgType> <!-- 消息类型,event-->
<Event><![CDATA[subscribe]]></Event> <!-- 事件类型,subscribe(订阅)、unsubscribe(取消订阅)-->
</xml>
扫描带参数二维码事件
1. 用户未关注时,进行关注后的事件推送
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName> <!--同上-->
<FromUserName><![CDATA[FromUser]]></FromUserName> <!--同上-->
<CreateTime>123456789</CreateTime> <!--同上-->
<MsgType><![CDATA[event]]></MsgType> <!--同上-->
<Event><![CDATA[subscribe]]></Event> 事件类型,subscribe-->
<!--
事件KEY值,qrscene_为前缀,后面为二维码的参数值
二维码参数值:创建二维码时的uuid
-->
<EventKey><![CDATA[qrscene_123123]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket> <!--二维码的ticket,可用来换取二维码图片-->
</xml>
扫描带参数二维码事件
2. 用户已关注时的事件推送
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName> <!--同上-->
<FromUserName><![CDATA[FromUser]]></FromUserName> <!--同上-->
<CreateTime>123456789</CreateTime> <!--同上-->
<MsgType><![CDATA[event]]></MsgType> <!--同上-->
<Event><![CDATA[SCAN]]></Event><!--事件类型,SCAN-->
<EventKey><![CDATA[SCENE_VALUE]]></EventKey>
<!--
事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id
scene_id:创建二维码时的uuid
-->
<Ticket><![CDATA[TICKET]]></Ticket> <!--二维码的ticket,可用来换取二维码图片-->
</xml>
Header 鉴权参数
消息加解密说明
https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Message_encryption_and_decryption_instructions.html
回调处理流程
4.轮询查询扫码状态
查询扫码结果