MCPcopy
hub / github.com/Urinx/WeixinBot

github.com/Urinx/WeixinBot @main sqlite

repository ↗ · DeepWiki ↗
232 symbols 693 edges 17 files 102 documented · 44%
README

WeixinBot star this repo fork this repo python

网页版微信API,包含终端版微信及微信机器人

Contents

Demo

为了确保能正常运行示例脚本,请安装所需的第三方包。

pip install -r requirements.txt

注:下面演示的图片与功能可能不是最新的,具体请看源码。

按照操作指示在手机微信上扫描二维码然后登录,你可以选择是否开启自动回复模式。

2

开启自动回复模式后,如果接收到的是文字消息就会自动回复,包括群消息。

3

名片,链接,动画表情和地址位置消息。

4

5

网页版上有的功能目前基本上都能支持。

Web Weixin Pipeline

       +--------------+     +---------------+   +---------------+
       |              |     |               |   |               |
       |   Get UUID   |     |  Get Contact  |   | Status Notify |
       |              |     |               |   |               |
       +-------+------+     +-------^-------+   +-------^-------+
               |                    |                   |
               |                    +-------+  +--------+
               |                            |  |
       +-------v------+               +-----+--+------+      +--------------+
       |              |               |               |      |              |
       |  Get QRCode  |               |  Weixin Init  +------>  Sync Check  <----+
       |              |               |               |      |              |    |
       +-------+------+               +-------^-------+      +-------+------+    |
               |                              |                      |           |
               |                              |                      +-----------+
               |                              |                      |
       +-------v------+               +-------+--------+     +-------v-------+
       |              | Confirm Login |                |     |               |
+------>    Login     +---------------> New Login Page |     |  Weixin Sync  |
|      |              |               |                |     |               |
|      +------+-------+               +----------------+     +---------------+
|             |
|QRCode Scaned|
+-------------+

Web Weixin API

登录

API 获取 UUID
url https://login.weixin.qq.com/jslogin
method POST
data URL Encode
params appid: 应用ID

fun: new 应用类型

lang: zh_CN 语言

_: 时间戳 |

返回数据(String):

window.QRLogin.code = 200; window.QRLogin.uuid = "xxx"

注:这里的appid就是在微信开放平台注册的应用的AppID。网页版微信有两个AppID,早期的是wx782c26e4c19acffb,在微信客户端上显示为应用名称为Web微信;现在用的是wxeb7ec651dd0aefa9,显示名称为微信网页版

API 绑定登陆(webwxpushloginurl)
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxpushloginurl
method GET
params uin: xxx

返回数据(String):

{'msg': 'all ok', 'uuid': 'xxx', 'ret': '0'}

通过这种方式可以省掉扫二维码这步操作,更加方便
API 生成二维码
url https://login.weixin.qq.com/l/ uuid
method GET
API 二维码扫描登录
url https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login
method GET
params tip: 1 未扫描 0 已扫描

uuid: xxx

_: 时间戳 |

返回数据(String):

window.code=xxx;

xxx:
    408 登陆超时
    201 扫描成功
    200 确认登录

当返回200时,还会有
window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=xxx&uuid=xxx&lang=xxx&scan=xxx";
API webwxnewloginpage
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
method GET
params ticket: xxx

uuid: xxx

lang: zh_CN 语言

scan: xxx

fun: new |

返回数据(XML):

<error>
    <ret>0</ret>
    <message>OK</message>
    <skey>xxx</skey>
    <wxsid>xxx</wxsid>
    <wxuin>xxx</wxuin>
    <pass_ticket>xxx</pass_ticket>
    <isgrayscale>1</isgrayscale>
</error>

微信初始化

API webwxinit
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?pass_ticket=xxx&skey=xxx&r=xxx
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params {

     BaseRequest: {

         Uin: xxx,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sid: xxx,

         Skey: xxx,

         DeviceID: xxx,

     }

} |

返回数据(JSON):

