微信和支付宝二维码技术揭秘

       他山之石,可以攻玉,你对产品和架构思想都是来自于生活,也来自你对行业内别的产品和架构的学习,然后才有了创新。今天想从以下几个方面去总结:

  • 我们是否了解二维码?
  • 二维码是什么?
  • 二维码实战
  • 微信网页版登录原理

我们是否了解二维码?

       我们现在每天都在用二维码,比如微信支付,支付宝支付,扫一扫加好友等,还有推广等。这些没有什么好说的,但是我们平常有没有见过这样的事情,有些公司推广了他们研发的产品,使用了IOS和安卓APP做UI交互的,但是推广APP时用了两个二维码,一个是IOS APP的二维码,一个是安卓APP的二维码,为什么会有这么另类的推广,可否集成到一个二维码呢?与之相反的是我们有见过一个二维码没,用安卓手机、IOS手机、微信和支付宝扫描后得到的结果不一样,这些是怎么回事呢?
       还有我们使用微信网页版去登录时(wx.qq.com),我们使用手机已经登录的微信去扫一扫,就可以登录成功了,这是怎么回事?因为我们平常都是输入账号和二维码之后登录的,现在网页版上是从哪里获取到账号和密码的,手机扫描二维码后手机发送给网页版的吗?

二维码是什么?

       我们去超市买东西时,商品上都会有一个条形码,收银员一扫描就知道了这个商品的编号和价格等,其实条形码就是对物品的一个编号,有时候收银员扫描不出条形码,还可以输入物品上的数字,这就是一个明证。那二维码其实也是存储了一些信息,只不过比起条形码存的内容更多而已,关于二维码是如何编码的,可以参考《二维码的生成细节和原理》,二维码比起条形码有以下优势:

  • 存储内容更多;
  • 二维码图上有三个定位矩形,保证了我们可以从任意角度甚至是反面都可以识别二维码;
  • 二维码增加了纠错机制,也就是说编码了一些冗余信息,这样即使二维码图有破损和残缺都可以识别出。

二维码实战

       比较著名的二维码库主要有zxingqrcode和zbar,zxing支持java、php、js、python等语言的生成和识别,但是对c++仅支持识别不包含生成(详见zxing-cpp);qrcode支持c、php、python,但是对于c语言来讲仅支持生成。具体实现可以参考我的https://github.com/zhiyong0804/qrcode,这里就不细讲了,从原理上,我们还必须了解图像识别等方面的算法,比如opencv。

微信网页版登录原理

       我们使用比较高频的社交软件就是QQ和微信了,当然现在还有,其余的人可能是使用陌陌啊,估计这部分人是因为需求比较大,或者上瘾,使用微信或者QQ,我们现在有没有发现都可以使用二维码进行扫描登录,免去了输入账号和密码的过程,但是通过扫描就能登录,那他们的账号信息是如何传递给客户端(PC客户端、网页客户端)的呢?而且我们仔细去分析,不管是谁去扫描都能登录成功,下面我们就以网页版微信(wx.qq.com)为例来分析:
       1. 当我们在浏览器输入wx.qq.com后,网页前端向服务器发起了http请求,微信服务器返回了一个uuid一个字段,然后网页前端发起http登录请求,如下所示:
https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=IZEc0ZwH3w==&tip=0&r=-2022997859&_=1518146428000

获取到uuid.png

同时前端把这个uuid信息编码到了二维码图里,如果我们用在线扫码识别工具可以看到它编码的内容是https://login.weixin.qq.com/l/IZEc0ZwH3w==,此时前端发起的这个http请求是一个http的长连接请求(其实这个http长连接叫法有点不太准,比较直观的是服务端hold on了这个请求,一直没有回应,如果前端没有收到这个回应,大约每过25秒有会请求一次)。
       2. 我们使用已经登录微信账号的扫描该二维码,就会获取到uuid,然后手机终端发起http请求,该请求里包含了uuid和token(用户登录授信令牌,对应了用户账户信息)。
       3. 后台服务收到了手机客户端的http请求后,依据token信息,知道了用户账户信息,于是再次生成一个token_b,并且通过uuid找到了是网页前端的http的会话,也就是我们说的http长连接,然后给前端http请求回复response(包含了token_b)。
       4. 前端拿到token_b(授信令牌)就可以与微信后台服务间进行通信了,包含获取用户信息,此时我们在前端可以看到显示了头像,同时也请求了很多的图片和数据资源:
图片.png

       5. 其实在第三步时微信服务器在回复手机客户端的请求后,还会等待手机客户端的确认“登录”信息,如果确认了,前端才会进行显示。
       微信的二维码登录是不是很酷啊?反正我觉得从技术和产品上都比较库,当然现在其他的产品都已经实现了这样的功能,但是你现在清楚了没?我相信你已经明白了。如果对于uuid和token还不是很明白可以看我的另一篇博客《安全开放性云平台架构与设计》。
       

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,078评论 25 707
  • 我不知这世界是怎样的,黑是不是黑,白是不是白。我亦不知道你是怎样的,柔情或绝情,感性或理智,我不欲探究这世界,更不...
    文娅君阅读 208评论 0 0
  • ——记昙华林的文艺 总感觉,美好一词是难以言喻的。有时候,更像是一种轻飘飘的,又暖在心窝的绵绵情意。 ...
    悠蓝达阅读 227评论 0 2
  • 一个死宅发出这样的声音,不知道是宅太久了社交无能,还是对自己不自信觉得没人喜欢感觉孤独。这个软件到底特么的怎么了,...
    看起来是一点都不友善阅读 164评论 0 1
  • 不得了了,几位俊男美女都聚在了一个贵族学院——斯塔诺。在那里,她们与他们,开始了斗争。“喂,走路不长眼吗?”“美女...
    慕櫻呐阅读 266评论 0 1