摘要
微信官方是沒有提供個人微信接口的,市面上的接口基本都是通過不正規的方式去實現的,例如Web協議、微信HOOK、iPad協議、Android協議。這些所謂的協議,要麼是抓包HTTP協議,要麼是通過HOOK技術實現的給予內存數據劫持實現的。
| 接口技術 | 描述 |
|---|---|
| Web協議 | 基於網頁版微信HTTP接口實現的 |
| 微信HOOK | 基於電腦版微信的內存劫持 |
| iPad協議 | 基於iPad版微信逆向API |
| Android協議 | 基於Android微信Xposed框架HOOK |
Web協議
在這麼多協議中,Web協議的實現比較經濟,技術要求也極低,因為有很多的現成的庫。在前幾年,都有很多著名的Web微信協議的Python庫,例如itchat、Wxpy、WeixinBot,都是可以直接用的。
但是,早在2017年開始,微信網頁版就已經住逐漸開始停止登錄,以為了保障你的賬號安全為由引導你使用電腦版微信,因此這些庫可以説是不可用了。
但是,現在有了新的方法,那就是可以登錄網頁版微信了,既然可以登錄,那麼就可以獲得一些關鍵的參數值,就可以使用這些參數值去請求這個Web微信的API。
具體請閲讀這篇文章即可讓你微信登錄網頁版:https://segmentfault.com/a/1190000044931999
發送消息的示例
import requests
import json
import random
import time
def generate_device_id():
return "e" + "".join(str(random.randint(0, 9)) for _ in range(15))
url = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg"
headers = {
"Content-Type": "application/json;charset=UTF-8",
'Cookie': 'web微信的Cookie', # 自己去抓包獲取(無需完整的,只需要 psrf_qqopenid 前這一段)
"Host": "wx2.qq.com",
"Origin": "https://wx2.qq.com",
"Referer": "https://wx2.qq.com/?target=t",
"client-version": "2.0.0"
}
data = {
"BaseRequest": {
"Uin": "自己去抓包獲取", #(一般是固定的,重新登錄後不變)
"Sid": "自己去抓包獲取", #(重新登錄後會變)
"Skey": "自己去抓包獲取",#(重新登錄後會變)
"DeviceID": generate_device_id()
},
"Msg": {
"Type": 1, # 消息類型,1表示文本消息
"Content": 'hahaha123456', # 消息內容
"FromUserName": "自己去抓包獲取", # 發送用户(重新登錄後會變)
"ToUserName": "自己去抓包獲取", # 接收用户(重新登錄後會變)
"LocalID": str(int(time.time() * 1000)), # 使用當前時間戳生成唯一 ID(自動生成)
"ClientMsgId": str(int(time.time() * 1000)) + str(random.random())[2:6] # 使用當前時間戳生成唯一 ClientMsgId(自動生成)
}
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.text)
關鍵參數
Cookie:
Uin
Sid
Skey
DeviceID
FromUserName
ToUserName
LocalID
ClientMsgId
如何獲取這些參數?
首先,登錄Web微信後,F12打開控制枱,清空請求記錄,微信發送一條消息出去,查看下面截圖這個請求記錄,就可以抓到這些參數值。
然後Cookie是無需使用完整的,只需要 wxopenid=; 之前這一段即可。
使用感受
經過一個月使用,安全穩定可靠,只要你的Web微信不掉線,那麼就可以用了,可以將你的Web微信掛在Windows服務器上,我試過7天不掉線。
本文作者
TANKING