1. 打开首页,分配一个随机uuid,
  2. 根据该uuid获取二维码图片。
  3. 微信客户端扫描该图片,在客户端确认登录。
  4. 浏览器不停的调用一个接口,如果返回登录成功,则调用登录接口
  5. 此时可以获取联系人列表,可以发送消息。然后不断调用同步接口。
  6. 如果同步接口有返回,则可以获取新消息,然后继续调用同步接口。
  • Java版实现源码:https://github.com/biezhi/wechat-robot 或 http://git.oschina.net/biezhi/wechat-robot
  • Python实现:https://github.com/Urinx/WeixinBot
  • C#实现:https://github.com/sherlockchou86/WeChat.NET
  • QT实现:https://github.com/xiangzhai/qwx

执行流程

       +--------------+     +---------------+   +---------------+|              |     |               |   |               ||   Get UUID   |     |  Get Contact  |   | Status Notify ||              |     |               |   |               |+-------+------+     +-------^-------+   +-------^-------+|                    |                   ||                    +-------+  +--------+|                            |  |+-------v------+               +-----+--+------+      +--------------+|              |               |               |      |              ||  Get QRCode  |               |  Weixin Init  +------>  Sync Check  <----+|              |               |               |      |              |    |+-------+------+               +-------^-------+      +-------+------+    ||                              |                      |           ||                              |                      +-----------+|                              |                      |+-------v------+               +-------+--------+     +-------v-------+|              | Confirm Login |                |     |               |
+------>    Login     +---------------> New Login Page |     |  Weixin Sync  |
|      |              |               |                |     |               |
|      +------+-------+               +----------------+     +---------------+
|             |
|QRCode Scaned|
+-------------+

WebWechat API

1. 获取UUID(参考方法 getUUID)

API 获取 UUID
url https://login.weixin.qq.com/jslogin
method GET
data URL Encode
params appid : wx782c26e4c19acffb <br> fun : new <br> lang: zh_CN <br> _ : 时间戳

返回数据(String):

window.QRLogin.code = 200; window.QRLogin.uuid = "xxx"

2. 显示二维码(参考方法 showQrCode)

API 显示二维码
url https://login.weixin.qq.com/qrcode/{uuid}
method POST
params t : webwx <br/> _ : 时间戳

<br>

3. 等待登录(参考方法 waitForLogin)这里是微信确认登录

API 二维码扫描登录
url https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login
method GET
params tip : 1:未扫描 0:已扫描 <br> uuid : 获取到的uuid <br> _ : 时间戳

返回数据(String):

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. 登录获取Cookie(参考方法 login)

API webwxnewloginpage
url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
method GET
params ticket : xxx <br> uuid : xxx <br> lang : zh_CN <br> scan : xxx <br> fun : new

返回数据(XML):

<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>

在这一步获取xml中的 skeywxsidwxuinpass_ticket

5. 微信初始化(参考方法 wxInit)

API webwxinit
url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit
method POST
data JSON
header Content-Type: application/json; charset=UTF-8
params { <br>      BaseRequest: { <br>          Uin: xxx, <br>          Sid: xxx, <br>          Skey: xxx, <br>          DeviceID: xxx, <br>      } <br> }

返回数据(JSON):

{"BaseResponse": {"Ret": 0,"ErrMsg": ""},"Count": 11,"ContactList": [...],"SyncKey": {"Count": 4,"List": [{"Key": 1,"Val": 635705559 },...]},"User": {"Uin": xxx,"UserName": xxx,"NickName": xxx,"HeadImgUrl": xxx,"RemarkName": "","PYInitial": "","PYQuanPin": "","RemarkPYInitial": "","RemarkPYQuanPin": "","HideInputBarFlag": 0,"StarFriend": 0,"Sex": 1,"Signature": "Apt-get install B","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
}

这一步中获取 SyncKeyUser 后面的消息监听用。

6. 开启微信状态通知(参考方法 wxStatusNotify)

API webwxstatusnotify
url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxstatusnotify
method POST
data JSON
header Content-Type: application/json; charset=UTF-8
params { <br>      BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, <br>      Code: 3, <br>      FromUserName: 自己的ID, <br>      ToUserName: 自己的ID, <br>      ClientMsgId: 时间戳 <br> }

返回数据(JSON):

{"BaseResponse": {"Ret": 0,"ErrMsg": ""},...
}

7. 获取联系人列表(参考方法 getContact)

API webwxgetcontact
url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params { <br>      BaseRequest: { <br>          Uin: xxx, <br>          Sid: xxx, <br>          Skey: xxx, <br>          DeviceID: xxx, <br>      } <br> }

返回数据(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,"Signature": "我是二蛋","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": ""},...],"Seq": 0
}