{
    "BaseResponse": {
        "Ret": 0,
        "ErrMsg": ""
    },
    "Count": 11,
    "ContactList": [...],
    "SyncKey": {
        "Count": 4,
        "List": [
            {
                "Key": 1,
                "Val": 635705559
            },
            ...
        ]
    },
    "User": {
        "Uin": xxx,
        "UserName": xxx,
        "NickName": xxx,
        "HeadImgUrl": xxx,
        "RemarkName": "",
        "PYInitial": "",
        "PYQuanPin": "",
        "RemarkPYInitial": "",
        "RemarkPYQuanPin": "",
        "HideInputBarFlag": 0,
        "StarFriend": 0,
        "Sex": 1,
        "Signature": "Apt-get install B",
        "AppAccountFlag": 0,
        "VerifyFlag": 0,
        "ContactFlag": 0,
        "WebWxPluginSwitch": 0,
        "HeadImgFlag": 1,
        "SnsFlag": 17
    },
    "ChatSet": xxx,
    "SKey": xxx,
    "ClientVersion": 369297683,
    "SystemTime": 1453124908,
    "GrayScale": 1,
    "InviteStartCount": 40,
    "MPSubscribeMsgCount": 2,
    "MPSubscribeMsgList": [...],
    "ClickReportInterval": 600000
}
API webwxstatusnotify
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxstatusnotify?lang=zh_CN&pass_ticket=xxx
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params {

     BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },

     Code: 3,

     FromUserName: 自己ID,

     ToUserName: 自己ID,

     ClientMsgId: 时间戳

} |

返回数据(JSON):

{
    "BaseResponse": {
        "Ret": 0,
        "ErrMsg": ""
    },
    ...
}

获取联系人信息

API webwxgetcontact
url https://wx.qq.com/cgi-bin/mmwebwx-bin//webwxgetcontact?pass_ticket=xxx&skey=xxx&r=xxx
method POST
data JSON
header ContentType: application/json; charset=UTF-8

返回数据(JSON):

{
    "BaseResponse": {
        "Ret": 0,
        "ErrMsg": ""
    },
    "MemberCount": 334,
    "MemberList": [
        {
            "Uin": 0,
            "UserName": xxx,
            "NickName": "Urinx",
            "HeadImgUrl": xxx,
            "ContactFlag": 3,
            "MemberCount": 0,
            "MemberList": [],
            "RemarkName": "",
            "HideInputBarFlag": 0,
            "Sex": 0,
            "Signature": "你好,我们是地球三体组织。在这里,你将感受到不一样的思维模式,以及颠覆常规的世界观。而我们的目标,就是以三体人的智慧,引领人类未来科学技术500年。",
            "VerifyFlag": 8,
            "OwnerUin": 0,
            "PYInitial": "URINX",
            "PYQuanPin": "Urinx",
            "RemarkPYInitial": "",
            "RemarkPYQuanPin": "",
            "StarFriend": 0,
            "AppAccountFlag": 0,
            "Statues": 0,
            "AttrStatus": 0,
            "Province": "",
            "City": "",
            "Alias": "Urinxs",
            "SnsFlag": 0,
            "UniFriend": 0,
            "DisplayName": "",
            "ChatRoomId": 0,
            "KeyWord": "gh_",
            "EncryChatRoomId": ""
        },
        ...
    ],
    "Seq": 0
}
API webwxbatchgetcontact
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?type=ex&r=xxx&pass_ticket=xxx
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params {

     BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },

     Count: 群数量,

     List: [

         { UserName: 群ID, EncryChatRoomId: "" },

         ...

     ],

} |

返回数据(JSON)同上

同步刷新

API synccheck
protocol https
host webpush.weixin.qq.com

webpush.wx2.qq.com

webpush.wx8.qq.com

webpush.wx.qq.com

webpush.web2.wechat.com

webpush.web.wechat.com | | path | /cgi-bin/mmwebwx-bin/synccheck | | method | GET | | data | URL Encode | | params | r: 时间戳

sid: xxx

uin: xxx

skey: xxx

deviceid: xxx

synckey: xxx

_: 时间戳 |

返回数据(String):

window.synccheck={retcode:"xxx",selector:"xxx"}

retcode:
    0 正常
    1100 失败/登出微信
selector:
    0 正常
    2 新的消息
    7 进入/离开聊天界面
API webwxsync
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=xxx&skey=xxx&pass_ticket=xxx
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params {

     BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },

     SyncKey: xxx,

     rr: 时间戳取反

} |

返回数据(JSON):

{
    'BaseResponse': {'ErrMsg': '', 'Ret': 0},
    'SyncKey': {
        'Count': 7,
        'List': [
            {'Val': 636214192, 'Key': 1},
            ...
        ]
    },
    'ContinueFlag': 0,
    'AddMsgCount': 1,
    'AddMsgList': [
        {
            'FromUserName': '',
            'PlayLength': 0,
            'RecommendInfo': {...},
            'Content': "", 
            'StatusNotifyUserName': '',
            'StatusNotifyCode': 5,
            'Status': 3,
            'VoiceLength': 0,
            'ToUserName': '',
            'ForwardFlag': 0,
            'AppMsgType': 0,
            'AppInfo': {'Type': 0, 'AppID': ''},
            'Url': '',
            'ImgStatus': 1,
            'MsgType': 51,
            'ImgHeight': 0,
            'MediaId': '', 
            'FileName': '',
            'FileSize': '',
            ...
        },
        ...
    ],
    'ModChatRoomMemberCount': 0,
    'ModContactList': [],
    'DelContactList': [],
    'ModChatRoomMemberList': [],
    'DelContactCount': 0,
    ...
}

