第一步:登陸
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
_:值為當前時間戳
用途:獲取二維碼uuid
3、get訪問
https://wx.qq.com/qrcode/{{uuid}}
用途:下載和展示二維碼
4、掃碼和確認,訪問
https://wx.qq.com/cgi-bin/mmwebwx-bin/login,
get參數
loginicon:值必須為true
uuid:值為{{uuid}}
r:值為當前時間戳/1524
_:值為當前時間戳
用途:返回登陸狀態,登陸成功之后的redirect_uri
返回狀態碼說明如下:
200,掃碼和確認成功
201,掃碼,未確認
其他,未掃碼或者其他原因
第二步、初始化頁面和獲取登陸信息
1、get訪問{{redirect_uri}}
用途:返回登陸認證等信息,一個字典類型的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參數
r:值為當前時間戳
seq:值為0
skey:值為login_info[Skey]
用途:返回所有的好友信息,字典json格式
有用的好友信息字段說明:
Sex:1表示男,2表示女,0為其他【公眾號、群、系統賬號等等】
UserName,微信系統為每個微信號分配一個唯一號碼,開頭@@表示群、字母或者數字開頭表示系統賬號,其他【公眾號、好友等】以單@開頭
NickName,個人設置的昵稱,重復可能性很大
Alias,微信號,如果沒有設置為空,不會出現重復
3.2獲取群組信息(如果不想獲取群組內的人員昵稱、頭像等參數,可以先不用研究)
post訪問 https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?type=ex&r=xxx&lang=zh_CN&pass_ticket=xxx
參數:
參數:
BaseRequest:
{
DeviceID:”xxx”
Sid:”xxx”
Skey:”xxx”
Uin:xxx
}
Count:4
List:
[
0:{UserName: “xxx”, EncryChatRoomId: “”}
1:{UserName: “xxx”, ChatRoomId: “”}
…
]
參數說明:List>UserName就是對應群組的id,群組id是
webwxgetcontact返回的id前綴是@@的。
注意:這個接口
webwxgetcontact你可能是無法獲取群組信息的,究其原因是因為你並沒有將群聊加入通訊錄,只要在微信上,點開你要監聽的群組,然后開啟將群組加入通訊錄就可以了。
第四步、接受和發送新信息
1、接受信息
1)、定時檢查是否有新信息
get參數是:
'r' : 當前時間戳*1000
'skey' : login_info[skey]
'sid' : login_info[sid]
'uin' : login_info[uin]
'deviceid' : login_info[deviceid]
'synckey' : login_info[synckey]
'_' : 當前時間戳*1000
用途:返回最新信息數,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}}
用途:返回最新信息列表
注意:群信息的發送者放在Content開頭部分
2、發送信息
post參數
'BaseRequest': self.base_request,
'Msg': {
'Type': login_info[BaseRequest],
'Content': content,
'FromUserName': 自己的username,
'ToUserName': 發送的username,
'LocalID': login_info[msgid],
'ClientMsgId': login_info[msgid],
},
例子:{"Msg": {"Content": "啊啊啊啊", "ToUserName": "filehelper", "FromUserName": "@974141db55d51041ee1e0b8b6af5589776a5282910b9ac1e154693430a23f79f", "Type": "Test Message", "LocalID": 1485065800472, "ClientMsgId": 1485065800472}, "BaseRequest": {"Ret": 0, "ErrMsg": ""}}
返回發送結果json字典
需要代碼或技術支持可以私聊我QQ:969061664