网页版微信提供的API接口
1、获取uuid
说明:用于获取显示二维码以及登录所需的uuid,标识获取二维码和扫码的为同一个用户
请求方式:GET
get参数:
参数 示例值 说明 appid wx782c26e4c19acffb 固定值 fun new 固定值 lang zh_CN 表示中文字符集 返回:
window.QRLogin.code = 200; window.QRLogin.uuid = "xxx"
注:这里的appid就是在微信开放平台注册的应用的AppID。网页版微信有两个AppID,早期的是
wx782c26e4c19acffb
,在微信客户端上显示为应用名称为Web微信
;现在用的是wxeb7ec651dd0aefa9
,显示名称为微信网页版
。
2、生成登陆二维码
- 说明:展示一张用于登陆的二维码图片,地址里的**{uuid}传第一步所获取的uuid**
- 请求方式:GET
- 地址:https://login.wx.qq.com/qrcode/{uuid}
- get参数:
参数 示例值 说明 t webwx 固定值(亲测可以留空) - 返回:二维码的二进制流,浏览器打开会直接显示一张二维码图片
3、轮询二维码扫描登录接口
- 说明:尝试登录。若此时用户手机已完成扫码并点击登录,则返回一个真正用于登录的url地址。否则接口大概10s后返回未扫码或未登录的状态码
- 请求方式:GET
- 地址:https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login
- get参数:
参数 示例值 说明 tip 1 1:未扫描 0:一扫描 uuid xxx 第一步所获取的uuid - 返回:redirect_uri的值可以直接用于下一步的“登录并获取公参”请求
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";
4、登录并获取公参
- 说明:访问后可获取一组公参,用于之后访问所有的接口。这也意味着如果这部分数据泄露,代表其他人可以在这段时间内随意操作你的微信(仅限于网页版支持的操作)
- 请求方式:GET
- 地址:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
- get参数:
参数 示例值 params ticket: xxx
uuid: xxx
lang: zh_CN语言
scan: xxx
fun: new必填
- 返回:获取并存储该返回值中的四个参数skey、wxsid、wxuin、pass_ticket,以及所返回Cookie中的webwx_data_ticket,webwx_auth_ticket
<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>
skey
wxsid
wxuin
pass_ticket
webwx_data_ticket
webwx_auth_ticket
保存全局跟本地,下次打开直接使用,不用扫码登陆。
5、微信初始化
- 说明:初始化微信首页栏的联系人、公众号等(不是通讯录里的联系人),初始化登录者自己的信息(包括昵称等),初始化同步消息所用的SycnKey
- 请求方式:POST
- 类型:JSON
- 请求头:ContentType: application/json; charset=UTF-8
- 地址:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit
- get参数:
参数 示例值 说明 pass_ticket qg%2BL%2BfjNnoHyqYsL3xj0KoNi5nqchsInPWWSxDwqCJ8%3D 公参中的值 - **post参数
json
**:{ BaseRequest: { Uin: 211722515, Sid: +urBrYI292xoIknf, Skey: @crypt_8b4f09cc_a5871dc10130a48703b9afd5602152e4, DeviceID: e545297464380306 //上边的DeviceID是设备id(自行生成跟保存),每次登录过程中保持一致。 } }
- 返回
json
:{ "BaseResponse": { "Ret": 0, "ErrMsg": "" }, "Count": 11, "ContactList": [{//微信首页的联系人,不是保存在通讯录中的联系人 "Uin": 0, "UserName": "filehelper", "NickName": "文件传输助手", "HeadImgUrl": "/cgi-bin/mmwebwx-bin/webwxgeticon?seq=680769514&username=filehelper&skey=@crypt_8b4f09cc_a5871dc10130a48703b9afd5602152e4", "ContactFlag": 1, "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 }, //......此处省略剩下的10个联系人信息 ], "SyncKey": {//同步消息时用的syncKey,用于之后轮询消息的接口 "Count": 4, "List": [ { "Key": 1, "Val": 635705559 }, //...此处省略剩下的3条信息 ] }, "User": {//登录者的信息 "Uin": xxx, "UserName": xxx,//微信随机码,每个联系人和群都有,每次登录由微信端随机分配 "NickName": xxx, "HeadImgUrl": xxx, "RemarkName": "", "PYInitial": "", "PYQuanPin": "", "RemarkPYInitial": "", "RemarkPYQuanPin": "", "HideInputBarFlag": 0, "StarFriend": 0, "Sex": 1, "Signature": "这里是签名", "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 }
6、获取联系人列表
- 说明:获取手机通讯录中的所有联系人(包括人、群、公众号等)
- 请求方式:POST
- 类型:JSON
- 请求头:ContentType: application/json; charset=UTF-8
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact
- get参数:
参数 示例值 说明 pass_ticket qg%2BL%2BfjNnoHyqYsL3xj0KoNi5nqchsInPWWSxDwqCJ8%3D 公参中的值 skey @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 公参中的值 - **post参数
json
**:{ BaseRequest: { Uin: 211722515, Sid: +urBrYI292xoIknf, Skey: @crypt_8b4f09cc_a5871dc10130a48703b9afd5602152e4, DeviceID: e545297464380306 //上边的DeviceID是设备id(自行生成跟保存),每次登录过程中保持一致。 } }
- 返回
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,//性别,1为男,2为女 "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": "",//如果是群,该字段表示群的id,不同于微信随机码@@那个 "IsOwner": 0 }, ... ], "Seq": 0 }
VerifyFlag
== 0 是联系人,其他自行分析。
7、消息检查
- 说明:同步消息检查。这里只做检查不做同步,如果检查出有新消息,再掉具体同步的接口。
- 请求方式:GET
- 地址:https://webpush2.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck
- get参数:
参数 示例值 说明 deviceid e545297464380306 公参中的值 sid @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 公参中的值 skey +FhlgkGS3wD/GKQw 公参中的值 synckey 1_700722177|2_700724323|3_700724315|1000_1520925834 微信初始化后获取的4个key,这些key会随着每次获取最新消息(参见9)后的返回值更新,其目的在于每次同步消息后记录一个当前同步的状态。 uin 211722515 公参中的值 r 1648736166 时间戳 - 返回:
window.synccheck={retcode:"xxx",selector:"xxx"} retcode: 0 正常 -14 ticket错误 1 传入参数错误 1100 失败/登出微信 1101 未检测到登录 1102 cookie值无效 1203 当前登录环境异常,为了安全起见请不要在web端进行登录 1205 操作频繁 selector: 0 正常 2 有新消息 4 有人修改了自己的昵称或你修改了别人的备注 6 存在删除或者新增的好友信息 7 进入/离开聊天界面
8、获取最新消息
- 说明:当同步检查接口显示有新消息时,调用该接口获取具体的新消息。此处的新消息为广义的,包括消息,修改群名,群内成员变化,加好友等。
- 请求方式:POST
- 类型:JSON
- 请求头:ContentType: application/json; charset=UTF-8
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync
- get参数:
参数 示例值 说明 sid @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 公参中的值 skey +FhlgkGS3wD/GKQw 公参中的值 pass_ticket yp5RfCpb%2FsNVex0Uepn1BWXNCYCqTfqe8NOYzan%2B4Y4%3D 公参中的值 - **post参数
json
**:{ "BaseRequest": { "Uin": 211722515, "Sid": "+FhlgkGS3wD/GKQw", "Skey": "@crypt_8b4f09cc_1b827f84b1535b6be801f00427499050", "DeviceID": "e304534670317808" }, "SyncKey": { "Count": 4, "List": [{ "Key": 1, "Val": 700722177 }, { "Key": 2, "Val": 700724323 }, { "Key": 3, "Val": 700724315 }, { "Key": 1000, "Val": 1520925834 }] }, rr: -1648736166//时间戳取反 }
- 返回:主要有AddMsgList,ModContactList,DelContactList,新一轮消息同步的synckey
{ "BaseResponse": { "Ret": 0, "ErrMsg": "" }, "AddMsgCount": 1, //新增信息 "AddMsgList": [{ "MsgId": "320984672637990367", //服务端返回的消息id,可用于撤回接口参数。如果是图片,该参数还可以作为调用微信获取图片接口的参数之一。 "FromUserName": "@abf90232027117affa7f0c0df3d1bf20", //发消息的人 "ToUserName": "@abf90232027117affa7f0c0df3d1bf20", //发给谁 "MsgType": 51, //消息类型,1为文字,3为图片,34为语音...,具体请自行测试分析 "Content": "", "Status": 3, "ImgStatus": 1, "CreateTime": 1520927383, "VoiceLength": 0, "PlayLength": 0, "FileName": "", "FileSize": "", "MediaId": "", "Url": "", "AppMsgType": 0, "StatusNotifyCode": 4, "ForwardFlag": 0, "AppInfo": { "AppID": "", "Type": 0 }, "HasProductId": 0, "Ticket": "", "ImgHeight": 0, "ImgWidth": 0, "SubMsgType": 0, "NewMsgId": 320984672637990367, "OriContent": "", "EncryFileName": "" }], "ModContactCount": 0, //联系人修改 "ModContactList": [], "DelContactCount": 0, //联系人删除 "DelContactList": [], "ModChatRoomMemberCount": 0, //群内成员变动 "ModChatRoomMemberList": [],"ContinueFlag": 0, "SyncKey": { //新一轮消息更新用这些SyncKey "Count": 7, "List": [{ "Key": 1, "Val": 700722177 }, { "Key": 2, "Val": 700724325 }, { "Key": 3, "Val": 700724315 }, { "Key": 11, "Val": 700724093 }, { "Key": 201, "Val": 1520927383 }, { "Key": 1000, "Val": 1520925834 }, { "Key": 1001, "Val": 1520917874 }] }, "SKey": "", "SyncCheckKey": { //新一轮消息同步用这些Key "Count": 7, "List": [{ "Key": 1, "Val": 700722177 }, { "Key": 2, "Val": 700724325 }, { "Key": 3, "Val": 700724315 }, { "Key": 11, "Val": 700724093 }, { "Key": 201, "Val": 1520927383 }, { "Key": 1000, "Val": 1520925834 }, { "Key": 1001, "Val": 1520917874 }] } }
9、发送消息
- 说明:发送文本消息(包括表情),不能发送图片或文件。
- 请求方式:POST
- 类型:JSON
- 请求头:ContentType: application/json; charset=UTF-8
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg
- get参数:
参数 示例值 说明 pass_ticket yp5RfCpb%2FsNVex0Uepn1BWXNCYCqTfqe8NOYzan%2B4Y4%3D 公参中的值 - **post参数
json
**:{ "BaseRequest": { "Uin": 211722515, "Sid": "+FhlgkGS3wD/GKQw", "Skey": "@crypt_8b4f09cc_1b827f84b1535b6be801f00427499050", "DeviceID": "e107694022625701" }, "Msg": { "Type": 1, "Content": "呵呵", "FromUserName": "@abf90232027117affa7f0c0df3d1bf20", "ToUserName": "filehelper", "LocalID": "15209344559450477", //时间戳左移4位随后补上4位随机数 "ClientMsgId": "15209344559450477", //"MediaId": "" //如果是图片才传这个值 }, "Scene": 0 }
- 返回:
{ "BaseResponse": { "Ret": 0, "ErrMsg": "" }, "MsgID": "7615282929538795099", //服务端返回的消息id,可用于撤回等接口的参数 "LocalID": "15209344559450477" //本地的消息id,是你自己发请求时的参数 }
10、获取消息图片
说明:调用改接口显示消息里面的图片
请求方式:GET
get参数:
参数 示例值 说明 MsgID 3176600141007621447 服务端返回的消息ID type slave 略缩图,留空加载原图 skey @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 公参中的值 返回:二维码的二进制流,浏览器打开会直接显示一张二维码图片
11、获取消息语音
说明:调用改接口显示消息里面的语音音频
请求方式:GET
get参数:
参数 示例值 说明 MsgID 3176600141007621447 服务端返回的消息ID skey @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 公参中的值 返回:二维码的二进制流,浏览器打开会直接播放语音