本系列会讲述微信机器人技术的实现,第一讲主要了解微信网页版给我们提供的http接口,这一步是做一个基于微信网页版机器人的基础和难点 。
本讲将微信网页版的主要接口罗列出,并给出了入参和返回值的含义和用法 。一些不常用的接口后续会逐渐补充,也欢迎大家与我交流 。
一、网页版微信提供的HTTP接口 1、获取uuid
- 说明:用于获取显示二维码以及登录所需的uuid,标识获取二维码和扫码的为同一个用户
- 请求方式:GET
- 地址:https://login.wx.qq.com/jslogin
- get参数:
- 参数 示例值 说明 appid wx782c26e4c19acffb 固定值 fun new 固定值 lang zh_CN 表示中文字符集
- 返回 :
- 说明:展示一张用于登陆的二维码图片,地址里的**{uuid}传第一步所获取的uuid**
- 请求方式:GET
- 地址:https://login.wx.qq.com/qrcode/{uuid}
- get参数:
- 参数 示例值 说明 t webwx 固定值
- 返回:二维码的二进制流,浏览器打开会直接显示一张二维码图片
- 说明:尝试登录 。若此时用户手机已完成扫码并点击登录,则返回一个真正用于登录的url地址 。否则接口大概10s后返回未扫码或未登录的状态码
- 请求方式:GET
- 地址:https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login
- get参数:
- 参数 示例值 说明 tip 1 1:未扫描 0:一扫描 uuid wb7R2kx9dA== 第一步所获取的uuid
- 返回
window.code=200(408为未扫码,201为已扫码但未点击登录,200为成功登录);window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AfrMMbhsnElmA7xc1R9CWUq-@qrticket_0&uuid=4ZnG7WZ0Cg==&lang=zh_CN&scan=1520738372"; 4、登录并获取公参
- 说明:访问后可获取一组公参,用于之后访问所有的接口 。这也意味着如果这部分数据泄露,代表其他人可以在这段时间内随意操作你的微信(仅限于网页版支持的操作)
- 请求方式:GET
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
- get参数:直接用上一步返回的redirect_uri中的所有参数即可
- 返回
skey 、 wxsid 、 wxuin 、 pass_ticket
,以及所返回Cookie中的
webwx_data_ticket , webwx_auth_ticket
<error> <ret>0</ret> <message></message> <skey>@crypt_8b4f09cc_a5871dc10130a48703b9afd5602152e4</skey> <wxsid>+urBrYI292xoIknf</wxsid> <wxuin>211722515</wxuin> <pass_ticket>qg%2BL%2BfjNnoHyqYsL3xj0KoNi5nqchsInPWWSxDwqCJ8%3D</pass_ticket> <isgrayscale>1</isgrayscale> </error> 5、微信初始化
- 说明:初始化微信首页栏的联系人、公众号等(不是通讯录里的联系人),初始化登录者自己的信息(包括昵称等),初始化同步消息所用的SycnKey
- 请求方式:POST
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit
- get参数:
- 参数 示例值 说明 pass_ticket qg%2BL%2BfjNnoHyqYsL3xj0KoNi5nqchsInPWWSxDwqCJ8%3D 公参中的值
- post参数:(json格式)
- 返回
skey 、 wxsid 、 wxuin 、 pass_ticket ,以及所返回Cookie中的 webwx_data_ticket ,webwx_auth_ticket
{ "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": 700722177 }, { "Key": 2, "Val": 700723184 }, { "Key": 3, "Val": 700723136 }, { "Key": 1000, "Val": 1520723642 }] }, "User": { 登录者的信息 "Uin": 211722515, "UserName": "@f4c054c78f40743b095b85409dbdc1b3", 微信随机码,每个联系人和群都有,每次登录由微信端随机分配 "NickName": "测试微信号的昵称", "HeadImgUrl": "/cgi-bin/mmwebwx-bin/webwxgeticon?seq=1730335888&username=@f4c054c78f40743b095b85409dbdc1b3&skey=@crypt_8b4f09cc_a5871dc10130a48703b9afd5602152e4", "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": "filehelper,weixin,@52d5b97ca1bed2d76b405fba4c4ded6c893bd6b28cc514344dd9a7d8cd766286,@4baf3160e84b9e726efd1a0629d16b01,@@54a4fd2c81875aac779935330b67bf7905793bb66da9c6d4029f18f4927b3c1c,@@9542a551bfcafe1ae83b931d21b318573c8c6e2c67f3eaef189e7e9179cdb2d1,@ac3532106e21aa250cc746055a0c72d5,@d593e5745931641d060cdc9fcda5d996,@34f12e07290f62677137181998bf4c1eb0a9c128f2355562e8cc7967d0f9a044,@@31e445167b2fd23404b672f6f1a4a805fffbd369d6bae8efe959240a6c50cf46,@@c5fa6cb3779e217b5ae3e9b3d53faef09d6cde9615106ebe0a115de38976c7fc,@513fcb83ccc696b9d90206f0e80eb8e341e35e1f464b08446795132d180db040,@@b944058f6fd91b850867bb1f534205e86460b4b3a947f4ca4bd49109e532116f,@@859e98412d1faf03abdf784e97ed66b25c52dccc7ec446d681b2906525262fcd,@257fb1c805c1429ca45a737143d7a7e1302487d9bbb268bf2dd8a564bf814186,filehelper,@@dc3e7f04b1ccead2ecf8c50eaa476d6c71dc3f7396696be0724002e1ee228812,@@d1758feb60b1ff7ad262b8fb05ee9f1c1821722a0376a1431cee351c75cbebc3,@@e49ba13661221be9c9f81fb952391754ee74f98d2457f46364bdb745943b2bfc,@@a5cdd9eb797807cc081bc0e3ab3f101c9dc18d86d527c5defed8e8fd9010ec06,@@dfab3cde2a39ccdf31da803381528f130dae207583a5c088514bf4e1a0af49ab,@@13776e6ea475a8e86a46e4f242917db146664572e910dcca976047cb31e660f4,@@d1999c210e6f9a19d28b4a8fcc391a7b612c9765ff5bd078aaa022e1cc8bbf5c,", "SKey": "@crypt_8b4f09cc_ce5178b3c156048fff69cdf1fccc31e4", "ClientVersion": 637927733, "SystemTime": 1520742050, "GrayScale": 1, "InviteStartCount": 40, "MPSubscribeMsgCount": 1, "MPSubscribeMsgList": [{ "UserName": "@4baf3160e84b9e726efd1a0629d16b01", "MPArticleCount": 1, "MPArticleList": [{ "Title": "不动手就能逛淘宝,这又是什么“黑科技”?英国小哥表示:中文说得溜就是这么方便! | 解码新时代", "Digest": "张口说话就能逛淘宝,沉溺“黑科技”的英国小哥表示不想回家了!", "Cover": "http://mmbiz.qpic.cn/mmbiz_jpg/8vd2Hk2TS2Pfibh9ILZKicg5icBlWKHBIVibVM8Vupsg3NsfSnibzptB9XQxArqzFmfOw7nlk6ByTdNvWBoBf4NjVmQ/640?wxtype=jpeg&wxfrom=0", "Url": "http://mp.weixin.qq.com/s?__biz=MjM5MzI3NTI2MA==&mid=2651224106&idx=1&sn=0a5772013ae7c14dd9ac854f30fad934&chksm=bd6b54398a1cdd2f6f9c1d61c93aa3248968b8b56206a0af85341f510322b21548c975d8ebba&scene=0#rd" }], "Time": 1520732033, "NickName": "中国日报双语新闻" }], "ClickReportInterval": 600000 } 6、获取****联系人列表
- 说明:获取手机通讯录中的所有联系人(包括人、群、公众号等)
- 请求方式:POST
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact
- get参数:
- 参数 示例值 说明 pass_ticket yp5RfCpb%2FsNVex0Uepn1BWXNCYCqTfqe8NOYzan%2B4Y4%3D 公参中的值 skey @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 公参中的值
- post参数:
- 返回
{ "BaseResponse": { "Ret": 0, "ErrMsg": "" }, "MemberCount": 771, "MemberList": [{ "Uin": 0, "UserName": "@9c30c8d81e75a7eff0603cdd5de860b18fe92995845473fc2f0cda6ed76053cb",(微信随机码,潜规则:前面@为联系人,@@为群) "NickName": "Nandi Wardhana",(联系人的微信昵称) "HeadImgUrl": "/cgi-bin/mmwebwx-bin/webwxgeticon?seq=620986971&username=@9c30c8d81e75a7eff0603cdd5de860b18fe92995845473fc2f0cda6ed76053cb&skey=@crypt_8b4f09cc_1b827f84b1535b6be801f00427499050", "ContactFlag": 3, "MemberCount": 0,(如果是群,该字段表示成员数量) "MemberList": [],(群成员列表) "RemarkName": "",(备注名称,如果空则说明没有给他备注) "HideInputBarFlag": 0, "Sex": 1,(性别,1为男,2为女) "Signature": "Stay young naturally...",(签名) "VerifyFlag": 0,(用来判断是否是公众号或服务号的字段) "OwnerUin": 0, "PYInitial": "NANDIWARDHANA", "PYQuanPin": "NandiWardhana",(名字拼音全拼) "RemarkPYInitial": "", "RemarkPYQuanPin": "", "StarFriend": 0, "AppAccountFlag": 0, "Statues": 0, "AttrStatus": 2359303, "Province": "Jakarta Raya",(省份) "City": "",(城市) "Alias": "", "SnsFlag": 17, "UniFriend": 0, "DisplayName": "",(如果是群内成员,该字段表示群内名称) "ChatRoomId": 0, "KeyWord": "", "EncryChatRoomId": "",(如果是群,该字段表示群的id,不同于微信随机码@@那个) "IsOwner": 0 }, ... 此处省略剩下770个联系人信息 ] } 7、批量获取联系人详情
- 说明:批量获取联系人详情,人或群均可 。获取群详情主要是获取群内联系人列表 。获取人详情主要是获取群内的某个人的详细信息 。
- 请求方式:POST
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxbatchgetcontact
- get参数:
- 参数 示例值 说明 pass_ticket yp5RfCpb%2FsNVex0Uepn1BWXNCYCqTfqe8NOYzan%2B4Y4%3D 公参中的值 type ex 我也不知道这是啥意思
- post参数:
- **返回:****
- 说明:同步消息检查 。这里只做检查不做同步,如果检查出有新消息,再掉具体同步的接口 。
- 请求方式:POST
- 地址:https://webpush2.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck
- get参数:
- 参数 示例值 说明 deviceid e547171618594402 参考5中的生成方式 sid +FhlgkGS3wD/GKQw 公参中的值 skey @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 公参中的值 synckey 1_700722177|2_700724323|3_700724315|1000_1520925834 微信初始化后获取的4个key,这些key会随着每次获取最新消息(参见9)后的返回值更新,其目的在于每次同步消息后记录一个当前同步的状态 。 uin 211722515 公参中的值
- 返回:
- 说明:当同步检查接口显示有新消息时,调用该接口获取具体的新消息 。此处的新消息为广义的,包括消息,修改群名,群内成员变化,加好友等 。
- 请求方式:POST
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync
- get参数:
- 参数 示例值 说明 sid +FhlgkGS3wD/GKQw 公参中的值 skey @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 公参中的值 uin 211722515 公参中的值
- **post参数**:**
- 主要有AddMsgList,ModContactList,DelContactList,新一轮消息同步的synckey
略
11、修改群聊
略
12、发送消息
- 说明:发送文本消息(包括表情),不能发送图片或文件 。
- 请求方式:POST
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg
- get参数:
- 参数 示例值 说明 pass_ticket yp5RfCpb%2FsNVex0Uepn1BWXNCYCqTfqe8NOYzan%2B4Y4%3D 公参中的值
- *post参数*:
- 返回:
- 说明:发送图片时需要先调用该接口将图片上传至微信服务器,微信会返回一个图片的id,发送消息时携带该id即可发送图片 。
- 请求方式:POST(此处的Content-Type应该设置为multipart/form-data; boundary=…------------------41184676334)
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxuploadmedia
- get参数:
- 参数 示例值 说明 pass_ticket yp5RfCpb%2FsNVex0Uepn1BWXNCYCqTfqe8NOYzan%2B4Y4%3D 公参中的值
- *post参数*:
crypt_8b4f09cc_1b827f84b1535b6be801f00427499050", "DeviceID": "e787605163473377" }, "ClientMediaId": 1520935168955, "TotalLen": 845941, 文件大小 "StartPos": 0, "DataLen": 845941, 文件大小 "MediaType": 4, 固定为4,表示图片 "FromUserName": "@abf90232027117affa7f0c0df3d1bf20", 该参数可填可不填 "ToUserName": "filehelper", 该参数可填可不填 "FileMd5": "ba45c8f60456a672e003a875e469d0eb" 该参数随机一个uuid即可 }
-----------------------------41184676334 Content-Disposition: form-data; name="webwx_data_ticket" gSenocajd7UaXQesCD3smJ5p -----------------------------41184676334 Content-Disposition: form-data; name="pass_ticket" yp5RfCpb/sNVex0Uepn1BWXNCYCqTfqe8NOYzan+4Y4= -----------------------------41184676334 Content-Disposition: form-data; name="filename"; filename="Desert.jpg" Content-Type: application/octet-stream此处为该文件的流,前端写成<input type="file">就是这个效果
- **返回:**可能分批次上传,最后上传成功时返回如下结果
- 说明:上一步上传文件到微信服务器成功后,调用该发送图片接口 。
- 请求方式:POST
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsgimg
- get参数:
- 参数 示例值 说明 pass_ticket yp5RfCpb%2FsNVex0Uepn1BWXNCYCqTfqe8NOYzan%2B4Y4%3D 公参中的值 fun async
- ***post参数*:**同发文本消息,只是多一个MediaId
- **返回:**同发文本消息
- 说明:上一步上传文件到微信服务器成功后,调用该发送图片接口 。
- 请求方式:GET
- 地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsgimg
- get参数:
- 参数 示例值 说明 MsgID 3176600141007621447 服务端返回的消息id skey @crypt_8b4f09cc_1b827f84b1535b6be801f00427499050 公参中的值 type slave 该参数有则为缩略图,没有则为原图
- ***携带3个cookie的值*:**wxuin,wxsid,webwx_data_ticket
- **返回:**图片的流
- BaseResponse里的Ret
- 同步消息检查返回值中retcode和selector
- 消息类型
推荐阅读
- 世界四大文明古国汇总 四大文明古国
- 产前奶瓶消毒提前多久
- 胎心150是唐氏儿吗
- 40岁生二胎对身体的影响
- 剖腹产顺产哪个痛
- 怀孕怎么防止老公出轨
- 35周双顶径92正常吗
- 孕38周胎死腹中的症状
- 胎停了一个月多危险么