如何控制企业微信

在GitHub上有一个项目叫《vworkApi》它是基于PC端的企业微信HOOK封装的、REST风格的接口,开发者可通过HTTP轻松调用。可进行二次开发,实现微信机器人、群管理等强大的功能!

GitHub地址:https://github.com/mrsanshui/vworkApi
码云地址:https://gitee.com/mrsanshui/vworkApi

项目目录结构如下

在这里插入图片描述

先封装一个获取企微版本号的函数

import winreg

def get_wx_version():
    """获取微信版本号"""

    try:
        with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Tencent\WXWork", 0, winreg.KEY_READ) as key:
            return winreg.QueryValueEx(key, "Version")[0]
    except Exception as e:
        print("打开注册表失败:{}".format(e))
        return None

校验版本是否对应

import sys

wx_version = get_wx_version()
if wx_version!= "4.0.0.6024":
    print("当前微信版本为:【{}】,请确保你的微信版本是【4.0.0.6024】".format(wx_version))
    sys.exit(0)

启动微信并注入DLL

  • dll_port 就是后续你要发送聊天消息的时候用的
  • my_port 就是后续你要监听聊天消息的时候用的
import subprocess

dll_port = 8989  # dll的端口号
my_port = 9000   # 自己的端口号
ret = subprocess.Popen(
    r'"{}" start {} --my_port={}'.format("../inject_tool.exe", dll_port, my_port),
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
)
output, error = ret.communicate()

搭建一个HTTP服务(用来监听聊天消息)

from http.server import HTTPServer, BaseHTTPRequestHandler

class HttpServer(BaseHTTPRequestHandler):
    def do_POST(self):
        if self.path == "/msg":
            # 获取数据
            json_str = self.rfile.read(int(self.headers["content-length"]))
            json_str = json_str.decode()
            result = json.loads(json_str)
            print(result)

            self.send_response(200)
            self.send_header("Content-type", "application/json")
            self.end_headers()
            self.wfile.write(json.dumps({"result": "ok"}).encode())

# 运行HTTP服务
if __name__ == '__main__':
	HTTPServer(("127.0.0.1", 9000), HttpServer).serve_forever()

此时别人发消息给你,你就可以监听到了

在这里插入图片描述

自己发送消息给别人

import requests

# 发送文本消息
requests.post("http://127.0.0.1:8989/api", json={
    "type": 3000,
    "user_id": "FILEASSIST",
    "msg": "我是文本消息"
})

获取好友列表

import requests, json

# 获取好友列表
response = requests.post("http://127.0.0.1:8989/api", json={
    "type": 2000,
    "page_num": 1,
    "page_size": 10
})
result = json.loads(response.content.decode())
print(result)

获取群列表

import requests, json

# 获取好友列表
response = requests.post("http://127.0.0.1:8989/api", json={
    "type": 2002,
    "page_num": 1,
    "page_size": 10
})
result = json.loads(response.content.decode())
print(result)

获取群成员列表

import requests, json

# 获取好友列表
response = requests.post("http://127.0.0.1:8989/api", json={
    "type": 2003,
    "chat_room_id": "R:197xxx"
})
result = json.loads(response.content.decode())
print(result)

来个完整的demo

  • 还有很多可以用的接口,任凭自己搭配,具体参照github上面的文档
import subprocess
from http.server import HTTPServer, BaseHTTPRequestHandler
from threading import Thread
import requests
import json
import time
import winreg
import sys


def get_wx_version():
    """获取微信版本号"""

    try:
        with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Tencent\WXWork", 0, winreg.KEY_READ) as key:
            return winreg.QueryValueEx(key, "Version")[0]
    except Exception as e:
        print("打开注册表失败:{}".format(e))
        return None


class HttpServer(BaseHTTPRequestHandler):
    def do_POST(self):
        if self.path == "/msg":
            # 获取数据
            json_str = self.rfile.read(int(self.headers["content-length"]))
            json_str = json_str.decode()
            result = json.loads(json_str)
            print(result)

            self.send_response(200)
            self.send_header("Content-type", "application/json")
            self.end_headers()
            self.wfile.write(json.dumps({"result": "ok"}).encode())


if __name__ == '__main__':
    # 注意!!!请确保你的微信版本是【4.0.0.6024】
    # 注意!!!请确保你的微信版本是【4.0.0.6024】
    # 注意!!!请确保你的微信版本是【4.0.0.6024】

    # 校验微信版本号是否正确
    wx_version = get_wx_version()
    if wx_version != "4.0.0.6024":
        print("当前微信版本为:【{}】,请确保你的微信版本是【4.0.0.6024】".format(wx_version))
        sys.exit(0)

    dll_port = 8989  # dll的端口号
    my_port = 9000   # 自己的端口号

    # 1、启动http服务【用来监听消息】
    Thread(target=lambda: HTTPServer(("127.0.0.1", my_port), HttpServer).serve_forever()).start()

    # 2、调用命令行启动微信
    ret = subprocess.Popen(
        r'"{}" start {} --my_port={}'.format("../inject_tool.exe", dll_port, my_port),
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
    )
    output, error = ret.communicate()

    # 3、循环等待登录
    while True:
        time.sleep(1)
        # 获取登录状态
        response = requests.post("http://127.0.0.1:{}/api".format(dll_port), json={"type": 1000})
        ret = json.loads(response.content.decode())
        is_login = ret["data"]["status"]
        if is_login:
            break

    # 4、登录成功,获取个人信息
    response = requests.post("http://127.0.0.1:{}/api".format(dll_port), json={"type": 1002})
    ret = json.loads(response.content.decode())
    wx_info = ret["data"]
    print(wx_info)

    # 5、发送文本消息
    requests.post("http://127.0.0.1:{}/api".format(dll_port), json={
        "type": 3000,
        "user_id": "FILEASSIST",
        "msg": "我是文本消息"
    })

    # ...其他操作

    # 阻塞防止程序退出...
    while True:
        time.sleep(1)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值