微信通讯协议。让自己的程序衔接微信

admin 5个月前 ( 03-27 14:58 ) 0条评论
摘要: 微信网页版的通信协议,很多人都想自己写了个程序,实现微信的登录、初始化、读取联系人列表、发送微信、接收微信等功能。...

微信网页版的通信协议,许多人都想自己写了个程序,完结微信的登录、初始艺术相片化、读取联系人selaoer列表、发送微信、接纳微信等功能,其实咱们在网上看一下也有不少人做过这方面的内容。我主要用的东西是HTTPAnalyzer,我以为这个是现在剖析http/https协议最好用的东西了,比wireshark和fiddler都明晰明确,引荐咱们剖析http/https协议内容运用这个东西。其实剖析了协议自己再写代码就很简单了。

自己开发程序来收发微信,整个流程根本如下:

1、获取会话UUID

微信Web版别不运用用户名和暗码登录,而是选用扫描二维码登录,所以服务器需求首要分配一个仅有的会话ID,用来标识当时的一次登录。

运用get办法,经过恳求地址:https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&fun=new&lang=zh_CN&_=时刻戳

其间,时刻戳这个值是当时刻隔林威治标准时刻的毫秒。

get成功,则回来:window.QRLogin.code = 200; window.QRLogin.uuid = "XXXXXXX"

其间的XXXXXXX便是咱们需求的uuid

2、获取登录二维码

拜访网址:https://login.weixin.qq.com/qrcode/XXXXXX

这儿的XXXXXXX便是咱们方才获取的uuid,这个网址直接显现的便是二维码

3、查询是否扫描二维码登录

显现了二维码今后,用户有必要用手机微信扫描这个二维码才干登录。(有人会说微信为啥要这么规划?很古怪的思想。我用电脑许多状况不便是因为微信通讯协议。让自己的程序联接微信手机没在周围吗。其实是因为安全的考虑)

运用get办法,查询地址:https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=XXXXXX&tip=1&_=时刻戳

这儿的XXXXXX是咱们方才获取的uuid,时刻戳同上。tip在第一次获取时应为1,这个数是每次查询要变的。

假如服务器回来:window.code=201,则阐明此刻用户在手机端现已完结扫描,但还没有点击承认,持续运用上面的地址查询,但tip要变成0;

假如服务器回来:

window.code=200

window.redirect_uri="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

则阐明此刻用户在手机端现已承认登录,window.redirect_uri=后边的这个网址要记下来,接着要拜访这个地址。

假如服务器回来:window.code=408,则阐明等候超时,持续运用上面的地址查询,但tip=1

4、拜访登录地址,取得uin、sid、pass_ticket、skey

用get办法,拜访在上一过程取得拜访地址,并在参数后边加上:&fun=new,会回来一个xml格局的文本,相似这样:

0

OK

xxx

xxx

xxx

xxx

1

把这儿的wxuin,wxsid,skey,pass_ticket都记下来,这是重要数据。

5、微信初始化

这个是很重要的一步,我在这个过程折腾了好久。。。

要运用POST办法,拜访地址:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=时刻戳&lang=ch_ZN&pass_ticket=XXXXXX

其间,时刻戳不必解说,pass_ticket是咱们在上面获取的一长串字符。

