當(dāng)初寫微信機器人也是為了個紅包,雖然紅包拿到了,過程還是蠻有意思的,下面給下詳細(xì)說明。 微信入口主要有兩個(wx和wx2),wx老號 wx2新號,我微信是老號了,為了測試方便采用的是老號入口。 1.入口抓包,獲取uuid 開啟瀏覽器F12功能,對https://wx.qq.com抓包,拿到我們需要的入口地址,獲取uuid 參數(shù)說明:appid 固定值 redirect_uri 固定值 fun 固定值 lang 固定值 _ 標(biāo)準(zhǔn)時間戳 返回: window.QRLogin.code = 200; window.QRLogin.uuid = "wZ1Pov3CSw=="; 這一步拿到uuid,進而uuid拿到登陸用戶頭像 2.獲取二維碼 參數(shù)說明: https://login.weixin.qq.com/qrcode/+uuid 其中uuid為上一步獲取 此處需注意返回的二維碼是jpg圖像,在delpgi處理的時候轉(zhuǎn)換處理 3.獲取登陸用戶頭像 參數(shù)說明: 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 登陸狀態(tài) 201 掃碼成功 ,此時可獲取登陸用戶頭像,但是base64編碼字符串 200 登陸成功 ,此時需獲取ticket,sacn,下一步需要ticket和scan 408 超時 頭像處理: 4.獲取skey, wxsid, wxuin, pass_ticket
這一步最關(guān)鍵的是要注意返回的cookie信息,得保存cookie信息,后面取好友頭像都需要;且需獲取skey, wxsid, wxuin, pass_ticket留著下一步用,其中wxsid等同sid,wxuin等同uin delphi中獲取cookie: 5.WEB微信初始化 并且獲取最近聯(lián)系人信息 參數(shù)說明: r 時間戳 DeviceID:"e556747131131712" e開頭后面為15位隨機數(shù)
返回: 此處可獲取登陸用戶的個人信息,其中UserName需保存留做下一步微信初始化; 此處需特別注意synckey這個json串,這個必須得處理,是后面心跳同步必須的參數(shù)。且synckey還得處理為這種形式:1_669512273|2_669514056|3_669513917|1000_1521781562。 6.開啟微信狀態(tài)通知 參數(shù)說明:
7.獲取全部好友列表 參數(shù)說明:
返回: MemberList中包括了好友的一些基本信息,包括好友頭像。 8.獲取好友頭像 其中url可以從上一步中的好友列表中獲取到,也可以從微信初始化返回串中獲取到,只是前者是部分好友,后者是全部好友;但這一步需要提交cookie,具體所需cookie見圖 關(guān)于頭像格式問題,我好友里面有2種格式j(luò)gp和png ,其余的沒有,至于上面說的4種格式,是百度的。這一步需要格式轉(zhuǎn)換,當(dāng)然也可以替換成我們所想看見的頭像,比如這樣: 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,成功后返回新的消息內(nèi)容和最為重要的synckey信息。 -------------------------------------------------------我是分割線------------------------------------------------------------------------ 放2張成功同步心跳的 |
|