加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

挖掘微信Web版通信的全过程

发布时间:2021-01-12 10:17:44 所属栏目:大数据 来源:网络整理
导读:昨天是周末,在家闲得无聊,于是去weiphone.com逛了一圈,偶尔发明有人发了一帖叫《微信 for Mac》,这勾起了我的好奇心,海内做Mac开拓的人确实很少,对付那些可以或许独自开拓一些Mac第三方器材的开拓者我都暗示很敬畏,于是点进去看了一个毕竟,假如你们好奇

weixin

昨天是周末,在家闲得无聊,于是去weiphone.com逛了一圈,偶尔发明有人发了一帖叫《微信 for Mac》,这勾起了我的好奇心,海内做Mac开拓的人确实很少,对付那些可以或许独自开拓一些Mac第三方器材的开拓者我都暗示很敬畏,于是点进去看了一个毕竟,假如你们好奇也可以点进去看个大白,我最终得出的结论就是:坑爹呢这是!直接用一个WebView去加载了wx.qq.com这个网页也敢自称是微信For Mac?对付这种诱骗用户的举动我异常不屑,同时也让我在思索在微信不提供API的情形下开拓一款原生的微信Mac版本是否可行,最有也许的就是去说明微信Web版本的通讯进程,然后在措施中模仿这个流程,在我苦苦研究了一个下战书之后,终于摸透了这个进程,并用措施实现了大部门成果,下面就具体讲解一下微信Web版的流程:

1.微信处事器返回一个会话ID

微信Web版本不行使用户名和暗码登录,而是回收二维码登录,以是处事器必要起首分派一个独一的会话ID,用来标识当前的一次登录,通过哀求地点:

https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1377482012272(个中1377482012272这个值是当前间隔林威治尺度时刻的毫秒)

处事器会返回如下的字符串:

window.QRLogin.code = 200; window.QRLogin.uuid = “DeA6idundY9VKn”;

而这个DeA6idundY9VKn字符串就是微信处事器返回给我们的ID。

2.通过会话ID得到二维码

既然微信Web版本是通过二维码举办登录,怎样得到这个随机的二维码呢?谜底就是操作适才得到的ID去哀求处事器天生的二维码,通过上面的ID我们组合获得以下的URL地点:

https://login.weixin.qq.com/qrcode/DeA6idundY9VKn?t=webwx

该哀求返回的即是我们必要的二维码,此时必要用户在微信的手机版本中扫描这个二维码(我就搞不大白微信官方是怎样想的,登录Web版本竟然还必要手机微信去共同登录,莫非没有思量我被迫选择Web微信就是由于手机不在身边这样的气象么?)

3.轮询手机端是否已经扫描二维码并确认在Web端登录

当得到二维码之后,就必要用户去手机端去扫描二维码,并得到用户的授权,此时我们并不知道用户何时完成这个操纵,以是我们只有轮询,而轮询的地点就是:

https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=DeA6idundY9VKn&tip=1&_=1377482045264(留意UUID和最后时刻这两个参数)

假如处事器返回:

window.code=201;

则声名此时用户在手机端已经完成扫描,但还没有点击确认;

window.redirect_uri=一个URL地点

则声名此时用户已经在手机端完成了授权进程,生涯下这个URL地点下一步调中行使。

4.会见登录地点,得到uin和sid

通过会见上一步调中得到的URL地点,可以在处事器返回的Cookies中获获得wxuin和wxsid这两个值,这两值在后续的通讯进程中都要行使到这两个值,而且Cookies中也必要包罗这两项。

5.初使化微信信息

前面的步调算是完成了这个伟大的登录进程,假如我们必要行使微信就必要获适合前用户的信息、挚友列表等,尚有一个要害的就是同步信息(后续与处事器轮询中必要行使同步信息),通过会见以下的链接:

https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=1377482058764(r依然是时刻)

会见该链接必要行使POST,而且在Body中带上以下的JSON信息:

这个JSON串中Uin和Sid别离是上面步调中得到的那两个Cookie值,DeviceID是一个当地天生的随机字符串(说明白官方的老是e+一串数字,以是我们也保持这样的名目)。

处事器就会返回一个很长的JSON串,这个中包罗:BaseResponse中的值用来暗示哀求状态码,ContactList首要用来暗示接洽人(此列表不全,只包罗了相同通信录助手、文件助手、微信团队和一些公家帐号等,后头会通过另一接口去得到更全面的信息),SyncKey是用户与处事器同步的信息,User就是当前登任命户本身的信息。

6.得到全部的挚友列表

在上一步调中已经得到了部门挚友和公家帐号,假如必要得到完备的挚友信息,就必要会见以下的链接:

https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=1377482079876(r依然是时刻)

会见该链接同样必要POST方法,但Body为空JSON:{},处事器对身份的鉴定是通过Cookies,以是必要保持之前会见的Cookies不被修改(在Objective-C中会自动生涯相干的Cookies,无需措施非凡处理赏罚),在返回的JSON串中,MemberList中就包括了全部的挚友信息。

7.保持与处事器的信息同步

与处事器保持同步必要在客户端做轮询,该轮询的URL如下:

https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?callback=jQuery18309326978388708085_1377482079946&r=1377482079876&
sid=QfLp+Z+FePzvOFoG&uin=2545437902&deviceid=e1615250492&synckey=(见以下声名)&_=1377482079876

个中的参数r和_都是time,sid,uin,deviceid与上面步调的值相对应,此处的synkey是上步步调得到的同步键值,但必要按必然的法则组合成以下的字符串:

1_124125|2_452346345|3_65476547|1000_5643635

就是将键和值用_离隔,差异的键值对用|离隔,但记得|必要URL编码成%7C,通过会见上面的地点,会返回如下的字符串:

window.synccheck={retcode:”0”,selector:”0”}

假如retcode中的值不为0,则声名与处事器的通讯有题目了,但详细题目我就无法猜测了,selector中的值暗示客户端必要作出的处理赏罚,今朝已经知道当为6的时辰暗示有动静来了,就必要去会见另一个接口得到新的动静。

8.得到别人发来的动静

当一个步调中知道有新动静时,就必要去获打动静内容,通过会见以下的链接:

https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=QfLp+Z+FePzvOFoG&r=1377482079876

上面链接中的参数sid对应上面步调中的值,r为时刻,会见链接必要行使POST方法,Body中包罗JSON串,该JSON串名目如下:

以下的信息中BaseRequest中包罗的Uin与Sid与上面步调中的值对应,SyncKey也是上面步调中得到的同步键值对,rr为时刻,会见乐成之后处事器会返回一个JSON串,个中AddMsgList中是一个数组,包括了全部新动静。

9.向用户发送动静

用户主动发送动静,通过以下的URL地点:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?sid=QfLp+Z+FePzvOFoG&r=1377482079876
上面的sid和r参数不再表明白,会见该URL回收POST方法,在Body中的JSON串形如以下的名目:

个中BaseRequest都是授权相干的值,与上面的步调中的值对应,Msg是对动静的描写,包罗了发送人与吸取人,动静内容,动静的范例(1为文本),ClientMsgId和LocalID由当地天生。rr可用当前的时刻。 在返回JSON功效中BaseResponse描写了发送环境,Ret为0暗示发送乐成。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读