web的pc端微信扫码关注公众号=登录
公众号登录网页里面流程比较简单,其中客户端和服务器端
用户初次关注,扫码关注后,微信返回给本地服务器的内容:
用户初次关注,扫码关注后,微信返回给本地服务器的内容:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> <EventKey><![CDATA[qrscene_123123]]></EventKey> <Ticket><![CDATA[TICKET]]></Ticket> </xml>
用户已经关注过,微信返回给本地服务器的内容:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[SCAN]]></Event> <EventKey><![CDATA[SCENE_VALUE]]></EventKey> <Ticket><![CDATA[TICKET]]></Ticket> </xml>
Eventkey里面的场景值第一次由客户端设定上传后,就确定后,后面不会变了。
流程
1. 用户点击‘微信登录’
2. 弹出公众号二维码/或者其它登录的二维码。(这个需要微信的ticket)
3. 关注公众号/...(用户关注公众号: 会发给服务器一个event: subscrite (初次关注), event: scan( 已经关注过))
4. 服务器接收到关注的信息存储到对应的用户字段, ( oauth里面一点要存储这个ticket, 用来比对客户web端传来的验证是否登录的信息) 这一点比较关键,ticket 比较长可能需要转码后才能通过url传递,我的做法是生成了一个code: ticket ,存储在redis里面,客户端传code上来后,取ticket, 拿着ticket去oauth表里面找。
4.1 如果没有用户信息,创建新用户 = current_user,并根据wechat返回信息和current_user生产 oauth, current_user -> oauth
4.2 如果用户已经存在(current_user), 生成oauth,
5. 第2步弹出关注的时候,返回的二维码后。 (客户端循环调用服务器 检查code对应的ticket是否存在:也就是是否收到微信的推送的事件)
阅读量: 386
发布于:
修改于:
发布于:
修改于: