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
发布于:
修改于: