[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-10235":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":15,"starSnapshotCount":15,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},10235,"WeixinBot","Urinx\u002FWeixinBot","Urinx","网页版微信API，包含终端版微信及微信机器人",null,"Python",7385,1967,480,193,0,4,19,3,40.88,"Apache License 2.0",false,"master",true,[25,26,27,28,29],"api","web-weixin-pipeline","wechat","weixinbot","wxapi","2026-06-12 02:02:18","# WeixinBot [![star this repo](http:\u002F\u002Fgithub-svg-buttons.herokuapp.com\u002Fstar.svg?user=Urinx&repo=WeixinBot&style=flat&background=1081C1)](http:\u002F\u002Fgithub.com\u002FUrinx\u002FWeixinBot) [![fork this repo](http:\u002F\u002Fgithub-svg-buttons.herokuapp.com\u002Ffork.svg?user=Urinx&repo=WeixinBot&style=flat&background=1081C1)](http:\u002F\u002Fgithub.com\u002FUrinx\u002FWeixinBot\u002Ffork) ![python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-2.7%20&%203.6-ff69b4.svg)\n\n网页版微信API，包含终端版微信及微信机器人\n\n## Contents\n* [Demo](#Demo)\n* [Web Weixin Pipeline](#Web-Weixin-Pipeline)\n* [Web Weixin API](#Web-Weixin-API)\n* [Discussion Group](#Discussion-Group)\n* [Recent Update](#Recent-Update)\n\n## \u003Ca name=\"Demo\">Demo\u003C\u002Fa>\n为了确保能正常运行示例脚本，请安装所需的第三方包。\n\n```\npip install -r requirements.txt\n```\n\n注：下面演示的图片与功能可能不是最新的，具体请看源码。\n\n\u003Cdiv align=center>\n\u003Cimg src=\"imgs\u002F1.png\" width=\"500\" height=\"550\"\u002F>\n\u003C\u002Fdiv>\n\n按照操作指示在手机微信上扫描二维码然后登录，你可以选择是否开启自动回复模式。\n\n![2](imgs\u002F2.png)\n\n开启自动回复模式后，如果接收到的是文字消息就会自动回复，包括群消息。\n\n![3](imgs\u002F3.png)\n\n名片，链接，动画表情和地址位置消息。\n\n![4](imgs\u002F4.png)\n\n![5](imgs\u002F5.png)\n\n网页版上有的功能目前基本上都能支持。\n\n## \u003Ca name=\"Web-Weixin-Pipeline\">Web Weixin Pipeline\u003C\u002Fa>\n\n```\n       +--------------+     +---------------+   +---------------+\n       |              |     |               |   |               |\n       |   Get UUID   |     |  Get Contact  |   | Status Notify |\n       |              |     |               |   |               |\n       +-------+------+     +-------^-------+   +-------^-------+\n               |                    |                   |\n               |                    +-------+  +--------+\n               |                            |  |\n       +-------v------+               +-----+--+------+      +--------------+\n       |              |               |               |      |              |\n       |  Get QRCode  |               |  Weixin Init  +------>  Sync Check  \u003C----+\n       |              |               |               |      |              |    |\n       +-------+------+               +-------^-------+      +-------+------+    |\n               |                              |                      |           |\n               |                              |                      +-----------+\n               |                              |                      |\n       +-------v------+               +-------+--------+     +-------v-------+\n       |              | Confirm Login |                |     |               |\n+------>    Login     +---------------> New Login Page |     |  Weixin Sync  |\n|      |              |               |                |     |               |\n|      +------+-------+               +----------------+     +---------------+\n|             |\n|QRCode Scaned|\n+-------------+\n```\n\n\n## \u003Ca name=\"Web-Weixin-API\">Web Weixin API\u003C\u002Fa>\n\n### 登录\n\n| API | 获取 UUID |\n| --- | --------- |\n| url | https:\u002F\u002Flogin.weixin.qq.com\u002Fjslogin |\n| method | POST |\n| data | URL Encode |\n| params | **appid**: `应用ID` \u003Cbr> **fun**: new `应用类型` \u003Cbr> **lang**: zh\\_CN `语言` \u003Cbr> **_**: `时间戳` |\n\n返回数据(String):\n```\nwindow.QRLogin.code = 200; window.QRLogin.uuid = \"xxx\"\n```\n> 注：这里的appid就是在微信开放平台注册的应用的AppID。网页版微信有两个AppID，早期的是`wx782c26e4c19acffb`，在微信客户端上显示为应用名称为`Web微信`；现在用的是`wxeb7ec651dd0aefa9`，显示名称为`微信网页版`。\n\n\u003Cdiv align=center>\n\u003Cimg src=\"imgs\u002F8.jpg\" width=\"320\" height=\"211\"\u002F>\n\u003C\u002Fdiv>\n\n\u003Cbr>\n\n| API | 绑定登陆（webwxpushloginurl） |\n| --- | --------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxpushloginurl |\n| method | GET |\n| params | **uin**: xxx |\n\n返回数据(String):\n```\n{'msg': 'all ok', 'uuid': 'xxx', 'ret': '0'}\n\n通过这种方式可以省掉扫二维码这步操作，更加方便\n```\n\u003Cbr>\n\n| API | 生成二维码 |\n| --- | --------- |\n| url | https:\u002F\u002Flogin.weixin.qq.com\u002Fl\u002F `uuid` |\n| method | GET |\n\u003Cbr>\n\n| API | 二维码扫描登录 |\n| --- | --------- |\n| url | https:\u002F\u002Flogin.weixin.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Flogin |\n| method | GET |\n| params | **tip**: 1 `未扫描` 0 `已扫描` \u003Cbr> **uuid**: xxx \u003Cbr> **_**: `时间戳` |\n\n返回数据(String):\n```\nwindow.code=xxx;\n\nxxx:\n\t408 登陆超时\n\t201 扫描成功\n\t200 确认登录\n\n当返回200时，还会有\nwindow.redirect_uri=\"https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxnewloginpage?ticket=xxx&uuid=xxx&lang=xxx&scan=xxx\";\n```\n\u003Cbr>\n\n| API | webwxnewloginpage |\n| --- | --------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxnewloginpage |\n| method | GET |\n| params | **ticket**: xxx \u003Cbr> **uuid**: xxx \u003Cbr> **lang**: zh_CN `语言` \u003Cbr> **scan**: xxx \u003Cbr> **fun**: new |\n\n返回数据(XML):\n```\n\u003Cerror>\n\t\u003Cret>0\u003C\u002Fret>\n\t\u003Cmessage>OK\u003C\u002Fmessage>\n\t\u003Cskey>xxx\u003C\u002Fskey>\n\t\u003Cwxsid>xxx\u003C\u002Fwxsid>\n\t\u003Cwxuin>xxx\u003C\u002Fwxuin>\n\t\u003Cpass_ticket>xxx\u003C\u002Fpass_ticket>\n\t\u003Cisgrayscale>1\u003C\u002Fisgrayscale>\n\u003C\u002Ferror>\n```\n\u003Cbr>\n\n### 微信初始化\n\n| API | webwxinit |\n| --- | --------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxinit?pass_ticket=xxx&skey=xxx&r=xxx |\n| method | POST |\n| data | JSON |\n| header | ContentType: application\u002Fjson; charset=UTF-8 |\n| params | { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; BaseRequest: { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\tUin: xxx, \u003Cbr>\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sid: xxx, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\tSkey: xxx, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DeviceID: xxx, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; } \u003Cbr> } |\n\n返回数据(JSON):\n```\n{\n\t\"BaseResponse\": {\n\t\t\"Ret\": 0,\n\t\t\"ErrMsg\": \"\"\n\t},\n\t\"Count\": 11,\n\t\"ContactList\": [...],\n\t\"SyncKey\": {\n\t\t\"Count\": 4,\n\t\t\"List\": [\n\t\t\t{\n\t\t\t\t\"Key\": 1,\n\t\t\t\t\"Val\": 635705559\n\t\t\t},\n\t\t\t...\n\t\t]\n\t},\n\t\"User\": {\n\t\t\"Uin\": xxx,\n\t\t\"UserName\": xxx,\n\t\t\"NickName\": xxx,\n\t\t\"HeadImgUrl\": xxx,\n\t\t\"RemarkName\": \"\",\n\t\t\"PYInitial\": \"\",\n\t\t\"PYQuanPin\": \"\",\n\t\t\"RemarkPYInitial\": \"\",\n\t\t\"RemarkPYQuanPin\": \"\",\n\t\t\"HideInputBarFlag\": 0,\n\t\t\"StarFriend\": 0,\n\t\t\"Sex\": 1,\n\t\t\"Signature\": \"Apt-get install B\",\n\t\t\"AppAccountFlag\": 0,\n\t\t\"VerifyFlag\": 0,\n\t\t\"ContactFlag\": 0,\n\t\t\"WebWxPluginSwitch\": 0,\n\t\t\"HeadImgFlag\": 1,\n\t\t\"SnsFlag\": 17\n\t},\n\t\"ChatSet\": xxx,\n\t\"SKey\": xxx,\n\t\"ClientVersion\": 369297683,\n\t\"SystemTime\": 1453124908,\n\t\"GrayScale\": 1,\n\t\"InviteStartCount\": 40,\n\t\"MPSubscribeMsgCount\": 2,\n\t\"MPSubscribeMsgList\": [...],\n\t\"ClickReportInterval\": 600000\n}\n```\n\u003Cbr>\n\n| API | webwxstatusnotify |\n| --- | --------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxstatusnotify?lang=zh_CN&pass_ticket=xxx |\n| method | POST |\n| data | JSON |\n| header | ContentType: application\u002Fjson; charset=UTF-8 |\n| params | { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; Code: 3, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; FromUserName: `自己ID`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; ToUserName: `自己ID`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; ClientMsgId: `时间戳` \u003Cbr> } |\n\n返回数据(JSON):\n```\n{\n\t\"BaseResponse\": {\n\t\t\"Ret\": 0,\n\t\t\"ErrMsg\": \"\"\n\t},\n\t...\n}\n```\n\u003Cbr>\n\n### 获取联系人信息\n\n| API | webwxgetcontact |\n| --- | --------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002F\u002Fwebwxgetcontact?pass_ticket=xxx&skey=xxx&r=xxx |\n| method | POST |\n| data | JSON |\n| header | ContentType: application\u002Fjson; charset=UTF-8 |\n\n返回数据(JSON):\n```\n{\n\t\"BaseResponse\": {\n\t\t\"Ret\": 0,\n\t\t\"ErrMsg\": \"\"\n\t},\n\t\"MemberCount\": 334,\n\t\"MemberList\": [\n\t\t{\n\t\t\t\"Uin\": 0,\n\t\t\t\"UserName\": xxx,\n\t\t\t\"NickName\": \"Urinx\",\n\t\t\t\"HeadImgUrl\": xxx,\n\t\t\t\"ContactFlag\": 3,\n\t\t\t\"MemberCount\": 0,\n\t\t\t\"MemberList\": [],\n\t\t\t\"RemarkName\": \"\",\n\t\t\t\"HideInputBarFlag\": 0,\n\t\t\t\"Sex\": 0,\n\t\t\t\"Signature\": \"你好，我们是地球三体组织。在这里，你将感受到不一样的思维模式，以及颠覆常规的世界观。而我们的目标，就是以三体人的智慧，引领人类未来科学技术500年。\",\n\t\t\t\"VerifyFlag\": 8,\n\t\t\t\"OwnerUin\": 0,\n\t\t\t\"PYInitial\": \"URINX\",\n\t\t\t\"PYQuanPin\": \"Urinx\",\n\t\t\t\"RemarkPYInitial\": \"\",\n\t\t\t\"RemarkPYQuanPin\": \"\",\n\t\t\t\"StarFriend\": 0,\n\t\t\t\"AppAccountFlag\": 0,\n\t\t\t\"Statues\": 0,\n\t\t\t\"AttrStatus\": 0,\n\t\t\t\"Province\": \"\",\n\t\t\t\"City\": \"\",\n\t\t\t\"Alias\": \"Urinxs\",\n\t\t\t\"SnsFlag\": 0,\n\t\t\t\"UniFriend\": 0,\n\t\t\t\"DisplayName\": \"\",\n\t\t\t\"ChatRoomId\": 0,\n\t\t\t\"KeyWord\": \"gh_\",\n\t\t\t\"EncryChatRoomId\": \"\"\n\t\t},\n\t\t...\n\t],\n\t\"Seq\": 0\n}\n```\n\u003Cbr>\n\n| API | webwxbatchgetcontact |\n| --- | --------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxbatchgetcontact?type=ex&r=xxx&pass_ticket=xxx |\n| method | POST |\n| data | JSON |\n| header | ContentType: application\u002Fjson; charset=UTF-8 |\n| params | { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; Count: `群数量`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; List: [ \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { UserName: `群ID`, EncryChatRoomId: \"\" }, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; ], \u003Cbr> } |\n\n返回数据(JSON)同上\n\u003Cbr>\u003Cbr>\n\n### 同步刷新\n\n| API | synccheck |\n| --- | --------- |\n| protocol | https |\n| host | webpush.weixin.qq.com \u003Cbr> webpush.wx2.qq.com \u003Cbr> webpush.wx8.qq.com \u003Cbr> webpush.wx.qq.com \u003Cbr> webpush.web2.wechat.com \u003Cbr> webpush.web.wechat.com |\n| path | \u002Fcgi-bin\u002Fmmwebwx-bin\u002Fsynccheck |\n| method | GET |\n| data | URL Encode |\n| params | **r**: `时间戳` \u003Cbr> **sid**: xxx \u003Cbr> **uin**: xxx \u003Cbr> **skey**: xxx \u003Cbr> **deviceid**: xxx \u003Cbr> **synckey**: xxx \u003Cbr> **_**: `时间戳` |\n\n返回数据(String):\n```\nwindow.synccheck={retcode:\"xxx\",selector:\"xxx\"}\n\nretcode:\n\t0 正常\n\t1100 失败\u002F登出微信\nselector:\n\t0 正常\n\t2 新的消息\n\t7 进入\u002F离开聊天界面\n```\n\u003Cbr>\n\n| API | webwxsync |\n| --- | --------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxsync?sid=xxx&skey=xxx&pass_ticket=xxx |\n| method | POST |\n| data | JSON |\n| header | ContentType: application\u002Fjson; charset=UTF-8 |\n| params | { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; SyncKey: xxx, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; rr: `时间戳取反` \u003Cbr> } |\n\n返回数据(JSON):\n```\n{\n\t'BaseResponse': {'ErrMsg': '', 'Ret': 0},\n\t'SyncKey': {\n\t\t'Count': 7,\n\t\t'List': [\n\t\t\t{'Val': 636214192, 'Key': 1},\n\t\t\t...\n\t\t]\n\t},\n\t'ContinueFlag': 0,\n\t'AddMsgCount': 1,\n\t'AddMsgList': [\n\t\t{\n\t\t\t'FromUserName': '',\n\t\t\t'PlayLength': 0,\n\t\t\t'RecommendInfo': {...},\n\t\t\t'Content': \"\", \n\t\t\t'StatusNotifyUserName': '',\n\t\t\t'StatusNotifyCode': 5,\n\t\t\t'Status': 3,\n\t\t\t'VoiceLength': 0,\n\t\t\t'ToUserName': '',\n\t\t\t'ForwardFlag': 0,\n\t\t\t'AppMsgType': 0,\n\t\t\t'AppInfo': {'Type': 0, 'AppID': ''},\n\t\t\t'Url': '',\n\t\t\t'ImgStatus': 1,\n\t\t\t'MsgType': 51,\n\t\t\t'ImgHeight': 0,\n\t\t\t'MediaId': '', \n\t\t\t'FileName': '',\n\t\t\t'FileSize': '',\n\t\t\t...\n\t\t},\n\t\t...\n\t],\n\t'ModChatRoomMemberCount': 0,\n\t'ModContactList': [],\n\t'DelContactList': [],\n\t'ModChatRoomMemberList': [],\n\t'DelContactCount': 0,\n\t...\n}\n```\n\u003Cbr>\n\n### 消息接口\n\n| API | webwxsendmsg |\n| --- | ------------ |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxsendmsg?pass_ticket=xxx |\n| method | POST |\n| data | JSON |\n| header | ContentType: application\u002Fjson; charset=UTF-8 |\n| params | { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; Msg: { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type: 1 `文字消息`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Content: `要发送的消息`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FromUserName: `自己ID`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ToUserName: `好友ID`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LocalID: `与clientMsgId相同`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClientMsgId: `时间戳左移4位随后补上4位随机数` \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; } \u003Cbr> } |\n\n返回数据(JSON):\n```\n{\n\t\"BaseResponse\": {\n\t\t\"Ret\": 0,\n\t\t\"ErrMsg\": \"\"\n\t},\n\t...\n}\n```\n\n| API | webwxrevokemsg |\n| --- | ------------ |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxrevokemsg |\n| method | POST |\n| data | JSON |\n| header | ContentType: application\u002Fjson; charset=UTF-8 |\n| params | { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; SvrMsgId: msg_id, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; ToUserName: user_id, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; ClientMsgId: local_msg_id \u003Cbr>  } |\n\n返回数据(JSON):\n```\n{\n\t\"BaseResponse\": {\n\t\t\"Ret\": 0,\n\t\t\"ErrMsg\": \"\"\n\t}\n}\n```\n\n#### 发送表情\n\n| API | webwxsendmsgemotion |\n| --- | ------------ |\n| url | https:\u002F\u002Fwx2.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxsendemoticon?fun=sys&f=json&pass_ticket=xxx |\n| method | POST |\n| data | JSON |\n| header | ContentType: application\u002Fjson; charset=UTF-8 |\n| params | { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; Msg: { \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type: 47 `emoji消息`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EmojiFlag: 2, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MediaId: `表情上传后的媒体ID`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FromUserName: `自己ID`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ToUserName: `好友ID`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LocalID: `与clientMsgId相同`, \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClientMsgId: `时间戳左移4位随后补上4位随机数` \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp; } \u003Cbr> } |\n\n\u003Cbr>\n\n### 图片接口\n\n| API | webwxgeticon |\n| --- | ------------ |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxgeticon |\n| method | GET |\n| params | **seq**: `数字，可为空` \u003Cbr> **username**: `ID` \u003Cbr> **skey**: xxx |\n\u003Cbr>\n\n| API | webwxgetheadimg |\n| --- | --------------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxgetheadimg |\n| method | GET |\n| params | **seq**: `数字，可为空` \u003Cbr> **username**: `群ID` \u003Cbr> **skey**: xxx |\n\u003Cbr>\n\n| API | webwxgetmsgimg |\n| --- | --------------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxgetmsgimg |\n| method | GET |\n| params | **MsgID**: `消息ID` \u003Cbr> **type**: slave `略缩图` or `为空时加载原图` \u003Cbr> **skey**: xxx |\n\u003Cbr>\n\n### 多媒体接口\n\n| API | webwxgetvideo |\n| --- | --------------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxgetvideo |\n| method | GET |\n| params | **msgid**: `消息ID` \u003Cbr> **skey**: xxx |\n\u003Cbr>\n\n| API | webwxgetvoice |\n| --- | --------------- |\n| url | https:\u002F\u002Fwx.qq.com\u002Fcgi-bin\u002Fmmwebwx-bin\u002Fwebwxgetvoice |\n| method | GET |\n| params | **msgid**: `消息ID` \u003Cbr> **skey**: xxx |\n\u003Cbr>\n\n### 账号类型\n\n| 类型 | 说明 |\n| :--: | --- |\n| 个人账号 | 以`@`开头，例如：`@xxx` |\n| 群聊 | 以`@@`开头，例如：`@@xxx` |\n| 公众号\u002F服务号 | 以`@`开头，但其`VerifyFlag` & 8 != 0 \u003Cbr>\u003Cbr> `VerifyFlag`: \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般个人公众号\u002F服务号：8 \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般企业的服务号：24 \u003Cbr> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 微信官方账号`微信团队`：56 |\n| 特殊账号 | 像文件传输助手之类的账号，有特殊的ID，目前已知的有：\u003Cbr> `filehelper`, `newsapp`, `fmessage`, `weibo`, `qqmail`, `tmessage`, `qmessage`, `qqsync`, `floatbottle`, `lbsapp`, `shakeapp`, `medianote`, `qqfriend`, `readerapp`, `blogapp`, `facebookapp`, `masssendapp`, `meishiapp`, `feedsapp`, `voip`, `blogappweixin`, `weixin`, `brandsessionholder`, `weixinreminder`, `officialaccounts`, `notification_messages`, `wxitil`, `userexperience_alarm`, `notification_messages` |\n\u003Cbr>\n\n### 消息类型\n\n消息一般格式：\n```\n{\n\t\"FromUserName\": \"\",\n\t\"ToUserName\": \"\",\n\t\"Content\": \"\",\n\t\"StatusNotifyUserName\": \"\",\n\t\"ImgWidth\": 0,\n\t\"PlayLength\": 0,\n\t\"RecommendInfo\": {...},\n\t\"StatusNotifyCode\": 4,\n\t\"NewMsgId\": \"\",\n\t\"Status\": 3,\n\t\"VoiceLength\": 0,\n\t\"ForwardFlag\": 0,\n\t\"AppMsgType\": 0,\n\t\"Ticket\": \"\",\n\t\"AppInfo\": {...},\n\t\"Url\": \"\",\n\t\"ImgStatus\": 1,\n\t\"MsgType\": 1,\n\t\"ImgHeight\": 0,\n\t\"MediaId\": \"\",\n\t\"MsgId\": \"\",\n\t\"FileName\": \"\",\n\t\"HasProductId\": 0,\n\t\"FileSize\": \"\",\n\t\"CreateTime\": 1454602196,\n\t\"SubMsgType\": 0\n}\n```\n\u003Cbr>\n\n| MsgType | 说明 |\n| ------- | --- |\n| 1  | 文本消息 |\n| 3  | 图片消息 |\n| 34 | 语音消息 |\n| 37 | 好友确认消息 |\n| 40 | POSSIBLEFRIEND_MSG |\n| 42 | 共享名片 |\n| 43 | 视频消息 |\n| 47 | 动画表情 |\n| 48 | 位置消息 |\n| 49 | 分享链接 |\n| 50 | VOIPMSG |\n| 51 | 微信初始化消息 |\n| 52 | VOIPNOTIFY |\n| 53 | VOIPINVITE |\n| 62 | 小视频 |\n| 9999 | SYSNOTICE |\n| 10000 | 系统消息 |\n| 10002 | 撤回消息 |\n\u003Cbr>\n\n**微信初始化消息**\n```html\nMsgType: 51\nFromUserName: 自己ID\nToUserName: 自己ID\nStatusNotifyUserName: 最近联系的联系人ID\nContent:\n\t\u003Cmsg>\n\t    \u003Cop id='4'>\n\t        \u003Cusername>\n\t        \t\u002F\u002F 最近联系的联系人\n\t            filehelper,xxx@chatroom,wxid_xxx,xxx,...\n\t        \u003C\u002Fusername>\n\t        \u003Cunreadchatlist>\n\t            \u003Cchat>\n\t                \u003Cusername>\n\t                \t\u002F\u002F 朋友圈\n\t                    MomentsUnreadMsgStatus\n\t                \u003C\u002Fusername>\n\t                \u003Clastreadtime>\n\t                    1454502365\n\t                \u003C\u002Flastreadtime>\n\t            \u003C\u002Fchat>\n\t        \u003C\u002Funreadchatlist>\n\t        \u003Cunreadfunctionlist>\n\t        \t\u002F\u002F 未读的功能账号消息，群发助手，漂流瓶等\n\t        \u003C\u002Funreadfunctionlist>\n\t    \u003C\u002Fop>\n\t\u003C\u002Fmsg>\n```\n\n**文本消息**\n```\nMsgType: 1\nFromUserName: 发送方ID\nToUserName: 接收方ID\nContent: 消息内容\n```\n\n**图片消息**\n```html\nMsgType: 3\nFromUserName: 发送方ID\nToUserName: 接收方ID\nMsgId: 用于获取图片\nContent:\n\t\u003Cmsg>\n\t\t\u003Cimg length=\"6503\" hdlength=\"0\" \u002F>\n\t\t\u003Ccommenturl>\u003C\u002Fcommenturl>\n\t\u003C\u002Fmsg>\n```\n\n**小视频消息**\n```html\nMsgType: 62\nFromUserName: 发送方ID\nToUserName: 接收方ID\nMsgId: 用于获取小视频\nContent:\n\t\u003Cmsg>\n\t\t\u003Cimg length=\"6503\" hdlength=\"0\" \u002F>\n\t\t\u003Ccommenturl>\u003C\u002Fcommenturl>\n\t\u003C\u002Fmsg>\n```\n\n**地理位置消息**\n```\nMsgType: 1\nFromUserName: 发送方ID\nToUserName: 接收方ID\nContent: http:\u002F\u002Fweixin.qq.com\u002Fcgi-bin\u002Fredirectforward?args=xxx\n\u002F\u002F 属于文本消息，只不过内容是一个跳转到地图的链接\n```\n\n**名片消息**\n```js\nMsgType: 42\nFromUserName: 发送方ID\nToUserName: 接收方ID\nContent:\n\t\u003C?xml version=\"1.0\"?>\n\t\u003Cmsg bigheadimgurl=\"\" smallheadimgurl=\"\" username=\"\" nickname=\"\"  shortpy=\"\" alias=\"\" imagestatus=\"3\" scene=\"17\" province=\"\" city=\"\" sign=\"\" sex=\"1\" certflag=\"0\" certinfo=\"\" brandIconUrl=\"\" brandHomeUrl=\"\" brandSubscriptConfigUrl=\"\" brandFlags=\"0\" regionCode=\"\" \u002F>\n\nRecommendInfo:\n\t{\n\t\t\"UserName\": \"xxx\", \u002F\u002F ID\n\t\t\"Province\": \"xxx\", \n\t\t\"City\": \"xxx\", \n\t\t\"Scene\": 17, \n\t\t\"QQNum\": 0, \n\t\t\"Content\": \"\", \n\t\t\"Alias\": \"xxx\", \u002F\u002F 微信号\n\t\t\"OpCode\": 0, \n\t\t\"Signature\": \"\", \n\t\t\"Ticket\": \"\", \n\t\t\"Sex\": 0, \u002F\u002F 1:男, 2:女\n\t\t\"NickName\": \"xxx\", \u002F\u002F 昵称\n\t\t\"AttrStatus\": 4293221, \n\t\t\"VerifyFlag\": 0\n\t}\n```\n\n**语音消息**\n```html\nMsgType: 34\nFromUserName: 发送方ID\nToUserName: 接收方ID\nMsgId: 用于获取语音\nContent:\n\t\u003Cmsg>\n\t\t\u003Cvoicemsg endflag=\"1\" cancelflag=\"0\" forwardflag=\"0\" voiceformat=\"4\" voicelength=\"1580\" length=\"2026\" bufid=\"216825389722501519\" clientmsgid=\"49efec63a9774a65a932a4e5fcd4e923filehelper174_1454602489\" fromusername=\"\" \u002F>\n\t\u003C\u002Fmsg>\n```\n\n**动画表情**\n```html\nMsgType: 47\nFromUserName: 发送方ID\nToUserName: 接收方ID\nContent:\n\t\u003Cmsg>\n\t\t\u003Cemoji fromusername = \"\" tousername = \"\" type=\"2\" idbuffer=\"media:0_0\" md5=\"e68363487d8f0519c4e1047de403b2e7\" len = \"86235\" productid=\"com.tencent.xin.emoticon.bilibili\" androidmd5=\"e68363487d8f0519c4e1047de403b2e7\" androidlen=\"86235\" s60v3md5 = \"e68363487d8f0519c4e1047de403b2e7\" s60v3len=\"86235\" s60v5md5 = \"e68363487d8f0519c4e1047de403b2e7\" s60v5len=\"86235\" cdnurl = \"http:\u002F\u002Femoji.qpic.cn\u002Fwx_emoji\u002FeFygWtxcoMF8M0oCCsksMA0gplXAFQNpiaqsmOicbXl1OC4Tyx18SGsQ\u002F\" designerid = \"\" thumburl = \"http:\u002F\u002Fmmbiz.qpic.cn\u002Fmmemoticon\u002Fdx4Y70y9XctRJf6tKsy7FwWosxd4DAtItSfhKS0Czr56A70p8U5O8g\u002F0\" encrypturl = \"http:\u002F\u002Femoji.qpic.cn\u002Fwx_emoji\u002FUyYVK8GMlq5VnJ56a4GkKHAiaC266Y0me0KtW6JN2FAZcXiaFKccRevA\u002F\" aeskey= \"a911cc2ec96ddb781b5ca85d24143642\" >\u003C\u002Femoji> \n\t\t\u003Cgameext type=\"0\" content=\"0\" >\u003C\u002Fgameext>\n\t\u003C\u002Fmsg>\n```\n\n**普通链接或应用分享消息**\n```html\nMsgType: 49\nAppMsgType: 5\nFromUserName: 发送方ID\nToUserName: 接收方ID\nUrl: 链接地址\nFileName: 链接标题\nContent:\n\t\u003Cmsg>\n\t\t\u003Cappmsg appid=\"\"  sdkver=\"0\">\n\t\t\t\u003Ctitle>\u003C\u002Ftitle>\n\t\t\t\u003Cdes>\u003C\u002Fdes>\n\t\t\t\u003Ctype>5\u003C\u002Ftype>\n\t\t\t\u003Ccontent>\u003C\u002Fcontent>\n\t\t\t\u003Curl>\u003C\u002Furl>\n\t\t\t\u003Cthumburl>\u003C\u002Fthumburl>\n\t\t\t...\n\t\t\u003C\u002Fappmsg>\n\t\t\u003Cappinfo>\n\t\t\t\u003Cversion>\u003C\u002Fversion>\n\t\t\t\u003Cappname>\u003C\u002Fappname>\n\t\t\u003C\u002Fappinfo>\n\t\u003C\u002Fmsg>\n```\n\n**音乐链接消息**\n```html\nMsgType: 49\nAppMsgType: 3\nFromUserName: 发送方ID\nToUserName: 接收方ID\nUrl: 链接地址\nFileName: 音乐名\n\nAppInfo: \u002F\u002F 分享链接的应用\n\t{\n\t\tType: 0, \n\t\tAppID: wx485a97c844086dc9\n\t}\n\nContent:\n\t\u003Cmsg>\n\t\t\u003Cappmsg appid=\"wx485a97c844086dc9\"  sdkver=\"0\">\n\t\t\t\u003Ctitle>\u003C\u002Ftitle>\n\t\t\t\u003Cdes>\u003C\u002Fdes>\n\t\t\t\u003Caction>\u003C\u002Faction>\n\t\t\t\u003Ctype>3\u003C\u002Ftype>\n\t\t\t\u003Cshowtype>0\u003C\u002Fshowtype>\n\t\t\t\u003Cmediatagname>\u003C\u002Fmediatagname>\n\t\t\t\u003Cmessageext>\u003C\u002Fmessageext>\n\t\t\t\u003Cmessageaction>\u003C\u002Fmessageaction>\n\t\t\t\u003Ccontent>\u003C\u002Fcontent>\n\t\t\t\u003Ccontentattr>0\u003C\u002Fcontentattr>\n\t\t\t\u003Curl>\u003C\u002Furl>\n\t\t\t\u003Clowurl>\u003C\u002Flowurl>\n\t\t\t\u003Cdataurl>\n\t\t\t\thttp:\u002F\u002Fws.stream.qqmusic.qq.com\u002FC100003i9hMt1bgui0.m4a?vkey=6867EF99F3684&amp;guid=ffffffffc104ea2964a111cf3ff3edaf&amp;fromtag=46\n\t\t\t\u003C\u002Fdataurl>\n\t\t\t\u003Clowdataurl>\n\t\t\t\thttp:\u002F\u002Fws.stream.qqmusic.qq.com\u002FC100003i9hMt1bgui0.m4a?vkey=6867EF99F3684&amp;guid=ffffffffc104ea2964a111cf3ff3edaf&amp;fromtag=46\n\t\t\t\u003C\u002Flowdataurl>\n\t\t\t\u003Cappattach>\n\t\t\t\t\u003Ctotallen>0\u003C\u002Ftotallen>\n\t\t\t\t\u003Cattachid>\u003C\u002Fattachid>\n\t\t\t\t\u003Cemoticonmd5>\u003C\u002Femoticonmd5>\n\t\t\t\t\u003Cfileext>\u003C\u002Ffileext>\n\t\t\t\u003C\u002Fappattach>\n\t\t\t\u003Cextinfo>\u003C\u002Fextinfo>\n\t\t\t\u003Csourceusername>\u003C\u002Fsourceusername>\n\t\t\t\u003Csourcedisplayname>\u003C\u002Fsourcedisplayname>\n\t\t\t\u003Ccommenturl>\u003C\u002Fcommenturl>\n\t\t\t\u003Cthumburl>\n\t\t\t\thttp:\u002F\u002Fimgcache.qq.com\u002Fmusic\u002Fphoto\u002Falbum\u002F63\u002F180_albumpic_143163_0.jpg\n\t\t\t\u003C\u002Fthumburl>\n\t\t\t\u003Cmd5>\u003C\u002Fmd5>\n\t\t\u003C\u002Fappmsg>\n\t\t\u003Cfromusername>\u003C\u002Ffromusername>\n\t\t\u003Cscene>0\u003C\u002Fscene>\n\t\t\u003Cappinfo>\n\t\t\t\u003Cversion>29\u003C\u002Fversion>\n\t\t\t\u003Cappname>摇一摇搜歌\u003C\u002Fappname>\n\t\t\u003C\u002Fappinfo>\n\t\t\u003Ccommenturl>\u003C\u002Fcommenturl>\n\t\u003C\u002Fmsg>\n```\n\n**群消息**\n```\nMsgType: 1\nFromUserName: @@xxx\nToUserName: @xxx\nContent:\n\t@xxx:\u003Cbr\u002F>xxx\n```\n\n**红包消息**\n```\nMsgType: 49\nAppMsgType: 2001\nFromUserName: 发送方ID\nToUserName: 接收方ID\nContent: 未知\n```\n注：根据网页版的代码可以看到未来可能支持查看红包消息，但目前走的是系统消息，见下。\n\n**系统消息**\n```\nMsgType: 10000\nFromUserName: 发送方ID\nToUserName: 自己ID\nContent:\n\t\"你已添加了 xxx ，现在可以开始聊天了。\"\n\t\"如果陌生人主动添加你为朋友，请谨慎核实对方身份。\"\n\t\"收到红包，请在手机上查看\"\n```\n\n\n## \u003Ca name=\"Discussion-Group\">Discussion Group\u003C\u002Fa>\n如果你希望和 WeixinBot 的其他开发者交流，或者有什么问题和建议，欢迎大家加入微信群【Youth fed the dog】一起讨论。扫描下面的二维码添加机器人为好友，并回复【Aidog】获取入群链接。\n\n\u003Cdiv align=center>\n\u003Cimg src=\"imgs\u002FgroupQrcode.jpg\" width=\"220\" height=\"220\" alt=\"join us\"\u002F>\n\u003C\u002Fdiv>\n\n注：这个不是群的二维码，是机器人拉你入群，记得回复机器人【Aidog】哦~ （secret code: Aidog）\n\n## \u003Ca name=\"Recent-Update\">Recent Update\u003C\u002Fa>\n\n- association_login\n\t目前网页版微信已经可以脱离扫码，但是依然需要在客户端进行确认登录。\n","WeixinBot是一个基于网页版微信的API项目，它支持终端版微信及微信机器人的功能。项目使用Python语言开发，主要提供了获取UUID、生成二维码、登录验证以及消息同步等一系列接口来实现与微信服务器的交互。其核心功能包括自动回复文字消息（含群聊）、处理名片、链接、动画表情和地址位置等多种类型的消息。适合需要通过程序化方式管理个人或企业微信号，进行自动化应答、信息收集等场景下的开发者使用。",2,"2026-06-11 03:27:21","top_topic"]