当初写微信机器人也是为了个红包,虽然红包拿到了,过程还是蛮有意思的,下面给下详细说明。 微信入口主要有两个(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 固定值
返回: 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_0&uuid=wb1sJ27NXA==&lang=zh_CN&scan=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位随机数
返回: 此处可获取登陆用户的个人信息,其中UserName需保存留做下一步微信初始化; 此处需特别注意synckey这个json串,这个必须得处理,是后面心跳同步必须的参数。且synckey还得处理为这种形式:1_669512273|2_669514056|3_669513917|1000_1521781562。 6.开启微信状态通知 参数说明:
7.获取全部好友列表 参数说明:
返回: MemberList中包括了好友的一些基本信息,包括好友头像。 8.获取好友头像 其中url可以从上一步中的好友列表中获取到,也可以从微信初始化返回串中获取到,只是前者是部分好友,后者是全部好友;但这一步需要提交cookie,具体所需cookie见图 关于头像格式问题,我好友里面有2种格式jgp和png ,其余的没有,至于上面说的4种格式,是百度的。这一步需要格式转换,当然也可以替换成我们所想看见的头像,比如这样: 9.开启心跳检测,检测是否有新消息
返回: 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/zBTQI5&skey=@crypt_3644f5c5_fb23dd323ac02e87c4837e7fbb149a81&pass_ticket=fSIBCYjascLrYzTOgnZaQcXSHcMZ3kc0ZCTrx7DQD2oAFdV%252FggeRCPk%252BFnNhCVrL Request Method:POST sid:eUHDYUDwG/zBTQI5 skey:@crypt_3644f5c5_fb23dd323ac02e87c4837e7fbb149a81 pass_ticket:fSIBCYjascLrYzTOgnZaQcXSHcMZ3kc0ZCTrx7DQD2oAFdV%2FggeRCPk%2BFnNhCVrL 这一步提交需要以json方式且需提交cookie,成功后返回新的消息内容和最为重要的synckey信息。 -------------------------------------------------------我是分割线------------------------------------------------------------------------ 放2张成功同步心跳的 |
|