1. 程式人生 > >WEB微信協議詳註(待續)

WEB微信協議詳註(待續)

WEB微信協議詳註 微信機器人

當初寫微信機器人也是為了個紅包,雖然紅包拿到了,過程還是蠻有意思的,下面給下詳細說明。

微信入口主要有兩個(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_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位隨機數

              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/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張成功同步心跳的

            技術分享圖片技術分享圖片



WEB微信協議詳註(待續)