php识别二维码与条形码之百度低调推出短网址服务dwz.cn,用在百度分享的二维码里了,微信扫描二维码登录网页是什么原理?

jackxiang 2015-5-21 09:41 | |
短网址服务,很多人都已经不再陌生,如今社交产品和搜索引擎纷纷推出短网址服务。Google推出了短网址服务goo.gl、g.co,Twitter推出了t.co,新浪微博推出了t.cn,还有腾讯微博的url.cn等等。而今百度也加入了这个行列,推出了dwz.cn短网址。

2010年8月百度曾推出过短网址服务,为go.baidu.com,此域名被网友戏称为“域名最长的短网址服务”,后来百度很快就关闭了服务。此服务再次推出,使用了新域名dwz.cn,dwz是短网址拼音的首位字母缩写。

经whois查询得知,dwz.cn域名于2005年4月注册,目前域名信息已变更至百度公司名下,据业内人士表示,域名dwz.cn系百度收购所得,具体成交金额并未透露。不过国内域名交易平台—名商网的资深经纪人表示,3字母的cn域名价格一般都是在5位数左右,记者查询名商网上的3字母域名出售价格发现tyq.cn域名一口价3,000元,而贵的mnl.cn域名也只是要价15,000元,由此可以推测百度收购dwz.cn域名价格不会太高。

目前dwz的主流后缀均已经被注册,其中dwz.com在美国人手中,dwz.com.cn则被北京德威治医药连锁有限责任公司用作企业官网。

案例:百度微信二维码分享的二维码图片,解析一个看看是这样的:
格式:QR-Code
内容:http://dwz.cn/IWvXI

解析图片的地址:
http://demo.geekso.com/qrcode/current/tools

这个工具还能识别条形码呢?
传一个条型码上去后,识别出来核对发现是正确的:

识别结果
格式:EAN-13

内容:6937526503743


所花时间:0.011550903320312


试一个微信登录的验证码:
格式:QR-Code
内容:http://weixin.qq.com/x/AU12KqUlH1LwKPcBUpAJ

再试一个PC客户端的验证码:
格式:QR-Code
内容:http://weixin.qq.com/x/ASyhiIev6yVowLDZrsxl

再再试一个PC客户端的验证码:
格式:QR-Code
内容:http://weixin.qq.com/x/AV_wDVYd9z7aTCj77rhh
每打开一次微信网页版页面的时候会随机生成一个含有唯一uid的二维码,每次刷新页面都会不一样(这个可以保证一个uid只可以绑定一个账号和密码,如果一个uid可以绑定多个账号和密码,那么很可能你的电脑会登陆别人的微信哦)
(x后面的数码值不一样,应该是某种标识,这个标识可能是和手机端通信的一个特殊标志位。)
确实返回了唯一 id,但目的是为了识别用户身份,而且实际上打开这个页面的时候浏览器已经和 Server 创建了一个长连接等待确认信息。

使用登陆后的微信扫描该二维码的时候,会将这个id和手机上的微信账号及密码绑定,并上传到微信网页版。

浏览器展示完长连接里包含的用户信息(头像等)后,会新开一个长连接等待客户端的确认操作,
从体感来看,怎么着都不可能是页面1-2秒轮询发起GET请求的,实际是通过堵塞等待的长连接,近乎实时的获得信息。 (这个应该像nginx有类似的长连接事件驱动插件)

客户端确定登录成功请求了一个Url:
http://short.weixin.qq.com/cgi-bin/micromsg-bin/extdeviceloginconfirmok

拉我本人的头像链接:
http://wx.qlogo.cn/mmhead/ver_1/waWFJgkZsUDRLHiaicRUtciciajfjWYs51ia9rCrWRDFoiav4vIehxImHppzaB9tpF5wUyBVork0jR7DjaKJ4QSqXB1Q/0?randid=6772

这个估计是通知谁上线了吧(信息是从服务端返回时就已经加密了的看不到真实内容,我个人估计连Cookie都是放在base64包里进行传输的:This request did not send any cookie data.
):
http://short.weixin.qq.com/cgi-bin/micromsg-bin/statusnotify

有没有消息作个消息同步请求:filename=micromsgresp.dat
http://short.weixin.qq.com/cgi-bin/micromsg-bin/mmsnssync
#  Result  Protocol  Host  URL  Body  Caching  Content-Type  Process  Comments  Custom  
4  200  HTTP  short.weixin.qq.com  /cgi-bin/micromsg-bin/mmsnssync  1,617    application/octet-stream
POST http://short.weixin.qq.com/cgi-bin/micromsg-bin/getupdateinfo //检查版本更新
200 OK (application/octet-stream)
Content-Disposition: attachment; filename=micromsgresp.dat
Content-Length: 94
Content-Type: application/octet-stream
Connection: close
data:application/octet-stream;base64,el8AAAAAAJo4D8tCCA8bQh9cbV6RU4VmAHE5OQAAqdUlTCaKMpirKWKzwjBUbwQHkLqmjIErUMDNq6VIxOKn1T9MRBAAnUIgREZ3+tx+XewRORJ1naCw09rRSrq7rw==

获取用户的头像Http地址信息:
http://short.weixin.qq.com/cgi-bin/micromsg-bin/batchgetheadimg

抓一个看到,的确是用户头像,如这个:
http://wx.qlogo.cn/mmhead/ver_1/z6OgOwB1t6HiaQWF6n6KfEsP9O4CeEvDhUYujWrsRvSib0Fa7DYyYtu7UzzMEkNZ1A8cUh5Wlvy69PQuQ8AViaZbsaSaXnDcgYmkTgxpOheIx8/132?randid=673

获取在线情况:
http://short.weixin.qq.com/cgi-bin/micromsg-bin/getonlineinfo


正在输入 :
http://minorshort.weixin.qq.com/cgi-bin/micromsg-bin/clientperfreport

如果长时间不登录,重新扫码登录时,会向服务端请求一次(估计是销毁掉PC客户端的标识罢):
http://short.weixin.qq.com/cgi-bin/micromsg-bin/extdeviceloginconfirmcancel

所以说,核心过程应该是:浏览器获得一个临时 id,通过长连接等待客户端扫描带有此 id 的二维码后,从长连接中获得客户端上报给 server 的帐号信息进行展示。 并在客户端点击确认后,获得服务器授信的令牌,进行随后的信息交互过程。 在超时、网络断开、其他设备上登录后,此前获得的令牌或丢失、或失效,对授权过程形成有效的安全防护。


作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/8063/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2015-5-21 11:15
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]