# wxMaster
**Repository Path**: qihai/wxMaster
## Basic Information
- **Project Name**: wxMaster
- **Description**: wxMaster是电脑版微信客户端的自动化框架,你可以用任何编程语言通过HTTP协议调用wxMaster框架的API接口,实现微信自动收发消息。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 7
- **Created**: 2025-04-09
- **Last Updated**: 2025-04-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# wxMaster
wxMaster是电脑版微信客户端的自动化框架,你可以用任何编程语言通过HTTP协议调用wxMaster框架的API接口,实现微信自动收发消息。
wxMaster是面向开发者的,框架仅提供API功能接口,业务逻辑需要你用编程实现。
# 核心功能
**个人微信自动化 + 任意语言HTTP方式调用API接口 + 安全不封号**
# 实现功能
1. 采用安全合规的 UIAutomation 技术对PC版微信客户端实现自动化。
2. 以下所有功能提供HTTP协议API接口。
3. 获取、发送私聊消息。
4. 获取、发送群聊消息。
5. 获取、发送图片消息。
6. 获取语音转文字消息。
7. 获取指定联系人指定条数历史消息。
8. 获取通讯录全部联系人。
9. 获取群成员列表。
10. 微信转账自动收款。
# 如何开始
1. [下载并启动wxMaster.exe](https://gitee.com/xzhinet/wxMaster/raw/main/wxMaster.exe)
2. 用任何编程语言编写业务逻辑。
# 安全愿景
市面上大部分个人微信机器人都采用HOOK和协议实现,HOOK和协议最致命的缺点就是**易封号**,为了解决易封号的问题,wxMaster应运而生。
wxMaster采用了多种技术防止封号,包括采用安全合规的UIAutomation技术完全模拟人工操作、完整的鼠标移动路径、随机点击位置等。
# 注意事项
- 本框架会控制鼠标对微信进行操作,适合全自动挂机运行。
- 调用API接口时,由于某些接口会消耗较长时间,所以请设置合适的超时时长。
# 微信版本
`3.9.12.51`
>暂不支持4.0版本
# API接口
## 通用
- **说明**
所有接口都按照此通用格式返回,不同接口的 `resultContent` 值不同。
- **http地址**
`http://127.0.0.1:34567`
>其中 `34567` 是默认端口,允许用户自定义。
- **请求方式**
`postMsgText` 为 `POST` 方式,其余均为 `GET` 方式。
- **返回类型**
`json`
- **返回**
| 键 | 类型 | 示例 | 说明 |
| :---: | :---: | :---: | :---: |
| resultCode | 整数 | 1 | 代码。1表示成功,其它表示失败 |
| resultMsg | 字符串 | success | 成功时为success,失败时为失败原因 |
| resultContent | json对象 / json数组 | \{...\} / [] | 接口返回值。不同接口返回值不同 |
- **返回示例**
```
{
"resultCode": 1,
"resultMsg": "success",
"resultContent": {...}
}
```
## findWxWindow
- **api**
`http://127.0.0.1:34567/findWxWindow`
- **功能**
查找所有微信窗口。
后续的所有操作都需要提供此接口返回的**窗口句柄hwnd**。
- **参数**
无
- **resultContent**
返回类型:数组。
数组内每一个元素对应一个微信窗体(微信账号)。
| 键 | 类型 | 示例 | 说明 |
| :---: | :---: | :---: | :---: |
| accountNick | 字符串 | "昵称1" | 昵称 |
| hwnd | 整数 | 111111 | 微信窗口句柄 |
- **返回示例:**
```json
{
"resultCode": 1,
"resultMsg": "success",
"resultContent": [
{
"accountNick": "昵称1",
"hwnd": 111111
},
{
"accountNick": "昵称2",
"hwnd": 222222
}
]
}
```
## getNewMsgAll
- **API**
`http://127.0.0.1:34567/getNewMsgAll?hwnd=111111&getImage=0&getVoice=0`
- **功能**
获取全部新消息,包括私聊消息和群聊消息。
轮询此接口可获取新消息。为尽量保证账号安全,轮询间隔不要低于5秒。
**免打扰**消息不会被获取。
如果getImage=1,则图片会被保存到 ` \微信图片\ ` 目录下,同时 `content` 内容为图片路径。
>自己发送的消息不会被获取。
>被排除的发送人:订阅号、公众号、微信支付、微信团队、服务通知、文件传输助手、小程序客服消息
- **参数**
| 参数 | 必须 | 默认 | 示例 | 说明 |
| :---: | :---: | :---: | :---: | :---: |
| hwnd | 是 | 无 | 111111 | 被获取消息的微信窗口句柄 |
| getImage | 否 | 0 | 1 | 是否获取并保存图片。
1:是
0:否 |
| getVoice | 否 | 0 | 0 | 是否获取语音转文本消息。
1:是
0:否 |
- **resultContent**
>如果没有新消息,返回的resultContent会是一个空数组:[]
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| from | 张三 / 群聊名称 | 消息来源。
好友昵称,或群聊名称 |
| list | [...] | 消息数组。
按时间先后排序,最近的消息在最前面 |
| type | text
image
voice
wxhb
wxzz
video
file
link
mp
map
emoji
other | 消息类型。
text:文本消息
image:图片
voice:语音
wxhb:微信红包
wxzz:微信转账
video:视频
file:文件
link:链接
mp:小程序
map:地图位置
emoji:动画表情
other:无法识别的消息 |
| sender | 张三 | 发送人昵称 |
| content | 我是消息内容 | 消息内容。
text:文本消息内容
image:图片路径
voice:语音转文字 |
- **wxzz**
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| amount | ¥100.00 | 转账金额 |
| remark | 转账说明1 | 转账说明 |
- **返回示例**
```json
{
"resultCode": 1,
"resultMsg": "success",
"resultContent": [
{
"from":"张三",
"list":[
{
"type": "text",
"sender": "张三",
"content": "这是消息内容"
},
{
"type": "image",
"sender": "张三",
"content": "\\微信图片\\2025-01-02_03-04-05_123.jpg"
},
{
"type": "voice",
"sender": "张三",
"content": "这是语音转文字消息内容"
}
]
},
{
"from":"群聊1",
"list":[
{
"type": "text",
"sender": "张三",
"content": "这是消息内容"
},
{
"type": "image",
"sender": "李四",
"content": "\\微信图片\\2025-01-02_03-04-05_123.jpg"
},
{
"type": "voice",
"sender": "王二麻子",
"content": "这是语音转文字消息内容"
}
]
}
]
}
```
## getMsgNick
- **API**
`http://127.0.0.1:34567/getNewMsgNick?hwnd=111111&nick=昵称1&count=20&getImage=1&getVoice=0`
- **功能**
获取指定联系人指定条数的历史消息。
- **参数**
| 参数 | 必须 | 默认 | 示例 | 说明 |
| :---: | :---: | :---: | :---: | :---: |
| hwnd | 是 | 无 | 111111 | 被获取消息的微信窗口句柄 |
| nick | 是 | 无 | 昵称1 | 被获取消息的好友昵称或群聊名称 |
| count | 否 | 0 | 20 | 获取历史消息的条数。
不指定则获取1页所有消息,大约40个。 |
| getImage | 否 | 0 | 1 | 是否获取并保存图片。
1:是
0:否 |
| getVoice | 否 | 0 | 0 | 是否获取语音转文本消息。
1:是
0:否 |
- **resultContent**
>resultContent是一个数组类型:[]
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| type | text
image
voice
wxhb
wxzz
video
file
link
mp
map
emoji
other | 消息类型。
text:文本消息
image:图片
voice:语音
wxhb:微信红包
wxzz:微信转账
video:视频
file:文件
link:链接
mp:小程序
map:地图位置
emoji:动画表情
other:无法识别的消息 |
| sender | 张三 | 发送人昵称 |
| content | 我是消息内容 | 消息内容。
text:文本消息内容
image:图片路径
voice:语音转文字 |
- **返回示例**
```json
{
"resultCode": 1,
"resultMsg": "success",
"resultContent": [
{
"type": "text",
"sender": "张三",
"content": "我是消息内容"
},
{
"type": "image",
"sender": "张三",
"content": "\\微信图片\\2025-01-02_03-04-05_123.jpg"
},
{
"type": "voice",
"sender": "张三",
"content": "这是语音转文字消息内容"
}
]
}
```
## getContactsFriends
- **API**
`http://127.0.0.1:34567/getContactsFriends?hwnd=111111`
- **功能**
获取通讯录全部好友。不包含群聊。
- **参数**
| 参数 | 必须 | 示例 | 说明 |
| :---: | :---:| :---: | :---: |
| hwnd | 是 | 111111 | 被获取的微信窗口句柄 |
- **resultContent**
>resultContent是一个数组类型:[]
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| nick | 张三 | 好友昵称 |
| remark | 备注名 | 好友备注 |
| label | 标签 | 好友标签 |
- **返回示例**
```
{
"resultCode":1,
"resultMsg":"success",
"resultContent":[
{
"nick":"昵称1",
"remark":"备注1",
"label":"标签1"
},
{
"nick":"昵称2",
"remark":"备注2",
"label":"标签2"
}
]
}
```
## getContactsGroups
- **API**
`http://127.0.0.1:34567/getContactsGroups?hwnd=111111`
- **功能**
获取通讯录全部群聊。
- **参数**
| 参数 | 必须 | 示例 | 说明 |
| :---: | :---: | :---: | :---: |
| hwnd | 是 | 111111 | 被获取的微信窗口句柄 |
- **resultContent**
>resultContent是一个数组类型:[]
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| name | 群名1 | 群聊的名称 |
| count | 50 | 群成员总数 |
- **返回示例**
```
{
"resultCode":1,
"resultMsg":"success",
"resultContent":[
{
"name":"群名1",
"count":"50"
},
{
"name":"群名2",
"count":"60"
}
]
}
```
## getGroupMembers
- **API**
`http://127.0.0.1:34567/getGroupMembers?hwnd=111111&groupName=群聊名1`
- **功能**
获取群成员。
- **参数**
| 参数 | 必须 | 示例 | 说明 |
| :---: | :---: | :---: | :---: |
| hwnd | 是 | 111111 | 被获取的微信窗口句柄 |
| groupName | 是 | 群聊名1 | 被获取的群名称 |
- **resultContent**
>resultContent是一个数组类型:[]
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| nick | 张三 | 群成员的微信昵称 |
| groupNick | 张三2 | 群成员的群昵称 |
- **返回示例**
```
{
"resultCode":1,
"resultMsg":"success",
"resultContent":[
{
"nick":"张三",
"groupNick":"张三2"
},
{
"nick":"李四",
"groupNick":"李四2"
}
]
}
```
## postMsgText
- **API**
`http://127.0.0.1:34567/postMsgText?hwnd=111111&nick=昵称或群名称`
- **功能**
给好友或群发送文字消息。
- **请求方式**
`POST`
- **参数**
| 参数 | 必须 | 示例 | 说明 |
| :---: | :---: | :---: | :---: |
| hwnd | 是 | 111111 | 微信窗口句柄 |
| nick | 是 | 昵称或群名称 | 好友昵称或群聊名称 |
| [postData] | 是 | 这是文字消息内容 | post内的所有数据将被发送 |
>如果postData的数据里包含回车换行,需要将微信客户端的发送消息快捷键修改为 `Ctrl + Enter` ,否则会被回车拆分为多条消息。
>修改方法:微信客户端左下角三横线 -> 设置 -> 快捷键 -> 发送消息 -> `Ctrl + Enter`
- **resultContent**
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| resultCode | 1 | 1表示发送成功,其它代表失败 |
| resultMsg | success | 成功时为success,失败时为失败原因 |
- **返回示例**
```
{
"resultCode":1,
"resultMsg":"success",
"resultContent":{}
}
```
## sendMsgImage
- **API**
`http://127.0.0.1:34567/sendMsgImage?hwnd=111111&nick=昵称或群名称&path=D:\img\1.jpg`
- **功能**
给好友或群发送图片消息。
- **参数**
| 参数 | 必须 | 示例 | 说明 |
| :---: | :---: | :---: | :---: |
| hwnd | 是 | 111111 | 微信窗口句柄 |
| nick | 是 | 昵称或群名称 | 好友昵称或群聊名称 |
| path | 是 | D:\img\1.jpg | 要发送的图片的完整路径
支持格式:.png .jpg .bmp .gif |
- **resultContent**
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| resultCode | 1 | 1表示发送成功,其它代表失败 |
| resultMsg | success | 成功时为success,失败时为失败原因 |
- **返回示例**
```
{
"resultCode":1,
"resultMsg":"success",
"resultContent":{}
}
```
## transferReceive
- **API**
`http://127.0.0.1:34567/transferReceive?hwnd=111111&nick=好友昵称`
- **功能**
微信转账收款。查询是否有转账未被接收,如果有则自动收款。
>调用逻辑:如果用 `getNewMsgAll` 接口获取到有新的微信转账,再调用此接口自动收款。
- **参数**
| 参数 | 必须 | 示例 | 说明 |
| :---: | :---: | :---: | :---: |
| hwnd | 是 | 111111 | 微信窗口句柄 |
| nick | 是 | 好友昵称 | 好友的昵称 |
- **result**
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| resultCode | 1 | 1表示成功自动收款,其它代表失败 |
| resultMsg | success | 成功时为success,失败时为失败原因 |
| resultContent | [...] | 数组类型
如果收款成功,数组内每个元素对应一条收款信息 |
- **resultContent**
| 键 | 示例 | 说明 |
| :---: | :---: | :---: |
| amount | ¥100.00 | 收款金额 |
| remark | 转账说明1 | 转账说明 |
- **返回示例**
```
{
"resultCode":1,
"resultMsg":"success",
"resultContent":[
{
"amount":"¥100.00",
"remark":"转账说明1"
},
{
"amount":"¥888.88",
"remark":"转账说明2"
}
]
}
```