8.消息检查(参考方法 syncCheck)

API synccheck
url https://webpush2.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck
method GET
data JSON
header ContentType: application/json; charset=UTF-8
params { <br>      BaseRequest: { <br>          Uin: xxx, <br>          Sid: xxx, <br>          Skey: xxx, <br>          DeviceID: xxx, <br>      } <br> }

返回数据(String):

window.synccheck={retcode:"xxx",selector:"xxx"}

retcode:0 正常1100 失败/登出微信
selector:0 正常2 新的消息7 进入/离开聊天界面

9. 获取最新消息(参考方法 webwxsync)

API webwxsync
url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=xxx&skey=xxx&pass_ticket=xxx
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params { <br>      BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, <br>      SyncKey: xxx, <br>      rr: 时间戳取反 <br> }

返回数据(JSON):

{'BaseResponse': {'ErrMsg': '', 'Ret': 0},'SyncKey': {'Count': 7,'List': [{'Val': 636214192, 'Key': 1},...]},'ContinueFlag': 0,'AddMsgCount': 1,'AddMsgList': [{'FromUserName': '','PlayLength': 0,'RecommendInfo': {...},'Content': "", 'StatusNotifyUserName': '','StatusNotifyCode': 5,'Status': 3,'VoiceLength': 0,'ToUserName': '','ForwardFlag': 0,'AppMsgType': 0,'AppInfo': {'Type': 0, 'AppID': ''},'Url': '','ImgStatus': 1,'MsgType': 51,'ImgHeight': 0,'MediaId': '', 'FileName': '','FileSize': '',...},...],'ModChatRoomMemberCount': 0,'ModContactList': [],'DelContactList': [],'ModChatRoomMemberList': [],'DelContactCount': 0,...
}

10. 发送消息(参考方法 webwxsendmsg)

API webwxsendmsg
url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?pass_ticket=xxx
method POST
data JSON
header ContentType: application/json; charset=UTF-8
params { <br>      BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, <br>      Msg: { <br>          Type: 1 文字消息, <br>          Content: 要发送的消息, <br>          FromUserName: 自己的ID, <br>          ToUserName: 好友的ID, <br>          LocalID: 与clientMsgId相同, <br>          ClientMsgId: 时间戳左移4位随后补上4位随机数 <br>      } <br> }

返回数据(JSON):

{"BaseResponse": {"Ret": 0,"ErrMsg": ""},...
}

更多资料: https://github.com/xiangzhai/qwx https://github.com/Urinx/WeixinBot http://www.07net01.com/2016/01/1201188.html http://www.cnblogs.com/xiaozhi_5638/p/4923811.html

