AI 智能摘要
AI 正在生成文章简介,请稍候...
1、获取uuid
- 
说明:用于获取显示二维码以及登录所需的uuid,标识获取二维码和扫码的为同一个用户
 - 
请求方式:GET
 - 
地址:
https://login.weixin.qq.com/jslogin - 
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>
skeywxsidwxuinpass_ticketwebwx_data_ticketwebwx_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
 - 
地址:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg - 
get参数: | 参数 | 示例值 |说明 | | ------- | ------- |------- | | MsgID | 3176600141007621447 | 服务端返回的消息ID | | type | slave | 略缩图,留空加载原图 | | skey | @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 | 公参中的值 |
 - 
返回:二维码的二进制流,浏览器打开会直接显示一张二维码图片
 
11、获取消息语音
- 
说明:调用改接口显示消息里面的语音音频
 - 
请求方式:GET
 - 
地址:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetvoice - 
get参数: | 参数 | 示例值 |说明 | | ------- | ------- |------- | | MsgID | 3176600141007621447 | 服务端返回的消息ID | | skey | @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 | 公参中的值 |
 - 
返回:二维码的二进制流,浏览器打开会直接播放语音