Version Web de l'API WeChat, y compris la version terminal de WeChat et le robot WeChat
Pour garantir que les exemples de scripts s'exécutent correctement, veuillez installer les packages tiers requis.
pip install -r requirements.txt
Remarque : Les images et les fonctions présentées ci-dessous peuvent ne pas être les dernières, veuillez consulter le code source pour plus de détails.
Suivez les instructions pour scanner le code QR sur votre téléphone mobile WeChat et connectez-vous. Vous pouvez choisir d'activer ou non le mode de réponse automatique.
Après avoir activé le mode de réponse automatique, si le message texte reçu est un message texte, il répondra automatiquement, y compris les messages de groupe.
Cartes de visite, liens, émoticônes animées et messages de localisation d'adresse.
Fondamentalement, toutes les fonctions de la version Web sont actuellement prises en charge.
+--------------+ +---------------+ +---------------+
| | | | | |
| 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|
+-------------+
API | Obtenir l'UUID |
---|---|
URL | https://login.weixin.qq.com/jslogin |
méthode | POSTE |
données | Encodage d'URL |
paramètres | appid :应用ID amusant : nouveau 应用类型 langue : 语言 zh_CN_ : 时间戳 |
Données de retour (Chaîne) :
window.QRLogin.code = 200; window.QRLogin.uuid = "xxx"
Remarque : L'appid ici est l'AppID de l'application enregistrée sur la plateforme ouverte WeChat. La version Web de WeChat a deux AppID. Le premier était
wx782c26e4c19acffb
, et le nom de l'application était affiché commeWeb微信
sur le client WeChat ; l'actuel estwxeb7ec651dd0aefa9
, et le nom affiché est微信网页版
.
API | Lier la connexion (webwxpushloginurl) |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxpushloginurl |
méthode | OBTENIR |
paramètres | uin :xxx |
Données de retour (Chaîne) :
{'msg': 'all ok', 'uuid': 'xxx', 'ret': '0'}
通过这种方式可以省掉扫二维码这步操作,更加方便
API | Générer un code QR |
---|---|
URL | uuid |
méthode | OBTENIR |
API | Scannez le code QR pour vous connecter |
---|---|
URL | https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login |
méthode | OBTENIR |
paramètres | astuce : 1未扫描 0已扫描 identifiant :xxx _ : 时间戳 |
Données de retour (Chaîne) :
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 | webwxnouvellepage de connexion |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage |
méthode | OBTENIR |
paramètres | billet : xxx identifiant :xxx langue : 语言 zh_CNscanner :xxx amusant : nouveau |
Données de retour (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 |
méthode | POSTE |
données | JSON |
en-tête | Type de contenu : application/json ; jeu de caractères = UTF-8 |
paramètres | { Demande de base : { Uin : xxx, Côté : xxx, Clé : xxx, ID de l'appareil : xxx, } } |
Données de retour (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 | webwxstatutnotifier |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxstatusnotify?lang=zh_CN&pass_ticket=xxx |
méthode | POSTE |
données | JSON |
en-tête | Type de contenu : application/json ; jeu de caractères = UTF-8 |
paramètres | { BaseRequest : {Uin : xxx, Sid : xxx, Skey : xxx, DeviceID : xxx }, Code: 3, FromUserName : 自己ID ,ToUserName : 自己ID ,ClientMsgId : 时间戳 } |
Données de retour (JSON) :
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
},
...
}
API | webwxgetcontact |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin//webwxgetcontact?pass_ticket=xxx&skey=xxx&r=xxx |
méthode | POSTE |
données | JSON |
en-tête | Type de contenu : application/json ; jeu de caractères = UTF-8 |
Données de retour (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 |
méthode | POSTE |
données | JSON |
en-tête | Type de contenu : application/json ; jeu de caractères = UTF-8 |
paramètres | { BaseRequest : {Uin : xxx, Sid : xxx, Skey : xxx, DeviceID : xxx }, Nombre : 群数量 ,Liste: [ { Nom d'utilisateur : 群ID , EncryChatRoomId : "" },... ], } |
Renvoie les données (JSON) comme ci-dessus
API | vérification de synchronisation |
---|---|
protocole | https |
hôte | webpush.weixin.qq.com webpush.wx2.qq.com webpush.wx8.qq.com webpush.wx.qq.com webpush.web2.wechat.com webpush.web.wechat.com |
chemin | /cgi-bin/mmwebwx-bin/synccheck |
méthode | OBTENIR |
données | Encodage d'URL |
paramètres | r :时间戳 côté :xxx uin :xxx clé : xxx identifiant de l'appareil :xxx synckey :xxx _ : 时间戳 |
Données de retour (Chaîne) :
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 |
méthode | POSTE |
données | JSON |
en-tête | Type de contenu : application/json ; jeu de caractères = UTF-8 |
paramètres | { BaseRequest : {Uin : xxx, Sid : xxx, Skey : xxx, DeviceID : xxx }, Clé de synchronisation : xxx, rr : 时间戳取反 } |
Données de retour (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 |
méthode | POSTE |
données | JSON |
en-tête | Type de contenu : application/json ; jeu de caractères = UTF-8 |
paramètres | { BaseRequest : {Uin : xxx, Sid : xxx, Skey : xxx, DeviceID : xxx }, Message : { Tapez : 1 文字消息 ,Contenu : 要发送的消息 ,FromUserName : 自己ID ,ToUserName : 好友ID ,LocalID : 与clientMsgId相同 ,ClientMsgId : 时间戳左移4位随后补上4位随机数 } } |
Données de retour (JSON) :
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
},
...
}
API | webwxrevokemsg |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxrevokemsg |
méthode | POSTE |
données | JSON |
en-tête | Type de contenu : application/json ; jeu de caractères = UTF-8 |
paramètres | { BaseRequest : {Uin : xxx, Sid : xxx, Skey : xxx, DeviceID : xxx }, SvrMsgId : msg_id, ToUserName : user_id, ClientMsgId : local_msg_id } |
Données de retour (JSON) :
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
}
}
API | webwxsendmsgemotion |
---|---|
URL | https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendemoticon?fun=sys&f=json&pass_ticket=xxx |
méthode | POSTE |
données | JSON |
en-tête | Type de contenu : application/json ; jeu de caractères = UTF-8 |
paramètres | { BaseRequest : {Uin : xxx, Sid : xxx, Skey : xxx, DeviceID : xxx }, Message : { Tapez : 47 emoji消息 ,EmojiDrapeau : 2, MediaId : 表情上传后的媒体ID ,FromUserName : 自己ID ,ToUserName : 好友ID ,LocalID : 与clientMsgId相同 ,ClientMsgId : 时间戳左移4位随后补上4位随机数 } } |
API | webwxgeticon |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgeticon |
méthode | OBTENIR |
paramètres | seq :数字,可为空 nom d'utilisateur : ID clé : xxx |
API | webwxgetheadimg |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetheadimg |
méthode | OBTENIR |
paramètres | seq :数字,可为空 nom d'utilisateur : 群ID clé : xxx |
API | webwxgetmsgimg |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg |
méthode | OBTENIR |
paramètres | MsgID :消息ID tapez : 略缩图 esclave ou为空时加载原图 clé : xxx |
API | webwxgetvideo |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetvideo |
méthode | OBTENIR |
paramètres | msgstr :消息ID clé : xxx |
API | webwxgetvoice |
---|---|
URL | https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetvoice |
méthode | OBTENIR |
paramètres | msgstr :消息ID clé : xxx |
taper | illustrer |
---|---|
Compte personnel | Commencez par @ , par exemple : @xxx |
discussion de groupe | Commencez par @@ , par exemple : @@xxx |
Compte public/compte de service | Commence par @ mais a VerifyFlag & 8 != 0VerifyFlag :Compte public personnel général/compte de service : 8 Numéro de service général de l'entreprise : 24 Compte officiel WeChat 微信团队 : 56 |
Compte spécial | Les comptes tels que File Transfer Assistant ont des identifiants spéciaux. Ceux actuellement connus sont :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 |
Format général du message :
{
"FromUserName": "",
"ToUserName": "",
"Content": "",
"StatusNotifyUserName": "",
"ImgWidth": 0,
"PlayLength": 0,
"RecommendInfo": {...},
"StatusNotifyCode": 4,
"NewMsgId": "",
"Status": 3,
"VoiceLength": 0,
"ForwardFlag": 0,
"AppMsgType": 0,
"Ticket": "",
"AppInfo": {...},
"Url": "",
"ImgStatus": 1,
"MsgType": 1,
"ImgHeight": 0,
"MediaId": "",
"MsgId": "",
"FileName": "",
"HasProductId": 0,
"FileSize": "",
"CreateTime": 1454602196,
"SubMsgType": 0
}
Type de message | illustrer |
---|---|
1 | SMS |
3 | Message photo |
34 | message vocal |
37 | Message de confirmation d'un ami |
40 | POSSIBLEFRIEND_MSG |
42 | Partager la carte de visite |
43 | message vidéo |
47 | émoticônes animées |
48 | message de localisation |
49 | partager le lien |
50 | VOIPMSG |
51 | Message d'initialisation de WeChat |
52 | VOIPNOTIFIER |
53 | VOIPINVITE |
62 | courte vidéo |
9999 | SYSNOTICE |
10000 | Messages système |
10002 | Retirer le message |
Message d'initialisation de WeChat
MsgType: 51
FromUserName: 自己ID
ToUserName: 自己ID
StatusNotifyUserName: 最近联系的联系人ID
Content:
< msg >
< op id =' 4 ' >
< username >
// 最近联系的联系人
filehelper,xxx@chatroom,wxid_xxx,xxx,...
</ username >
< unreadchatlist >
< chat >
< username >
// 朋友圈
MomentsUnreadMsgStatus
</ username >
< lastreadtime >
1454502365
</ lastreadtime >
</ chat >
</ unreadchatlist >
< unreadfunctionlist >
// 未读的功能账号消息,群发助手,漂流瓶等
</ unreadfunctionlist >
</ op >
</ msg >
SMS
MsgType: 1
FromUserName: 发送方ID
ToUserName: 接收方ID
Content: 消息内容
Message photo
MsgType: 3
FromUserName: 发送方ID
ToUserName: 接收方ID
MsgId: 用于获取图片
Content:
< msg >
< img length =" 6503 " hdlength =" 0 " />
< commenturl > </ commenturl >
</ msg >
Petit message vidéo
MsgType: 62
FromUserName: 发送方ID
ToUserName: 接收方ID
MsgId: 用于获取小视频
Content:
< msg >
< img length =" 6503 " hdlength =" 0 " />
< commenturl > </ commenturl >
</ msg >
message de géolocalisation
MsgType: 1
FromUserName: 发送方ID
ToUserName: 接收方ID
Content: http://weixin.qq.com/cgi-bin/redirectforward?args=xxx
// 属于文本消息,只不过内容是一个跳转到地图的链接
message de carte de visite
MsgType: 42
FromUserName: 发送方ID
ToUserName: 接收方ID
Content :
< ? xml version = "1.0" ? >
< msg bigheadimgurl = "" smallheadimgurl = "" username = "" nickname = "" shortpy = "" alias = "" imagestatus = "3" scene = "17" province = "" city = "" sign = "" sex = "1" certflag = "0" certinfo = "" brandIconUrl = "" brandHomeUrl = "" brandSubscriptConfigUrl = "" brandFlags = "0" regionCode = "" />
RecommendInfo:
{
"UserName" : "xxx" , // ID
"Province" : "xxx" ,
"City" : "xxx" ,
"Scene" : 17 ,
"QQNum" : 0 ,
"Content" : "" ,
"Alias" : "xxx" , // 微信号
"OpCode" : 0 ,
"Signature" : "" ,
"Ticket" : "" ,
"Sex" : 0 , // 1:男, 2:女
"NickName" : "xxx" , // 昵称
"AttrStatus" : 4293221 ,
"VerifyFlag" : 0
}
message vocal
MsgType: 34
FromUserName: 发送方ID
ToUserName: 接收方ID
MsgId: 用于获取语音
Content:
< msg >
< voicemsg endflag =" 1 " cancelflag =" 0 " forwardflag =" 0 " voiceformat =" 4 " voicelength =" 1580 " length =" 2026 " bufid =" 216825389722501519 " clientmsgid =" 49efec63a9774a65a932a4e5fcd4e923filehelper174_1454602489 " fromusername ="" />
</ msg >
émoticônes animées
MsgType: 47
FromUserName: 发送方ID
ToUserName: 接收方ID
Content:
< msg >
< emoji 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://emoji.qpic.cn/wx_emoji/eFygWtxcoMF8M0oCCsksMA0gplXAFQNpiaqsmOicbXl1OC4Tyx18SGsQ/ " designerid = "" thumburl = " http://mmbiz.qpic.cn/mmemoticon/dx4Y70y9XctRJf6tKsy7FwWosxd4DAtItSfhKS0Czr56A70p8U5O8g/0 " encrypturl = " http://emoji.qpic.cn/wx_emoji/UyYVK8GMlq5VnJ56a4GkKHAiaC266Y0me0KtW6JN2FAZcXiaFKccRevA/ " aeskey = " a911cc2ec96ddb781b5ca85d24143642 " > </ emoji >
< gameext type =" 0 " content =" 0 " > </ gameext >
</ msg >
Lien ordinaire ou message de partage d'application
MsgType: 49
AppMsgType: 5
FromUserName: 发送方ID
ToUserName: 接收方ID
Url: 链接地址
FileName: 链接标题
Content:
< msg >
< appmsg appid ="" sdkver =" 0 " >
< title > </ title >
< des > </ des >
< type > 5 </ type >
< content > </ content >
< url > </ url >
< thumburl > </ thumburl >
...
</ appmsg >
< appinfo >
< version > </ version >
< appname > </ appname >
</ appinfo >
</ msg >
message de lien musical
MsgType: 49
AppMsgType: 3
FromUserName: 发送方ID
ToUserName: 接收方ID
Url: 链接地址
FileName: 音乐名
AppInfo: // 分享链接的应用
{
Type: 0,
AppID: wx485a97c844086dc9
}
Content:
< msg >
< appmsg appid =" wx485a97c844086dc9 " sdkver =" 0 " >
< title > </ title >
< des > </ des >
< action > </ action >
< type > 3 </ type >
< showtype > 0 </ showtype >
< mediatagname > </ mediatagname >
< messageext > </ messageext >
< messageaction > </ messageaction >
< content > </ content >
< contentattr > 0 </ contentattr >
< url > </ url >
< lowurl > </ lowurl >
< dataurl >
http://ws.stream.qqmusic.qq.com/C100003i9hMt1bgui0.m4a?vkey=6867EF99F3684&guid=ffffffffc104ea2964a111cf3ff3edaf&fromtag=46
</ dataurl >
< lowdataurl >
http://ws.stream.qqmusic.qq.com/C100003i9hMt1bgui0.m4a?vkey=6867EF99F3684&guid=ffffffffc104ea2964a111cf3ff3edaf&fromtag=46
</ lowdataurl >
< appattach >
< totallen > 0 </ totallen >
< attachid > </ attachid >
< emoticonmd5 > </ emoticonmd5 >
< fileext > </ fileext >
</ appattach >
< extinfo > </ extinfo >
< sourceusername > </ sourceusername >
< sourcedisplayname > </ sourcedisplayname >
< commenturl > </ commenturl >
< thumburl >
http://imgcache.qq.com/music/photo/album/63/180_albumpic_143163_0.jpg
</ thumburl >
< md5 > </ md5 >
</ appmsg >
< fromusername > </ fromusername >
< scene > 0 </ scene >
< appinfo >
< version > 29 </ version >
< appname >摇一摇搜歌</ appname >
</ appinfo >
< commenturl > </ commenturl >
</ msg >
Message de groupe
MsgType: 1
FromUserName: @@xxx
ToUserName: @xxx
Content:
@xxx:<br/>xxx
L'actualité de l'enveloppe rouge
MsgType: 49
AppMsgType: 2001
FromUserName: 发送方ID
ToUserName: 接收方ID
Content: 未知
Remarque : D'après le code de la version Web, on peut voir qu'elle pourrait prendre en charge l'affichage des messages à enveloppe rouge à l'avenir, mais elle utilise actuellement les messages système, voir ci-dessous.
Messages système
MsgType: 10000
FromUserName: 发送方ID
ToUserName: 自己ID
Content:
"你已添加了 xxx ,现在可以开始聊天了。"
"如果陌生人主动添加你为朋友,请谨慎核实对方身份。"
"收到红包,请在手机上查看"
Si vous souhaitez communiquer avec d'autres développeurs de WeixinBot, ou si vous avez des questions ou des suggestions, vous êtes invités à rejoindre le groupe WeChat [Les jeunes ont nourri le chien] pour en discuter. Scannez le code QR ci-dessous pour ajouter le robot comme ami et répondez à [Aidog] pour obtenir le lien pour rejoindre le groupe.
Remarque : Ce n'est pas le code QR du groupe. C'est un robot qui vous attire dans le groupe. Pensez à répondre au robot [Aidog]~ (code secret : Aidog)