模擬登陸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字典
   

有錯誤之處,請指教


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM