zoukankan      html  css  js  c++  java
  • 微信网页版分析

    去年有写过一个微信好友提取的单子,因为需求简单,只要扫码登录,然后提取好友就可以了,所以只是简单分析了登录和获取好友,昨天没事儿了,突然想起,心血来潮,就好好分析一下,今天把昨天的一些东西分享出来,供新手学习,也供自己以后参阅,有不对的地方还望指正,大家一起交流。

    第一步:获取uuid ,获取二维码图片要用到uuid

    请求地址:https://login.wx.qq.com/JSlogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1496243303714

    请求方式:GET
    参数说明:appid是固定的  末尾是13位时间戳。
    返回结果:window.QRLogin.code = 200; window.QRLogin.uuid = "4ZgGhinzAQ==";
                      code 200说明获取成功,code还可能有其他值,例如你把appid改一下,就400了
    第二步:获取二维码图片
    请求地址:https://login.weixin.qq.com/qrcode/4ZgGhinzAQ==
    参数说明:红色部分就是uuid
    请求方式:GET
    返回结果:返回的字节集就是二维码图片
    第三步:监测二维码状态
    请求地址:https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=4ZgGhinzAQ==&tip=0&r=-1594710725&_=1496243303716
    请求方式:GET
    参数说明:uuid就不说了吧,
                     r=-1594710725,我一开始以为这是一串随机数,但是后来发现不对了,随机的那么有规律?
                    先声明,这个r貌似不会检测,我测试不动他也能提交成功,如果嫌麻烦的朋友可以不看下边

                     

    查询了一番后,发现是在JS里生成的, ~new date 意思是现行时间戳按位取反,就是把10位的时间戳,转成2进制,例如01010101这样的形式,然后把0变成1,把1变成0,然后转到10进制...... 凭咱这水平,不理解为啥要搞成这样比样......当然,我也不想用易语言代码来实现这个算法,直接用JS实现就好了。

                  
    易语言中用精易模块类_脚本组件调用是这样的

    js.属性_语言 ()
    js.添加代码 (“function r(){return ~new Date;}”)
    r = js.运行 (“r”)
    返回 (r)

    返回结果:window.code=值;根据code的值不同,后边跟不同的返回。
                     其中 code为201时,说明已经扫码,返回了头像
                       
    头像图片不是字节集形式返回,而是一串BASE64编码后的文本,只需要BASE64解码就是图片了,解码的部分不包含 data:img/jpg;base64,这个头部,是从/9j/4AA这里开始。
                   code为200时,说明在微信点击了确认登录。这时就可以下一步登录获取Cookie了。
                   code为408时,说明用户未操作。
                   code为400时,说明二维码图片失效,其实就是uuid失效,需要重新获取uuid然后获取新的二维码。
    中午了,下午继续哈。
    第四步:登录获取Cookie
    请求地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=Aalw0U65XU6KO33A8RfEolE7@qrticket_0&uuid=gexAchtPIg==&lang=zh_CN&scan=1496224825&fun=new&version=v2
    请求方式:GET
    参数说明:这个请求地址是在第三步返回的,就是当第三步的code值为200时,返回里有这个请求地址,后边加上&fun=new&version=v2
    返回结果:返回里包含了skey、wxsid、wxuin、pass_ticket,这一步里返回了cookie,只需要取这一步的cookie即可。
    第五步:微信初始化  webwxinit
    请求地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-1576180982&pass_ticket=DoM2E5MFa0eoTTAi3b8tJbb0SgSkl%252FzNvNmeyatVe8T6jmv60Y6rZYSQMbVUTk2O
    请求方式:post
    参数说明:r在前边说过了,pass_ticket是上一步返回的
    提交数据:{"BaseRequest":{"Uin":"1107650341","Sid":"GlxIgMdgxgOKmEta","Skey":"@crypt_32e81ea3_7ff722a516ae3548a31ce49c7e0a0007","DeviceID":"e748606750801212"}}
    标准的JSON,Uin、Sid、Skey、都在上一步有了,DeviceID是e后边加15位随机数,在JS中的实现如图
    <ignore_js_op> 
    返回结果:返回JSON文本,里边包含了UserName和SyncKey,在后边会用到
    第六步:获取微信通讯录 
    请求地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?pass_ticket=DoM2E5MFa0eoTTAi3b8tJbb0SgSkl%252FzNvNmeyatVe8T6jmv60Y6rZYSQMbVUTk2O&r=1496224888208&seq=0&skey=@crypt_32e81ea3_7ff722a516ae3548a31ce49c7e0a0007
    请求方式:GET
    参数说明:都是之前说过的
    返回结果:标准的JSON文本,包含了微信号的好友、群、公众号。群是要保存到通讯录里的群,这里才会提取到,并不是提取你加入的所有群。
                     我的微信好友是129,公众号56,这样加起来是185,保存到通讯录的群是2个,这样是187,但是结果是190 ,我看了一下,190个里包含了自己,这样就是188个,还有2个是文件传输助手微信支付。
    未完待续.....................

  • 相关阅读:
    数字式频率计数器的选择
    频率计数器简介
    地铁时钟系统介绍
    铷原子时钟基准介绍
    GPS网络校时服务器厂家的选择?
    低频数字式相位测试仪的原理与使用
    如何选择一套网络时钟系统?
    GNSS卫星信号转发器应用与原理
    GPS卫星原子钟和原子频标介绍
    如何检定铷原子频率标准?
  • 原文地址:https://www.cnblogs.com/microWhite/p/6930364.html
Copyright © 2011-2022 走看看