1)如果没有这条记录,该请求会在服务器端保持27秒左右(如果用php实现,估计就是sleep一下,再查一下数据库,sleep一下,又查一下数据库,27秒之后还没有查到上面那条记录,就返回window.code=408)
返回window.code=408
页面收到这个返回值,则又发出一条请求(还是同样的请求,在服务器端保持27秒左右没有结果,就返回window.code=408,页面收到之后,再次发出请求,如此循环下去,直接找到这条记录)
2)如果有这条记录,而且ischeck=0,就显示
4、微信页面继续发送刚才的请求,这次就是查询ischeck字段是不是为1了:
1)如果为1,则服务器给这个uuid对应的微信号做一个登录(比如session登录的,就用写入一个session),并返回一个cookie给浏览器用于保存登录状态,说这个微信号网页版已经登录了,而且还返回了登录跳转url,微信页面根据这个返回值,用js的window.location.href类似的方法,跳转一下,并加载登录后所需要的资源,到此,微信网页版登录完成。
2)如果不为1,则在服务器端保持27秒左右后,又回到原始的登录页面(相当于没有用手机扫描过,而且手机端再点登录网页版微信的时候,会提示那个二维码已经失效)
5、至于微信查询的数据库的那条信息是执行插入的呢?那肯定是手机了,手机访问二维码上的链接,带着唯一的uuid和自己的微信号,去插入这条信息,插入成功后,服务器会返回一个状态给微信,微信上就变成了一个按钮,要你确认是否登录微信,如果你点了确认,那么服务器上的这个uuid对应的那条记录的ischeck字段,就会被标记为1,由于客户端一直在反复查询是否有这条记录以及如果有这条记录,ischeck字段是否为1,所以能实现手机点击了确认,客户端就立刻跳转登录了。
以上为我个人的想法,不知道对不对,具体带的参数,访问的请求可能不止这些(因为我发现微信扫二维码并且点击确认登录网页版微信之后,网页上post了一些参数给服务器),但是大概原理,我认为是这样的。