WEB微信協議詳註(待續)

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

        微信入口主要有兩個(wx和wx2),wx老號   wx2新號,我微信是老號了,爲了測試方便採用的是老號入口。

        1.入口抓包,獲取uuid

           開啓瀏覽器F12功能,對https://wx.qq.com抓包,拿到我們需要的入口地址,獲取uuid          

QQ截圖20180327233428.png

            參數說明:appid                  固定值

                             redirect_uri         固定值

                             fun                      固定值

                             lang                    固定值

                             _                          標準時間戳

            返回:

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

                            這一步拿到uuid,進而uuid拿到登陸用戶頭像

         2.獲取二維碼 

blob.png

          參數說明:

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

   此處需注意返回的二維碼是jpg圖像,在delpgi處理的時候轉換處理

                 blob.png          


        3.獲取登陸用戶頭像          QQ截圖20180327233428.png

                 參數說明:

                               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   超時  

                頭像處理:

                                                           blob.png


                4.獲取skey, wxsid, wxuin, pass_ticket

blob.png blob.png

blob.png


                  這一步最關鍵的是要注意返回的cookie信息,得保存cookie信息,後面取好友頭像都需要;且需獲取skey, wxsid, wxuin, pass_ticket留着下一步用,其中wxsid等同sid,wxuin等同uin

                  delphi中獲取cookie:

                  blob.png

                  5.WEB微信初始化  並且獲取最近聯繫人信息

blob.png

                              參數說明:

                                          r        時間戳

                                         DeviceID:"e556747131131712"                                                                 e開頭後面爲15位隨機數

              1. Sid:"SnROJhZtphzwfrVN"                                                                          上一步獲取的wxsid

              2. Skey:"@crypt_3644f5c5_cda37df8947228dea79115d5353586db"           之前獲取的skey

              3. Uin:"1152509820"                                                                                      上一步中的wxuin

                                 返回:

             blob.png

                      此處可獲取登陸用戶的個人信息,其中UserName需保存留做下一步微信初始化;

                     此處需特別注意synckey這個json串,這個必須得處理,是後面心跳同步必須的參數。且synckey還得處理爲這種形式:1_669512273|2_669514056|3_669513917|1000_1521781562。

                         6.開啓微信狀態通知

blob.png

                                    參數說明:

              1. ClientMsgId:1522165487663                                                        時間戳

              2. Code:3                                                                                            固定值

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

              4. ToUserName:"@e89318a6092d99a68ca4884bd194c221"


                               7.獲取全部好友列表

blob.png 

                            參數說明:

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

            2. r:1522165488107

            3. seq:0                                                              固定值

            4. skey:@crypt_3644f5c5_cda37df8947228dea79115d5353586db

                 返回:

                                                  blob.png

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

            8.獲取好友頭像

            blob.png

            其中url可以從上一步中的好友列表中獲取到,也可以從微信初始化返回串中獲取到,只是前者是部分好友,後者是全部好友;但這一步需要提交cookie,具體所需cookie見圖

            blob.png

            關於頭像格式問題,我好友裏面有2種格式jgp和png ,其餘的沒有,至於上面說的4種格式,是百度的。這一步需要格式轉換,當然也可以替換成我們所想看見的頭像,比如這樣:

            blob.png

            9.開啓心跳檢測,檢測是否有新消息

            blob.png這一步中以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信息。


            blob.png

            -------------------------------------------------------我是分割線------------------------------------------------------------------------

            放2張成功同步心跳的

            blob.pngblob.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章