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. Windows Phone开发(19):三维透视效果
  2. C#操作SQLite 报错 (Attempt to write a read-only database)
  3. java版b2b2c社交电商springcloud分布式微服务 (九)服务链路追踪(Spring Cloud Sleuth)...
  4. php树莓派养鱼,树莓派学习11: 将树莓派变成一个Web服务器
  5. 题解 【国家集训队2011】数颜色
  6. SonarQube结合IDEA实现代码检测
  7. 致 Python 初学者们!
  8. 10大计算机经典算法
  9. python gephi可视化 金庸人物关系图
  10. 100 句世界哲学语录【句句珠玑细细品味】
  11. 大数据毕设选题 - 深度学习植物识别系统(cnn opencv python)
  12. 计算机设计辅助 CAD 试题汇编,计算机辅助设计试题汇编-第二单元
  13. Linux 系统结构详解
  14. Unity WebGL网页背景透明化(2021更新)
  15. L1和L2 复习问题
  16. 什么是Socket?websocket和socket区别?
  17. 带你了解NLP的词嵌入
  18. TTS(TextToSpeach)语音朗读实例
  19. Python Print打印计时器功能
  20. MyBatis Plus整合p6spy控制台打印美化格式的sql语句

热门文章

  1. 外包两年,有幸获得华为社招od岗内推机会,历经四面成功斩获offer!
  2. SyntaxHighlighter 设置
  3. MASM写的屏幕刻度尺工具
  4. 导入fbx不显示_全新包身礼盒、可爱家具,不进来看看么?
  5. php swoft 应用,Swoole 在 Swoft 中的应用
  6. CISP与CISP-PTE有什么区别?
  7. 使用itextpdf编辑PDF制作电子合同
  8. android短信iphone,不越狱教你向iPhone中导入短信_手机生活评测-中关村在线
  9. 【超详细Scratch教学课件分享】可暂停倒计时
  10. 仿腾讯盒子游戏(新手练习)