您的位置 首页 杂谈

WEB微信协议详注(待续)

法眼,旋转罗盘,网王之百里西麟

当初写微信机器人也是为了个红包,虽然红包拿到了,过程还是蛮有意思的,下面给下详细说明。 微信入口主要有两个(wx和wx2),wx老号 wx2新号,我微信是老号了,为了测试方便采用的…

当初写微信机器人也是为了个红包,虽然红包拿到了,过程还是蛮有意思的,下面给下详细说明。

微信入口主要有两个(wx和wx2),wx老号 wx2新号,我微信是老号了,为了测试方便采用的是老号入口。

1.入口抓包,获取uuid

开启浏览器F12功能,对https://wx.qq.com抓包,拿到我们需要的入口地址,获取uuid

参数说明:appid 固定值

redirect_uri 固定值

fun 固定值

lang 固定值

_ 标准时间戳

返回:

window.QRLogin.code = 200; window.QRLogin.uuid = wZ1Pov3CSw==;

这一步拿到uuid,进而uuid拿到登陆用户头像

2.获取二维码

参数说明:

https://login.weixin.qq.com/qrcode/+uuid 其中uuid为上一步获取

此处需注意返回的二维码是jpg图像,在delpgi处理的时候转换处理

3.获取登陆用户头像

参数说明:

loginicon:true 固定值

  1. uuid:wb1sJ27NXA== 上一步拿到的uuid

  2. tip:1 固定值

  3. r:-1747051986 可选,没明白这个是什么

  4. _:1522165474425 时间戳

返回:

window.code=201;window.userAvatar = data:img/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABQODxIPD…….

window.code=200;

window.redirect_uri=https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=Af-yYTSZi-X7h31w_ujkZn_F@qrticket_0uuid=wb1sJ27NXA==lang=zh_CNscan=1522165494;

window.code 登陆状态

201 扫码成功 ,此时可获取登陆用户头像,但是base64编码字符串

200 登陆成功 ,此时需获取ticket,sacn,下一步需要ticket和scan

408 超时

头像处理:

4.获取skey, wxsid, wxuin, pass_ticket

这一步最关键的是要注意返回的cookie信息,得保存cookie信息,后面取好友头像都需要;且需获取skey, wxsid, wxuin, pass_ticket留着下一步用,其中wxsid等同sid,wxuin等同uin

delphi中获取cookie:

5.WEB微信初始化 并且获取最近联系人信息

参数说明:

r 时间戳

DeviceID:e556747131131712 e开头后面为15位随机数

    1. Sid:SnROJhZtphzwfrVN 上一步获取的wxsid

    2. Skey:@crypt_3644f5c5_cda37df8947228dea79115d5353586db 之前获取的skey

    3. Uin:1152509820 上一步中的wxuin

返回:

此处可获取登陆用户的个人信息,其中UserName需保存留做下一步微信初始化;

此处需特别注意synckey这个json串,这个必须得处理,是后面心跳同步必须的参数。且synckey还得处理为这种形式:1_669512273|2_669514056|3_669513917|1000_1521781562。

6.开启微信状态通知

参数说明:

    1. ClientMsgId:1522165487663 时间戳

    2. Code:3固定值

    3. FromUserName:@e89318a6092d99a68ca4884bd194c221 上一步中的username

    4. ToUserName:@e89318a6092d99a68ca4884bd194c221

7.获取全部好友列表

参数说明:

      1. pass_ticket:w%2FAWW%2BCIv6aHWOjucFm%2BS3z2GB7i8cq%2B0GqzGAXZXHCdYzHUEUA96EHdGExvR4rx

      2. r:1522165488107

      3. seq:0 固定值

      4. skey:@crypt_3644f5c5_cda37df8947228dea79115d5353586db

      返回:

      MemberList中包括了好友的一些基本信息,包括好友头像。

      8.获取好友头像

      其中url可以从上一步中的好友列表中获取到,也可以从微信初始化返回串中获取到,只是前者是部分好友,后者是全部好友;但这一步需要提交cookie,具体所需cookie见图

      关于头像格式问题,我好友里面有2种格式jgp和png ,其余的没有,至于上面说的4种格式,是百度的。这一步需要格式转换,当然也可以替换成我们所想看见的头像,比如这样:

      9.开启心跳检测,检测是否有新消息

      这一步中以json提交的参数中最重要的就是synckey,在微信初始化获取的返回值中,url中得处理成1_669514562|2_669515616|3_669515447|1000_1522139642这个样子,但提交的参数中得以json串的形式提交。

      返回:

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

      retcode:0正常

      1100失败/登出微信

      selector:0正常

      2新的消息

      心跳同步中有一机制:第一次提交返回都是2,此时需要再次提交,提交所需的synckey来源于第一次提交后返回的synckey,只有这样才能正确同步。

      10.

      获取心跳检测后新消息

      Request URL:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=eUHDYUDwG/zBTQI5skey=@crypt_3644f5c5_fb23dd323ac02e87c4837e7fbb149a81pass_ticket=fSIBCYjascLrYzTOgnZaQcXSHcMZ3kc0ZCTrx7DQD2oAFdV%252FggeRCPk%252BFnNhCVrL

      Request Method:POST

      sid:eUHDYUDwG/zBTQI5

      skey:@crypt_3644f5c5_fb23dd323ac02e87c4837e7fbb149a81

      pass_ticket:fSIBCYjascLrYzTOgnZaQcXSHcMZ3kc0ZCTrx7DQD2oAFdV%2FggeRCPk%2BFnNhCVrL

      这一步提交需要以json方式且需提交cookie,成功后返回新的消息内容和最为重要的synckey信息。

      ——————————————————-我是分割线————————————————————————

      放2张成功同步心跳的

本文来自网络,不代表加推新闻网立场,转载请注明出处:http://www.bafangmiaomu.com/shehui/98225/

作者: 头条新闻

为您推荐