微信协议分析和机器人实现相关推荐

  1. Web版微信协议分析—版本2

    微信web协议分析(微信网页版 wx2.qq.com) 1.打开首页,分配一个随机uuid, 2.根据该uuid获取二维码图片. 3.微信客户端扫描该图片,在客户端确认登录. 4.浏览器不停的调用一个 ...

  2. python web微信应用(一) 微信协议分析

    文章目录 前言 一.__get_uuid,获取 uuid 二.__gen_qrcode,生成二维码 三.__login,手机扫码登录 四.__get_params,获取登录参数信息 五.__initi ...

  3. 网页微信协议分析(一)——登录

    参考:https://www.52pojie.cn/thread-836149-1-1.html 1,先分析二维码,多次刷新页面对比,红色部分属于变动的参数 二维码请求地址:https://login ...

  4. 微信协议分析 pc端记录

    android端的之前参考如下帖子: https://blog.csdn.net/yy405145590/article/details/79963999 但是这个帖子出来之后,微信在pack之后又封 ...

  5. 微信web协议分析和实现微信机器人

    微信web协议分析和实现微信机器人(微信网页版 wx2.qq.com) 1.打开首页,分配一个随机uuid, 2.根据该uuid获取二维码图片. 3.微信客户端扫描该图片,在客户端确认登录. 4.浏览 ...

  6. webqq2协议分析和qq聊天机器人简单实现(转)

    webqq2协议分析和qq聊天机器人简单实现 转之http://hfutxf.javaeye.com/blog/800866 通过webqq接口,可以实现发送qq消息接收qq消息等,这样,想实现一个q ...

  7. 初出茅庐-----微信好友分析与微信机器人

    初出茅庐-----微信好友分析与微信机器人 一.微信好友分析 1.简介 对微信的好友进行分析,统计好友的人数,省市的分布,并排序,并统计好友签名用词的特点.用pyechart图像显示,并存为网页文件. ...

  8. python hook pc微信_一起来用python玩一波微信呀 | 防撤回, 好友分析, 聊天机器人~...

    原文链接一起来用python玩一波微信呀 | 防撤回, 好友分析, 聊天机器人~​mp.weixin.qq.com 导语 众所周知,前段时间微信彻底关闭了网页版微信登录入口.于是一大波基于itchat ...

  9. 微信安卓协议分析笔记

    一.查资料 网上没找到SDK可以分析,关于微信安卓协议的文章也比较少,比较有用的是<微信交互协议和加密模式研究>,这篇论文里介绍了微信使用RSA2048与AES-CBC-128结合的加密算 ...

最新文章

  1. 一个简单的程序来使用WiredTiger 存储引擎
  2. android资料整理
  3. shiro 全局变量定义
  4. 使用JDBC改变Oracle的session參数 NLS_DATE_FORMAT
  5. 鸡蛋该放在哪些篮子里?多少合适?
  6. 数据规范化理论(2NF,3NF,BCNF)[zz]
  7. ios相机黑边_黑边很碍眼很难看 苹果iPhone6黑边有什么用呢?
  8. 第一篇 - 手把手教你理清EOS各种开发环境搭建来龙去脉
  9. 视觉SLAM笔记(3) 视觉SLAM框架
  10. 中南大学计算机院转专业要求,机电工程学院2018级本科学生转专业的实施细则...
  11. 荣耀2021年度手机颜值天花板首销!2699元起
  12. 【jvm】jvm优化 jvm linux 大页
  13. ERROR InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0
  14. 深度学习2.0-34.ResNet 与 DenseNet
  15. 优先队列/oriority queue 之最大优先队列的实现
  16. 全网最全的 JavaScript 数组各个方法用途的思维导图
  17. C++结构体变量的初始化和结构体char数组成员初始化
  18. No provider available from registry
  19. 记:疯狂的程序员 (连续n天写n个代码)
  20. java银联在线支付开发_银联在线支付案例代码

热门文章

  1. 仿360手机助手下载按钮
  2. 在校大学生如何利用编程赚钱?
  3. 网络上的推广方式都有哪些?常见的网络推广形式!
  4. root用户无法打开xclock_oracle安装过程中图像界面启动问题(xdmcp) | 学步园
  5. 卡巴斯基起诉江民杀毒软件侵权
  6. [leetcode 10-4] 三、分割数组最多方案(双周赛第四题)
  7. phpcms mysql设置_PHPCMS mysql优化教程_PHPCms教程
  8. 微信企业号开发二:TOKEN缓存处理
  9. matlab接入交易,金字塔与MATLAB通过数据库交易对接
  10. echarts绘制四川地图