摘要
微信官方是没有提供个人微信接口的,市面上的接口基本都是通过不正规的方式去实现的,例如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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。