• 模拟登陆web微信的流程和参数细节


    这几天在用python写了一个模拟登陆web微信,发送和接受信息的程序。发现步骤不多,但需要的参数太多了

    整个过程中,务必保证session、headers、cookie一致,不然的话,中间会出现登陆异常。

    把流程和细节分享出来


    第一步:登陆
    1、get访问微信首页https://wx.qq.com
        提供session、headers
        用途:获取cookie
        后续访问必须带session、headers、cookie这三个参数,并保持不变
    2、get访问https://wx.qq.com/jslogin
        get参数分别是
            appid:值为自定义,格式为wx782c26e4c19acffb
            fun:值为new
            lang:值为en_us
            redirect_uri:值为https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
            _:值为当前时间戳
        完整的URL例子https://wx2.qq.com/jslogin?redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&appid=wx782c26e4c19acffb&lang=en_US&_=1485065568&fun=new
        用途:获取二维码uuid
    3、get访问https://wx.qq.com/qrcode/{{uuid}}
        例子:https://wx2.qq.com/qrcode/AfdK5U5qyw==
        用途:下载和展示二维码
    4、扫码和确认,访问https://wx.qq.com/cgi-bin/mmwebwx-bin/login,
        get参数
            loginicon:值必须为true
            uuid:值为{{uuid}}
            r:值为当前时间戳/1524
            _:值为当前时间戳
        完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=AacJ62nlRg==&tip=0&r=-974452&_=1485065779
        用途:返回登陆状态,登陆成功之后的redirect_uri
        返回状态码说明如下:
            200,扫码和确认成功
            201,扫码,未确认
            其他,未扫码或者其他原因

    第二步、初始化页面和获取登陆信息
    1、get访问{{redirect_uri}}
        完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=A0k1PKCiAX8_8nyisAG0R9d5@qrticket_0&uuid=AacJ62nlRg==&lang=en_US&scan=1485065793
        用途:返回登陆认证等信息,一个字典类型的json格式,下文用login_info表示
    2、post访问https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=【当前时间戳】
        post参数为
            BaseRequest:通过1返回参数获取值
            例子:{"BaseRequest": {"DeviceID": "uKUD8e%2Bp7iXqNpbOuPTntL7OdbsfxEv5JdQjKtb7Mc%2FVQK2leE%2BRrNVkI5fQZZjB", "Sid": "xkQE8IoFPjwXEf2W", "Uin": "575635712", "Skey": "@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324", "isgrayscale": "1"}}
        用途:返回微信用户信息、第一页好友信息、和BaseRequest、最新聊天信息等等


    第三步、获取好友信息
        get访问https://wx.qq.com/webwxgetcontact
        get参数
            r:值为当前时间戳
            seq:值为0
            skey:值为login_info[Skey]
        完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=1485065800&seq=0&skey=@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324
        用途:返回所有的好友信息,字典json格式
        有用的好友信息字段说明:
            Sex:1表示男,2表示女,0为其他【没有设置性别的好友、公众号、群、系统账号等等】
            UserName,微信系统为每个微信号分配一个唯一号码,开头@@表示群、字母或者数字开头表示系统账号,其他【公众号、好友等】以单@开头
            NickName,个人设置的昵称,重复可能性很大
            Alias,微信号,如果没有设置为空,不会出现重复
            
    第四步、接受和发送新信息
    1、接受信息
        1)、定时检查是否有新信息
            get访问https://{{sync_url}}/synccheck
            get参数是:
                'r'        : 当前时间戳*1000
                'skey'     : login_info[skey]
                'sid'      : login_info[sid]
                'uin'      : login_info[uin]
                'deviceid' : login_info[deviceid]
                'synckey'  : login_info[synckey]
                '_'        : 当前时间戳*1000
            完整的URL例子:https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin/synccheck?deviceid=e565817597249768&synckey=List_%5B%7B%27Key%27%3A+1%2C+%27Val%27%3A+645531166%7D%2C+%7B%27Key%27%3A+2%2C+%27Val%27%3A+645531276%7D%2C+%7B%27Key%27%3A+3%2C+%27Val%27%3A+645531125%7D%2C+%7B%27Key%27%3A+1000%2C+%27Val%27%3A+1485058018%7D%5D%7CCount_4&skey=%40crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324&sid=xkQE8IoFPjwXEf2W&r=1485065802608&_=1485065802608&uin=575635712    
            用途:返回最新信息数,0表示没有新消息
        2)、获取新信息内容,post访问https://wx.qq.com/webwxsync?sid=login_info[sid]&skey=login_info[skey]&lang=en_US&pass_ticket=login_info[pass_ticket]
            post参数为
                'BaseRequest' : login_info[BaseRequest]
                'SyncKey'     : login_info[SyncKey]
                'rr'          :~当前时间戳*1000
                例子:{"rr": -1485065809, "BaseRequest": {"Ret": 0, "ErrMsg": ""}, "SyncKey": {"List": [{"Key": 1, "Val": 645531166}, {"Key": 2, "Val": 645531278}, {"Key": 3, "Val": 645531125}, {"Key": 11, "Val": 645531260}, {"Key": 13, "Val": 645524153}, {"Key": 201, "Val": 1485065810}, {"Key": 203, "Val": 1485064747}, {"Key": 1000, "Val": 1485058018}, {"Key": 1001, "Val": 1485057992}, {"Key": 1002, "Val": 1485058221}, {"Key": 1004, "Val": 1484911834}], "Count": 11}}
            完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=xkQE8IoFPjwXEf2W&skey=@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324&lang=en_US&pass_ticket=uKUD8e%2Bp7iXqNpbOuPTntL7OdbsfxEv5JdQjKtb7Mc%2FVQK2leE%2BRrNVkI5fQZZjB
            用途:返回最新信息列表
            注意:群信息的发送者放在Content开头部分
    2、发送信息
        post访问https://wx.qq.com/webwxsendmsg
        post参数
                'BaseRequest': self.base_request,
                'Msg': {
                    'Type': login_info[BaseRequest],
                    'Content': content,
                    'FromUserName': 自己的username,
                    'ToUserName': 发送的username,
                    'LocalID': int(time.time() * 1000 * 1000 * 10),
                    'ClientMsgId': int(time.time() * 1000 * 1000 * 10),
                    },
                'Scene' : 0
            返回发送结果json字典
       

    有错误之处,请指教

  • 相关阅读:
    leetcode165
    leetcode63
    leetcode92
    leetcode86
    捣鼓Haskell
    递归操作链表
    treap(堆树)
    贪心策略 — 分数背包
    LeetCode.21
    LeetCode.94
  • 原文地址:https://www.cnblogs.com/lykops/p/6669905.html
Copyright © 2020-2023  润新知