POST的内容是个json串,{"BaseRequest":{"Uin":"XXXXX斗破天地龙王求亲请排队XXX","Sid":"XXXXXXXX","Skey":XXXXXXXXXXXXX","DeviceID":"e123456789012345"}}

uin、sid、skey别离对应上面过程4获取的字符串,DeviceID是e后边跟着一个15字节的随机数。

程序里边要留意运用UTF8编码办法。

POST成功,则服务器回来一个很长的JSON串,格局是这样:

{

"BaseResponse": {

"Ret": 0,

"ErrMsg": ""

},

"Count": 8,

"ContactList": [...],

"SyncKey": {

"Count": 4,

"List": [

{

"Key": 1,

"Val": 635705559

},

...

]

},

"User": {

"Uin": xxx,

"UserName": xxx,

"NickName": xxx,

"HeadImgUrl": xxx,

"RemarkName": "",

"PYInitial": "",

"PYQuanPin": "",

"RemarkPYInitial": "",

"RemarkPYQuanPin": "军部蜂后方案",

"HideInputBarFlag": 0,

"StarFriend": 0,

"Sex": 1,

"Signature": "Apt-get instal阿喜妹l B",

"AppAccountFlag": 0,

"VerifyFlag": 0,

"ContactFlag": 0,

"WebWxPluginSwitch": 0,

"HeadImgFlag": 1,

"SnsFlag": 17

},

"Ch复仇祸患atSet": xxx,

"SKey": xxx,

"ClientVersion": 369297683,

"SystemTime": 1453124908,

"GrayScale": 1,

"InviteStartCount": 40,

"MPSubscribeMsgCount": 2,

"MPSubscribeMsgList": [...],

"ClickReportInterval": 600000

}

这其间,User里边是自己的信息,UserName是用户名,NickName是昵称。要留意UserName是每次都会变的。。。也便是说,获取不到仅有的不变标识表明身份,无语。。。SyncKey一般是塞穴4个,要记下这儿的Key和val,后边每次收信息都要用。至于count和contactList先不必管。

6、获取老友列表

运用POST办法,拜访:冷情首富魅全国https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=时刻戳

POST的内容为空。成功则以JSON格局回来一切联系人的信息。微信通讯协议。让自己的程序联接微信格局相似:

{

"BaseResponse": {

"Ret": 0,

"ErrMsg": ""

},

"Memb何浩明保健按摩机erCount": 21,

"MemberList": [

{

"Uin": 0,

"UserName": xxx,

"NickName": "Urinx",

"HeadImgUrl": xxx,

"ContactFlag": 3,

"MemberCount": 0,

"MemberList": [],

"RemarkName": "",

"HideInputBarFlag": 0,

"Sex": 0,

"Signature": "xxxx",

"VerifyFlag": 8,

"OwnerUin": 0,

"PYInitial": "URINX",

"PYQuanPin": "Urinx",

"RemarkPYInitial": "",

"RemarkPYQuanPin": "",

"StarFriend": 0,

"AppAccountFlag": 0,

"Statues": 威斯欧0,

"一女多夫AttrStatus": 0,

"Province": "",

"City": "",

"Alias": "Urinxs",

"SnsFlag": 0,

"UniFrie詹子麟nd": 0,

"DisplayName": "",

"ChatRoomId": 0,

"KeyWord": "gh_",

"EncryChatRoomId": ""

},

...

],

"Seq": 0

}

其间,MemberCount表明总共有多少联系人,里边的内容都比较明晰。

7、敞开微信状况告诉

用POST办法,拜访:https://wx.qq.com/cgi-bin/mmwebwx-bin茜斯安/webwxstatusnotify

POST的内容是JSON春之望串,格局:

{

BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },

Code: 3,

FromUserName: 自己ID,

ToUserName: 自己ID,

ClientMsgId: 时刻戳

}

8、心跳包,与服微信通讯协议。让自己的程序联接微信务器同步并获取状况

以上过程完结今后,就能够进入收发微信的循环了,能够用线程办法发送心跳包。

运用get办法,设置超时为60秒,拜访:https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin/synccheck?sid=XXXXXX&uin=XXXXXX&synckey=XXXXXX&r=时刻戳&skey=XXXXXX&deviceid=XXXXXX&_=时刻戳

其他几个参数不必解说,这儿的synckey需求说一下,前面的过程获取的json串中有多个key信息,需求把这些信息拼起来,key_val,中心用|切割,相似这样:

1_微信通讯协议。让自己的程序联接微信652651920|2_652651939|3_652651904|1000_0

服务器回来:window.synccheck={retcode:”0”,selector:”0”}

retcode为0表明成功,selecjperoticator为2和6表明有新信息。4表明大众号新信息。

9、读取新信息

检测到有信息今后,用POST办法,拜访:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=XXXXXX&skey=XXXXXX

POST的内容:

{"BaseRequest" : {"DeviceID":"XXXXXX,"Sid":"XXXXXX", "Skey":"XXXXXX", "Uin":"XXXXXX"},"SyncKey" : {"Count":4,"List":[{"Key":1,"Val":652653204},{"Key":2,"Val":652653674},{"Key":3,"Val":652653544},{"Key":1000,"Val":0}]},"rr" :时刻戳}

留意这儿的SyncKey格局,参阅前面的阐明。

恳求成功之后服务器会返龙珠h回一个JSO微信通讯协议。让自己的程序联接微信N串,其间AddMsgCount表明有多少信息,AddMsgList中是一个数组,包含了一切新消息,里边的MsgType表明信息类型,Content便是信息内容。

留意again,回来的信息中,会有新的synckey,要更新这个内容,下次获取信息拜访要用这个新的key。

10、发送信息

这个比较简单,用POST办法,拜访:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg

POST的圣皇衍天诀仍是json格局,相似这样:

{"Msg":{"Type":1,"Content":"测验信息","FromUse微信通讯协议。让自己的程序联接微信rName":"XXXXXX名伦神峰顶","ToUserName":"XXXXXX","LocalID":"时刻戳","ClientMsgId":"时刻戳"},"BaseRequest":{"Uin":"XXXXXX","Sid":"XXXXXX","Skey":"XXXXXX","DeviceID":"XXXXXX"}}微信通讯协议。让自己的程序联接微信

这儿的Content是信息内容,LocalID和ClientMsgId都用当时时刻戳。

以上便是根本的微五福生菌肥信收发流程了。参阅这个,能够自己去开发其他相关内容

文章版权及转载声明:

作者:admin本文地址:http://www.enkura.com/articles/562.html发布于 5个月前 ( 03-27 14:58 )
文章转载或复制请以超链接形式并注明出处库里疯狂三分集锦