消息接口

API webwxsendmsg
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?pass_ticket=xxx
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params {

     BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },

     Msg: {

         Type: 1 文字消息,

         Content: 要发送的消息,

         FromUserName: 自己ID,

         ToUserName: 好友ID,

         LocalID: 与clientMsgId相同,

         ClientMsgId: 时间戳左移4位随后补上4位随机数

     }

} |

返回数据(JSON):

{
    "BaseResponse": {
        "Ret": 0,
        "ErrMsg": ""
    },
    ...
}
API webwxrevokemsg
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxrevokemsg
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params {

     BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },

     SvrMsgId: msg_id,

     ToUserName: user_id,

     ClientMsgId: local_msg_id

} |

返回数据(JSON):

{
    "BaseResponse": {
        "Ret": 0,
        "ErrMsg": ""
    }
}

发送表情

API webwxsendmsgemotion
url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendemoticon?fun=sys&f=json&pass_ticket=xxx
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params {

     BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },

     Msg: {

         Type: 47 emoji消息,

         EmojiFlag: 2,

         MediaId: 表情上传后的媒体ID,

         FromUserName: 自己ID,

         ToUserName: 好友ID,

         LocalID: 与clientMsgId相同,

         ClientMsgId: 时间戳左移4位随后补上4位随机数

     }

} |

图片接口

API webwxgeticon
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgeticon
method GET
params seq: 数字,可为空

username: ID

skey: xxx |

API webwxgetheadimg
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetheadimg
method GET
params seq: 数字,可为空

username: 群ID

skey: xxx |

API webwxgetmsgimg
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg
method GET
params MsgID: 消息ID

type: slave 略缩图 or 为空时加载原图

skey: xxx |

多媒体接口

API webwxgetvideo
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetvideo
method GET
params msgid: 消息ID

skey: xxx |

API webwxgetvoice
url https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetvoice
method GET
params msgid: 消息ID

skey: xxx |

账号类型

类型 说明
个人账号 @开头,例如:@xxx
群聊 @@开头,例如:@@xxx
公众号/服务号 @开头,但其VerifyFlag & 8 != 0

VerifyFlag:

         一般个人公众号/服务号:8

         一般企业的服务号:24

         微信官方账号微信团队:56 | | 特殊账号 | 像文件传输助手之类的账号,有特殊的ID,目前已知的有:

`filehe

Core symbols most depended-on inside this repo

get
called by 47
wxbot_project_py2.7/config/config_manager.py
echo
called by 28
wxbot_project_py2.7/wechat/utils.py
post
called by 14
wxbot_project_py2.7/wechat/utils.py
get
called by 11
wxbot_project_py2.7/wechat/utils.py
write
called by 11
wxbot_demo_py3/weixin.py
run
called by 10
wxbot_project_py2.7/wechat/utils.py
execute
called by 10
wxbot_project_py2.7/db/mysql_db.py
_showMsg
called by 10
wxbot_demo_py3/weixin.py

Shape

Method 161
Function 45
Route 14
Class 12

Languages

Python100%

Modules by API surface

wxbot_demo_py3/weixin.py58 symbols
wxbot_project_py2.7/wechat/wechat_apis.py39 symbols
wxbot_project_py2.7/weixin_bot.py31 symbols
wxbot_project_py2.7/wechat/utils.py22 symbols
wxbot_project_py2.7/wechat/wechat.py18 symbols
wxbot_project_py2.7/db/sqlite_db.py15 symbols
wxbot_project_py2.7/db/mysql_db.py15 symbols
wxbot_project_py2.7/wx_handler/wechat_msg_processor.py12 symbols
wxbot_project_py2.7/config/config_manager.py12 symbols
wxbot_project_py2.7/wx_handler/bot.py4 symbols
wxbot_project_py2.7/wx_handler/sendgrid_mail.py3 symbols
wxbot_project_py2.7/config/constant.py3 symbols

For agents

$ claude mcp add WeixinBot \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact