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



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