微信网页版协议分析 资料整理

原创
2017/02/25 17:27
阅读数 6.9K

接口的调用步骤:
1、jslogin获取token生成二维码,然后登录状态轮循 login接口;用户扫描后会返回用户头像,可以替换掉二维码表示用户已经扫描过(此时还没有在手机上确认登录)
2、确认登录后,获取cookie webwxnewloginpage
3、初始化,获取密钥 webwxinit
4、报告自己的状态 webwxstatusnotify
5、轮循检查最新消息 synccheck,此时会selector==2。大约每隔25秒检查1次(感觉是服务器端hold住)
6、获取所有联系人 webwxgetcontact
7、获取一批12个联系人详情 webwxbatchgetcontact(此接口可以传递单个用户或群聊的username参数)
8、根据synccheck的结果,获取最近联系人和未读消息列表的 同步消息 webwxsync, MsgType==51
9、批量获取33个联系人详情 webwxbatchgetcontact
10、报告状态 webwxstatreport ,每隔10分钟汇报1次 (主要用于网页执行速度的性能时间统计,貌似可以不用提交)
11、批量获取2个联系人详情 webwxbatchgetcontact

其它注意事项:
1、进入聊天室要发webwxstatusnotify消息,和批量获取用户详情webwxbatchgetcontact;进入单聊不需要以上操作;
2、用户的username每次重新登录都会变化,如何识别同一个用户是个问题,建议用Alias+KeyWord+PYInitial+PYQuanPin,webwxbatchgetcontact接口还会返回 RemarkPYInitial,RemarkPYQuanPin也可以用上?
3、webwxstatreport报告要定期调用,否则会超期?
4、头像要异步加载,同时要传递cookie
5、微信各接口返回的数据格式的比较乱,有js,json,xml,不知微信怎么想的,为何不统一,另外输出也没定义charset头信息,导致在chrome develop tool上显示出乱码(据说firefox里不会乱码)
6、消息类型有: 1 文字 3 图片 51 最新有状态变化的帐号(公众号,微信id,群聊id等,可能值有1 2 5等,感觉像是进入了群聊、查看了公众号属性等操作就会发出op消息【待测试确认】,op id==2表示打开过了群?op id==5表示离开群?iOS设备才有此消息,安卓没有此消息)  10000 添加到群/移除出群的通知 49 公众号文章 43 语音 10002 消息撤回(op消息时,StatusNotifyUserName同时有值,表示通知的对象,一般是群帐号),47 GIF动画图
7、群聊时:群主发消息时,FromUserName是群主,ToUserName是群帐号;其他成员发消息时反过来了,ToUserName是成员帐号,FromUserName是群帐号。如何区分两者?成员发的消息内容Content里是以@xxxx<br/>内容(@后面的编码是群成员帐号),群主发的没有此前缀。
8、webwxnewloginpage登录时设置的cookie超期时间是12小时,如果保持一直在登录状态在后台运行是个问题?

完整消息类型:

MSGTYPE_TEXT: 1,
MSGTYPE_IMAGE: 3,
MSGTYPE_VOICE: 34,
MSGTYPE_VIDEO: 43,
MSGTYPE_MICROVIDEO: 62,
MSGTYPE_EMOTICON: 47,
MSGTYPE_APP: 49,
MSGTYPE_VOIPMSG: 50,
MSGTYPE_VOIPNOTIFY: 52,
MSGTYPE_VOIPINVITE: 53,
MSGTYPE_LOCATION: 48,
MSGTYPE_STATUSNOTIFY: 51,
MSGTYPE_SYSNOTICE: 9999,
MSGTYPE_POSSIBLEFRIEND_MSG: 40,
MSGTYPE_VERIFYMSG: 37,
MSGTYPE_SHARECARD: 42,
MSGTYPE_SYS: 10000,
MSGTYPE_RECALLED: 10002,  // 撤销消息

分析自官网js的接口 

API_webwxdownloadmedia: 'https://' + o + '/cgi-bin/mmwebwx-bin/webwxgetmedia',
API_webwxuploadmedia: 'https://' + o + '/cgi-bin/mmwebwx-bin/webwxuploadmedia',
API_webwxpreview: '/cgi-bin/mmwebwx-bin/webwxpreview',
API_webwxinit: '/cgi-bin/mmwebwx-bin/webwxinit?r=' + ~new Date,
API_webwxgetcontact: '/cgi-bin/mmwebwx-bin/webwxgetcontact',
API_webwxsync: '/cgi-bin/mmwebwx-bin/webwxsync',
API_webwxbatchgetcontact: '/cgi-bin/mmwebwx-bin/webwxbatchgetcontact',
API_webwxgeticon: '/cgi-bin/mmwebwx-bin/webwxgeticon',
API_webwxsendmsg: '/cgi-bin/mmwebwx-bin/webwxsendmsg',
API_webwxsendmsgimg: '/cgi-bin/mmwebwx-bin/webwxsendmsgimg',
API_webwxsendemoticon: '/cgi-bin/mmwebwx-bin/webwxsendemoticon',
API_webwxsendappmsg: '/cgi-bin/mmwebwx-bin/webwxsendappmsg',
API_webwxgetheadimg: '/cgi-bin/mmwebwx-bin/webwxgetheadimg',
API_webwxgetmsgimg: '/cgi-bin/mmwebwx-bin/webwxgetmsgimg',
API_webwxgetmedia: '/cgi-bin/mmwebwx-bin/webwxgetmedia',
API_webwxgetvideo: '/cgi-bin/mmwebwx-bin/webwxgetvideo',
API_webwxlogout: '/cgi-bin/mmwebwx-bin/webwxlogout',
API_webwxgetvoice: '/cgi-bin/mmwebwx-bin/webwxgetvoice',
API_webwxupdatechatroom: '/cgi-bin/mmwebwx-bin/webwxupdatechatroom',
API_webwxcreatechatroom: '/cgi-bin/mmwebwx-bin/webwxcreatechatroom',
API_webwxstatusnotify: '/cgi-bin/mmwebwx-bin/webwxstatusnotify',
API_webwxcheckurl: '/cgi-bin/mmwebwx-bin/webwxcheckurl',
API_webwxverifyuser: '/cgi-bin/mmwebwx-bin/webwxverifyuser',
API_webwxfeedback: '/cgi-bin/mmwebwx-bin/webwxsendfeedback',
API_webwxreport: '/cgi-bin/mmwebwx-bin/webwxstatreport',
API_webwxsearch: '/cgi-bin/mmwebwx-bin/webwxsearchcontact',
API_webwxoplog: '/cgi-bin/mmwebwx-bin/webwxoplog'

参考

https://my.oschina.net/biezhi/blog/618493

http://www.tanhao.me/talk/1466.html/

http://www.tuicool.com/articles/73eiiuv

https://github.com/Urinx/WeixinBot 数据分析的比较细,值得参考!

这个node.js+webdriver版本比较不错

微信通讯协议分析

WeChat-Cloud-Robot

图灵智能客服SDK

http://www.batiaotui.com/
http://www.wqchat.com/

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部