Web-версия страницы входа в WeChat — это https://wx.qq.com. Ниже приведён текст, который начинается с этой страницы.
После перехода на страницу входа в Web-версию WeChat, в консоли разработчика браузера можно увидеть, что перед загрузкой изображения с QR-кодом отправляется GET-запрос:
https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1532078129220
Этот запрос используется для получения login uuid. Анализ показывает следующее:
Параметр | Значение | Описание |
---|---|---|
appid | wx782c26e4c19acffb | Это значение не меняется и указывает на то, что запрос исходит от Web-версии WeChat; |
redirect_uri | https%3A%2F%2Fwx2.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage | Страница перенаправления; необязательный параметр; |
fun | new | Фиксированное значение; |
lang | zh_CN | Язык; zh_CN означает китайский язык; |
_ | 1532078129220 | 13-значный timestamp; |
Затем сервер возвращает данные:
window.QRLogin.code = 200; window.QRLogin.uuid = "wcXrINkB9Q==";
Далее будет отправлен следующий GET-запрос:
https://login.weixin.qq.com/qrcode/wcXrINkB9Q==
URL в конце запроса — это ссылка на изображение QR-кода, а строка после «=» — это ранее полученный uuid.
После получения QR-кода будет отправлен GET-запрос, ожидающий подтверждения входа или сканирования QR-кода:
https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=wcXrINkB9Q==&tip=0&r=1223005686&_=1532080293141
Если пользователь не отсканирует QR-код вовремя, этот запрос будет повторяться через некоторое время, указывая на то, что браузер периодически отправляет запросы.
Анализ параметров URL:
Параметр | Значение | Описание |
---|---|---|
loginicon | true | Фиксированное значение; |
uid | wcXrINkB9Q== | То же, что и предыдущий uuid; |
tip | 0 или 1 | 0 означает ожидание сканирования пользователем QR-кода для подтверждения; 1 означает ожидание прямого подтверждения пользователем, используется при push-логине; |
r | 1223005686 | 10-значное случайное число; |
_ | 1532080293141 | 13-значный timestamp; |
Если QR-код не сканируется вовремя, сервер вернёт данные:
window.code=408;
Это означает, что не было получено подтверждение аутентификации, и необходимо повторно отправить запрос.
Если сканирование QR-кода не происходит, сервер вернёт данные:
window.code=400;
Это указывает на то, что текущий вход с использованием этого uuid больше не действителен, и процесс входа должен быть повторён с новым uuid.
После успешного сканирования QR-кода и до нажатия кнопки подтверждения входа сервер вернёт:
window.code=201;
Это означает, что приложение WeChat на стороне клиента уже отсканировало QR-код, но пользователь ещё не нажал кнопку подтверждения.
После сканирования QR-кода и нажатия кнопки подтверждения сервер вернёт:
window.code=200;
window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=A51bGY49nxxxxxxx1wNPC3@qrticket_0&uuid=wcXrINkB9Q==&lang=zh_CN&scan=1532083897";
Здесь window.code имеет значение 200, что указывает на успешный вход в приложение на стороне клиента. window.redirect_uri содержит URL, на который нужно перейти.
После успешной аутентификации приложения на стороне клиента будет отправлен новый GET-запрос:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=A51bGY49nxxxxxxx1wNPC3@qrticket_0&uuid=wcXrINkB9Q==&lang=zh_CN&scan=1532083897&fun=new&version=v2
Он совпадает с redirect_uri, полученным после успешного входа, с добавлением &fun=new&version=v2. Этот запрос приведёт к отключению других пользователей WeChat (через Web или ПК), которые вошли в систему.
Параметры URL:
Параметр | Значение | Описание |
---|---|---|
ticket | A51bGY49nxxxxxxx1wNPC3@qrticket_0 | Сохраняется неизменным; |
uuid | wcXrINkB9Q== | То же самое, что и раньше; |
lang | zh_CN | Язык; zh_CN обозначает китайский язык; |
scan | 1532083897 | Время сканирования QR-кода пользователем; |
fun | new | Фиксированное значение; |
version | v2 | Фиксированное значение; |
Сервер вернёт следующие данные:
<error>
<ret>0</ret>
<message></message>
<skey>@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp</skey>
<wxsid>8rwxxxxxxxxxHq2P</wxsid>
<wxuin>26xxx7</wxuin>
<pass_ticket>AFsdZ7eHxxxxxxxxxxxxxxxxfr1vjHPn=</pass_ticket>
<isgrayscale>1</isgrayscale>
</error>
(Для обеспечения конфиденциальности данные ответа были изменены.)
При нажатии кнопки выхода будут отправлены два POST-запроса:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxlogout?redirect=1&type=0&skey=%40crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxlogout?redirect=1&type=1&skey=%40crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp
Эти запросы отличаются только значением параметра type, которое сначала равно 0, а затем 1.
Параметры URL:
Параметр | Значение | Описание |
---|---|---|
redirect | 1 | Фиксированное значение; |
type | 0 или 1 | 0 или 1, фиксированное значение; |
skey | %40crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp | Получен во время входа; требует urlencode; |
Данные формы:
Поле | Значение | Описание |
---|---|---|
sid | — | Получено во время входа; |
uin | — | Получено во время входа; |
Сервер возвращает данные:
Запрос приводит к перенаправлению страницы, без дополнительных данных.
После выхода из системы появится страница быстрого входа. После нажатия кнопки входа будет отправлен запрос webwxpushloginurl:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxpushloginurl?uin=26xxx7
Этот метод не требует сканирования QR-кода. Он используется после ручного выхода из системы для получения нового uuid и продолжения процесса входа, описанного в пункте 1.3.
Параметры URL:
Параметр | Значение | Описание |
---|---|---|
uin | 26xxx7 | То же значение, что и полученное во время предыдущего входа; |
Сервер возвратит данные:
{
"ret": "0",
"msg": "all ok",
"uuid": "A_1_xxxw=="
}
POST данные (JSON):
{
"BaseRequest": {
"DeviceID": "e659xxxxxxxx3006",
"Sid": "8rwxxxxxxxxxHq2P",
"Skey": "@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp",
"Uin": "26xxx7"
}
}
Анализ параметров POST:
Числовое имя | Пример значения | Описание |
---|---|---|
BaseRequest.DeviceID | e659xxxxxxxx3006 | идентификатор устройства, e с добавлением 15 случайных символов; |
BaseRequest.Sid | rwxxxxxxxxxHq2P | полученный на предыдущем этапе wxsid; |
BaseRequest.Skey | crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp | полученный на предыдущем этапе skey; |
BaseRequest.Uin | 6xxx7 | полученный на предыдущем этапе uin; |
Данные ответа сервера:
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
},
"Count": 11,
"ContactList": [{
"Uin": 0,
"UserName": "filehelper",
"NickName": "...",
"HeadImgUrl": "...",
"ContactFlag": 5,
"MemberCount": 0,
"MemberList": [],
"RemarkName": "",
"HideInputBarFlag": 0,
"Sex": 0,
"Signature": "",
"VerifyFlag": 0,
"OwnerUin": 0,
"PYInitial": "WJCSZS",
"PYQuanPin": "wenjianchuanshuzhushou",
"RemarkPYInitial": "",
"RemarkPYQuanPin": "",
"StarFriend": 0,
"AppAccountFlag": 0,
"Statues": 0,
"AttrStatus": 0,
"Province": "",
"City": "",
"Alias": "",
"SnsFlag": 0,
"UniFriend": 0,
"DisplayName": "",
"ChatRoomId": 0,
"KeyWord": "fil",
"EncryChatRoomId": "",
"IsOwner": 0
}],
"SyncKey": {
"Count": 4,
"List": [{
"Key": 1,
"Val": 704152857
}, {
"Key": 2,
"Val": 704152894
}, {
"Key": 3,
"Val": 704152870
}, {
"Key": 1000,
"Val": 1532075042
}]
},
"User": {...},
"ChatSet": "...",
"SKey": "@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp",
"ClientVersion": 3697797,
"SystemTime": 1132000000,
"GrayScale": 1,
"InviteStartCount": 40,
"MPSubscribeMsgCount": 0,
"MPSubscribeMsgList": [],
"ClickReportInterval": 600000
}
Далее необходимо включить уведомление о состоянии сообщений. Мы видим следующий запрос POST:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxstatusnotify?lang=zh_CN&pass_ticket=AFsdZ7eHxxxxxxxxxxxxxxxxfr1vjHPn=
Параметры URL:
числовое имя | пример значения | описание |
---|---|---|
lang | zh_CN | язык, zh_CN означает китайский язык; |
pass_ticket | AFsdZ7eHxxxxxxxxxxxxxxxxfr1vjHPn= | как и раньше; |
Данные POST (JSON):
{
"BaseRequest": {
"DeviceID": "e81xxxxxxxxx7686",
"Sid": "8rwxxxxxxxxxHq2P",
"Skey": "@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp",
"Uin": "26xxx7"
},
"ClientMsgId": 1532xxxxx3374,
"Code": 3,
"FromUserName": "@56a0a9xxxxxxxxxxxxx54w0dxxxxbfab",
"ToUserName": "@56a0a9xxxxxxxxxxxxx54w0dxxxxbfab"
}
Анализ параметров POST:
Параметр | Пример значения | Описание |
---|---|---|
BaseRequestB | { "DeviceID":"e81xxxxxxxxx7686", "Sid":"8rwxxxxxxxxxHq2P", "Skey":"@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp", "Uin":"26xxx7" |
Каждый запрос POST отправляет BaseRequest, где DeviceID — буква e, за которой следуют 15 случайных строк, а остальные три параметра — это предыдущая аутентифицированная информация. |
ClientMsgId | 1532xxxxx3374 | 13-значный временной штамп; |
Code | 3 | фиксированное значение; |
FromUserName | @56a0a9xxxxxxxxxxxxx54w0dxxxxbfab | получено при загрузке страницы; |
ToUserName | @56a0a9xxxxxxxxxxxxx54w0dxxxxbfab | то же, что и FromUserName; |
Ответ сервера:
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
},
"MsgID": "2271xxxxxxxxxxxxx44"
}
Сервер возвращает данные:
window.synccheck={retcode:"0",selector:"2"}
Анализ возвращаемых данных:
Название | Пример значения | Описание |
---|---|---|
retcode | 0 | Указывает текущее состояние онлайн. 0: нормально 1100: сбой/выход из WeChat 1101: вход в WeChat с другого устройства |
selector | 2 | Указывает состояние сообщения. 0: нормально 2: есть новые сообщения 4: обнаружено изменение примечания контакта 7: действие на телефоне |
Далее можно увидеть запрос GET для получения полного списка контактов:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?lang=zh_CN&pass_ticket=AFsdZ7eHxxxxxxxxxxxxxxxxfr1vjHPn%253D&r=1532190636970&seq=0&skey=@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp
Параметры URL:
Параметр | Пример значения | Описание |
---|---|---|
lang | zh_CN | Язык; |
pass_ticket | AFsdZ7eHxxxxxxxxxxxxxxxxfr1vjHPn%253D | То же самое, что и раньше; |
r | 1532190636970 | 13-значное время; |
seq | 0 | Фиксированное значение; |
skey | @crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp | То же самое, что и раньше; |
Сервер возвращает данные:
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
},
"MemberCount": 1,
"MemberList": [{
"Uin": 0,
"UserName": "weixin",
"NickName": "微信团队",
"HeadImgUrl": "/cgi-bin/mmwebwx-bin/webwxgeticon?seq=1&username=weixin&skey=@crypt_4fb399da_91a345e0be9deca5d61b183fc36a3a93",
"ContactFlag": 1,
"MemberCount": 0,
"MemberList": [],
"RemarkName": "",
"HideInputBarFlag": 0,
"Sex": 0,
"Signature": "微信团队官方帕啷",
"VerifyFlag": 56,
"OwnerUin": 0,
"PYInitial": "WXTD",
"PYQuanPin": "weixintuandui",
"RemarkPYInitial": "",
"RemarkPYQuanPin": "",
"StarFriend": 0,
"AppAccountFlag": 0,
"Statues": 0,
"AttrStatus": 4,
"Province": "",
"City": "",
"Alias": "",
"SnsFlag": 0,
"UniFriend": 0,
"DisplayName": "",
"ChatRoomId": 0,
"KeyWord": "wei",
"EncryChatRoomId": "",
"IsOwner": 0
}],
"Seq": 0
}
Описание полей в User:
"Uin": 0,
"UserName": имя пользователя, один "@" обозначает друга, два "@" обозначают группу
"NickName": псевдоним
"HeadImgUrl": URL-адрес изображения аватара
"ContactFlag": 1-друг, 2-группа, 3-публичный аккаунт
"MemberCount": количество членов группы, действует только в информации о группе
"MemberList": список участников
"RemarkName": примечание к имени
"HideInputBarFlag": 0,
"Sex": пол, 0-не установлен (публичный аккаунт, конфиденциальность), 1-мужской, 2-женский
"Signature": описание публичного аккаунта или личная подпись друга
"VerifyFlag": 0,
"OwnerUin": 0,
"PYInitial": аббревиатура имени пользователя
"PYQuanPin": полное написание имени пользователя
"RemarkPYInitial":аббревиатура примечания
"RemarkPYQuanPin":полное написание примечания
"StarFriend": является ли друг отмеченным
0-нет
1-да
"AppAccountFlag": 0,
"Statues": 0,
"AttrStatus": 119911,
"Province": провинция
"City": город
"Alias":
"SnsFlag": 17,
"UniFriend": 0,
"DisplayName": "",
"ChatRoomId": 0,
"KeyWord":
"EncryChatRoomId": ""
Затем можно увидеть пакетный запрос POST для получения информации о конкретных контактах:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?type=ex&r=1532246093335&lang=zh_CN&pass_ticket=AFsdZ7eHxxxxxxxxxxxxxxxxfr1vjHPn%253D
Этот запрос используется для пакетного получения информации о друзьях или пакетного получения информации об участниках группового чата.
Параметры URL:
Параметр | Пример значения | Описание |
---|---|---|
type | ex | Неизвестно, что это значит; |
r | 1532246093335 | 13-значное время; |
lang | zh_CN | Язык; |
pass_tickt | AFsdZ7eHxxxxxxxxxxxxxxxxfr1vjHPn%253D | Ранее полученный; |
Данные POST (JSON):
{
"BaseRequest": {
"DeviceID": "e81xxxxxxxxx7686",
"Sid": "8rwxxxxxxxxxHq2P",
"Skey": "@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp",
"Uin": "26xxx7"
},
"Count": 2,
"List": [
{
"EncryChatRoomId": "",
"UserName": "@@76feaa87c63576aaxxxxxxxxeaaa7030c60a09d33"
},
{
"ChatRoomId": "",
"UserName": "@@55664b9ab69bbe5e6aaxxxxxxxxx778c17e11e9dab09c9a1"
}
]
}
Параметры POST:
Параметр | Пример значения | Описание |
---|---|---|
BaseRequest | Основные параметры запроса, такие же, как и ранее; | |
Count | Количество пользователей, которых нужно запросить; |
Сформированный список, в котором содержится информация о пользователях, чьи данные необходимо получить. Если необходимо получить информацию о друзьях, то поля EncryChatRoomId или ChatRoomId должны быть пустыми, а поле UserName должно содержать имя друга. Если же необходимо получить информацию об участниках группового чата, то в полях EncryChatRoomId и ChatRoomId указывается идентификатор группового чата, а в поле UserName — имя участника.|
Сервер возвращает следующие данные:
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
},
"Count": 2,
"ContactList": [{
"Uin": 0,
"UserName": "@@76feaa87c635763438059aaeaaa7030c60a09d33",
"NickName": "一啣ç<span class=\"emoji emoji1f525\"></span>¾¤)",
"HeadImgUrl": "/cgi-bin/mmwebwx-bin/webwxgetheadimg?seq=704138898&username=@@76feaa87c635763438059aaeaaa7030c60a09d33&skey=",
"ContactFlag": 3,
"MemberCount": 80,
"MemberList": [
{
"Uin": 0,
"UserName": "@3a13860046f9f5cac66faba26f2bd0537f535",
"NickName": "龎",
"AttrStatus": 2147437,
"PYInitial": "",
"PYQuanPin": "",
"RemarkPYInitial": "",
"RemarkPYQuanPin": "",
"MemberStatus": 0,
"DisplayName": "",
"KeyWord": ""
}, ...
],
"RemarkName": "",
"HideInputBarFlag": 0,
"Sex": 0,
"Signature": "",
"VerifyFlag": 0,
"OwnerUin": 0,
"PYInitial": "",
"PYQuanPin": "",
"RemarkPYInitial": "",
"RemarkPYQuanPin": "",
"StarFriend": 0,
"AppAccountFlag": 0,
"Statues": 0,
"AttrStatus": 0,
"Province": "",
"City": "",
"Alias": "",
"SnsFlag": 0,
"UniFriend": 0,
"DisplayName": "",
"ChatRoomId": 0,
"KeyWord": "",
"EncryChatRoomId": "@5fd8877457351e3a697",
"IsOwner": 0
}, {
"Uin": 0,
"UserName": "@f7dee38d1c3626c0e421c1f66deac0906559ac",
"NickName": "尕娅",
"HeadImgUrl": "/cgi-bin/mmwebwx-bin/webwxgeticon?seq=686458815&username=@f7dee38d1c3626c0e421c1f66deac0906559ac&skey=",
"ContactFlag": 259,
"MemberCount": 0,
"MemberList": [],
"RemarkName": "啢潧",
"HideInputBarFlag": 0,
"Sex": 2,
"Signature": "ä½ è<span class=\"emoji emoji1f48b\"></span>",
"VerifyFlag": 0,
"OwnerUin": 0,
"PYInitial": "XY",
"PYQuanPin": "",
"RemarkPYInitial": "",
"RemarkPYQuanPin": "",
"StarFriend": 0,
"AppAccountFlag": 0,
"Statues": 0,
"AttrStatus": 1047,
"Province": "å京",
"City": "",
"Alias": "",
"SnsFlag": 49,
"UniFriend": 0,
"DisplayName": "",
"ChatRoomId": 0,
"KeyWord": "",
"EncryChatRoomId": "0",
"IsOwner": 0
}]
}
ContactList — это список полученных данных о контактах.
При изменении примечания контакта браузер отправляет следующий POST-запрос:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxoplog
Данные POST (JSON):
{
"BaseRequest": {
"DeviceID": "e81xxxxxxxxx7686",
"Sid": "8rwxxxxxxxxxHq2P",
"Skey": "@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp",
"Uin": "26xxx7"
},
"CmdId": 2,
"RemarkName": "Новый примечание",
"UserName": "@07a2e8b4a1f98eb78a7xxxxxxxxxxxx5b7bc4908376xxx05917b"
}
Анализ параметров POST:
Параметр | Пример значения | Описание |
---|---|---|
BaseRequest | Основные параметры запроса, такие же, как и в других запросах; | |
CmdId | 2 | Фиксированное значение; возможно, есть и другие значения для обозначения различных типов операций. |
RemarkName | Новое примечание | Новое примечание; |
UserName | @07a2e8b4a1f98eb78a7xxxxxxxxxxxx5b7bc4908376xxx05917b | Имя пользователя, чьё примечание нужно изменить. |
Ответ сервера:
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
}
}
BaseResponse.Ret означает успешное выполнение операции.
В запросе 2.4 при каждом ответе на запрос с параметрами selector равными 2 или 6 происходит следующий POST-запрос для получения новых сообщений с сервера:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=8rwxxxxxxxxxHq2P&skey=@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp&pass_ticket=AFsdZ7eHxxxxxxxxxxxxxxxxfr1vjHPn%253D
Параметры URL:
Параметр | Пример значения | Описание |
---|---|---|
sid | 8rwxxxxxxxxxHq2P | Такой же, как в предыдущих запросах; |
skey | @crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp | Такой же, как в предыдущих запросах; |
pass_ticket | AFsdZ7eHxxxxxxxxxxxxxxxxfr1vjHPn%253D | Такой же, как в предыдущих запросах. |
Данные POST (JSON):
{
"BaseRequest": {
"DeviceID": "e2089xxxxx902803",
"Sid": "8rwxxxxxxxxxHq2P",
"Skey": "@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp",
"Uin":
} **Ответ:**
POST параметры:
Параметр | Пример значения | Описание |
---|---|---|
BaseRequest | {«DeviceID»: «e81xxxxxxxxx7686», «Sid»: «8rwxxxxxxxxxHq2P», «Skey»: «@crypt_jkde99da_b4xxxxxxxxxxxxxxx76d9yualp», «Uin»: «26xxx7»} | Каждый POST запрос отправляет BaseRequest, где DeviceID — это буква e и 15 случайных символов, а остальные три параметра — это ранее полученные данные аутентификации. |
SyncKey | {«Count»: ..., «List»: [...]} | Ранее полученный SyncKey, который обновляется в каждом запросе после первого получения данных. Первый раз данные получаются при инициализации, затем — в последующих запросах. |
Сервер возвращает данные: { "BaseResponse": { "Ret": 0, "ErrMsg": "" }, "AddMsgCount": 1, "AddMsgList": [{ "MsgId": "462399962004142457", "FromUserName": "@56a0a9xxxxxxxxxxxxx54w0dxxxxbfab", "ToUserName": "@56a0a9xxxxxxxxxxxxx54w0dxxxxbfab", "MsgType": 51, "Content": "", "Status": 3, "ImgStatus": 1, "CreateTime": 1532190642, "VoiceLength": 0, "PlayLength": 0, "FileName": "", "FileSize": "", "MediaId": "", "Url": "", "AppMsgType": 0, "StatusNotifyCode": 4, "StatusNotifyUserName": "...", "RecommendInfo": { "UserName": "", "NickName": "", "QQNum": 0, "Province": "", "City": "", "Content": "", "Signature": "", "Alias": "", "Scene": 0, "VerifyFlag": 0, "AttrStatus": 0, "Sex": 0, "Ticket": "", "OpCode": 0 }, "ForwardFlag": 0, "AppInfo": { "AppID": "", "Type": 0 }, "HasProductId": 0, "Ticket": "", "ImgHeight": 0, "ImgWidth": 0, "SubMsgType": 0, "NewMsgId": 462399962004142457, "OriContent": "", "EncryFileName": "" }], "ModContactCount": 0, "ModContactList": [], "DelContactCount": 0, "DelContactList": [], "ModChatRoomMemberCount": 0, "ModChatRoomMemberList": [], "Profile": { "BitFlag": 0, "UserName": { "Buff": "" }, "NickName": { "Buff": "" }, "BindUin": 0, "BindEmail": { "Buff": "" }, "BindMobile": { "Buff": "" }, "Status": 0, "Sex": 0, "PersonalCard": 0, "Alias": "", "HeadImgUpdateFlag": 0, "HeadImgUrl": "", "Signature": "" }, "ContinueFlag": 0, "SyncKey": { "Count": 7, "List": [{ "Key": 1, "Val": 704153081 }, { "Key": 2, "Val": 704153169 }, { "Key": 3, "Val": 704153152 }, { "Key": 11, "Val": 704152941 }, { "Key": 201, "Val": 1532190642 }, { "Key": 1000, "Val": 1532190561 }, { "Key": 1001, "Val": 1532180114 }] }, "SKey": "", "SyncCheckKey": { "Count": 7, "List": [{ "Key": 1, "Val": 704153081 }, { "Key": 2, "Val": 704153169 }, { "Key": 3, "Val": 704153152 }, { "Key": 11, "Val": 704152941 }, { "Key": 201, "Val": 1532190642 }, { "Key": 1000, "Val": 1532190561 }, { "Key": 1001, "Val": 1532180114 }] } }
* *AddMsgCount* — количество новых сообщений.
* *AddMsgList* — список новых сообщений.
* *MsgType* может принимать следующие значения:
* 1 — текстовое сообщение;
* 3 — изображение;
* 34 — голосовое сообщение;
* 37 — VERIFYMSG (подтверждающее сообщение). |Msg.Type|3|消息类型;同3.1中接收的消息类型;|
|Msg.MediaId||4.3接口中返回的MediaId;|
|Scene|0|固定值;|
Сервис возвращает данные:
```json
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
},
"MsgID": "28832......8291836",
"LocalID": "1536.....54390527"
}
Web-версия WeChat отправляет изображение. Необходимо сначала использовать интерфейс 4.3 для загрузки медиафайла на сервер, а затем использовать интерфейс 4.4 для отправки информации об изображении.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )