微信协议网页版微信协议解析
最近在做个微信机器人,所以研究了网页版的微信协议及相关接口,在这里简单总结一下。
从表面上看,对于网页版微信我们的使用流程是这样的:
很简单,只有四步,但如果细化到内里细节的话,上面这简单四步的背后其实隐藏很多其他的逻辑。比如说网页微信是怎么知道手机已经扫码了?微信服务器是怎么确定用户此时的登录是有效的?网页微信又是怎么知道新消息过来的?关于这些,我们可以看看下面的流程图:
而在这个流程中,主要涉及以下几个接口:
UUID获取接口
登录二维码下载接口
二维码扫描状态查询接口
登录页面跳转接口(获取登录后的关键参数)
登录初始化接口(获取同步密钥SyncKey)
心跳检测接口(查询是否有新消息)
消息拉取接口
消息发送接口
UUID获取接口:
url:https://login.wx.qq.com/jslogin
method:GET
request parameter:
response:window.QRLogin.code = 200; window.QRLogin.uuid = "gdl0dOM6cg==“;
window.QRLogin.code为请求响应结果,200表示成功
window.QRLogin.uuid后面为 uuid,这里的 uuid 是 gdl0dOM6cg==
登录二维码下载接口:
二维码扫描状态查询接口:
url:https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login
method:GET
request parameter:
response:这里的返回值有四种可能
参数校验失败:window.code = 400;
未扫码未登录:window.code = 408;
已扫码未登录:window.code = 201;
已扫码已登录:window.code=200;window.redirect_uri="https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AyTxRevj7IxauFXHBvH_BVIl@qrticket_0&uuid=IeqFbW6eJQ==&lang=zh_CN&scan=1523256945”;
登录页面跳转接口(获取登录后的关键参数):
url:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
method:GET
request parameter:
response:0OKxxxxxxxxx
xxx1
登录初始化接口(获取同步密钥SyncKey):
url:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=129620808
method:POST
request parameter:JSON格式
{
BaseRequest: {
Uin: 登录关键参数wxuin,
Sid: 登录关键参数wxsid,
Skey: 登录关键参数skey,
DeviceID: 随机数
}
}
response:JSON格式,里面有个SyncKey字段,数据结构是一个List,List 里面的元素 e 是 key-value 的模式,后续心跳请求的时候通过 e1.key_e1.value | e2.key_e2.value 的格式拼装成 synckey
心跳检测接口(查询是否有新消息):
url:https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin/synccheck
method:GET
request parameter:
response:window.synccheck = { retcode: "0", selector: "0" }
retcode:0( 0 表示请求成功)
selector:
0: 无消息
2: 有新消息
消息拉取接口:
url:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync
method:POST
request parameter:有两部分,url拼接 和 POST 都要
URL 拼接:sid 和 skey
POST:
{
BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },
SyncKey: xxx,
rr:
}
response:JSON格式。请求成功时有两个关键字段,SyncKey(新的同步密钥)和 AddMsgList(消息列表)
消息发送接口:
url:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg
method:POST
request parameter:JSON格式{
BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },
Msg: {
Type: 1 文字消息,
Content: 要发送的消息,
FromUserName: 自己的ID,
ToUserName: 好友的ID,
LocalID: 与clientMsgId相同,
ClientMsgId: 时间戳左移4位随后补上4位随机数
}
}
response:JSON格式
{ "BaseResponse": { "Ret": 0, "ErrMsg": "" }, ... }
以上便是网页版微信的相关协议逻辑和接口解析,主要包含了登录以及消息发送的相关接口。此外,文章部分内容参考了 https://segmentfault.com/a/1190000004471678 这篇文章。
微信协议网页版微信协议解析相关推荐
- 问题:网页版微信协议如何获取语音消息并播放
这是一个坑等待解决. 在使用网页版微信协议的过程中发现,是相同地址,通过网页登陆上去后,就能获取并收听到音频,而通过程序的就不行. https://wx.qq.com/cgi-bin/mmwebwx- ...
- 用WeRoBot和Python编写一个不使用网页版微信的微信群聊机器人
要使用 WeRoBot 和 Python 编写一个不使用网页版微信的微信群聊机器人,您需要执行以下步骤: 安装 WeRoBot 库: pipinstall WeRoBot 创建一个 Python 脚本 ...
- jquery 背景特效实现_html5实现的仿网页版微信聊天界面效果源码
码农那点事儿 关注我们,一起学习进步 这是一款基于html5实现的仿网页版微信聊天界面效果源码,可实现微信网页版聊天界面效果,在编辑框编辑文字之后按Ctrl+Enter键即可提交文字到聊天对话框上.整 ...
- 网页版微信自动群发消息
操作步骤: 登陆网页版微信 打开开发者工具 打开 console 控制台 粘贴一下代码到控制台并回车 实现原理 遍历好友列表 修改输入框文本 点击发送 // 拿到所有聊天对象(仅限当前网页上展示的内容 ...
- 微信群控系统制作系列一——java模拟登录网页版微信
PS:很多人咨询我怎么做手机群控系统,因此我开了个制作群控系统的系列,准备分五期讲解群控系统的制作.前两篇是基础内容. 今天做个简单的java模拟登录网页版微信. 既然要做模拟登录,那么我们一定要了解 ...
- html5仿网页版微信聊天界面代码
2019独角兽企业重金招聘Python工程师标准>>> html5仿网页版微信聊天界面代码 转载于:https://my.oschina.net/u/1266171/blog/783 ...
- 网页版微信和微信公共号扫码登陆原理分析
看到知乎上有关于微信扫码登陆原理的讨论.现将自己的分析结果写出来,供大家参考,不正确的地方望指正. 用户打开网页版微信: https://wx.qq.com/,微信为用户生成了一张包含uuid的二维码 ...
- 自己动手写油猴脚本 - 简单优化微信读书网页版阅读体验
1. 微信读书网页版的问题: 内容居中未充满整个body(强迫症),右侧的下滑滚动条影响全屏时候的阅读体验. 2. 解决方法 使用油猴脚本(没有Tampermonkey,请自行百度安装)来修改网页源码 ...
- 微信机器人网页版接口详解
微信网页版接口详解 本系列会讲述微信机器人技术的实现,第一讲主要了解微信网页版给我们提供的http接口,这一步是做一个基于微信网页版机器人的基础和难点. 本讲将微信网页版的主要接口罗列出,并给出了入参 ...
最新文章
- 结构光|一文详解相移步长的选择问题
- 【UE4】二十三、UE4笔试面试题
- 在windows上模拟linux环境,MSYS2——Windows平台下模拟linux环境的搭建-Go语言中文社区...
- Android开发入门教程--Android应用程序结构分析
- CPU缓存和内存屏障
- 对话框的MFC,一点回车就退出
- js 可以做什么东西_Deno需要做什么才能取代Node.js?
- 吴钩:打开宋代的“隐藏玩法”
- CIO们拼命都想上的“网红”中台,也有它的另一面
- C++箴言:多态基类中将析构函数声明为虚拟zz
- 苹果手机连接服务器传输文件,iOS 设备实现wifi局域网传输文件到iphone
- 微信小程序:全新圣诞节头像框制作生成微信小程序源码下载支持多模板
- threejs 透视相机参数解析
- 股票交易手续费怎么计算
- 【Cpp】C和C++混合编程
- M3U8视频AES解密播放
- 基于Java毕业设计职业信息服务平台源码+系统+mysql+lw文档+部署软件
- 【openfilier】配置iSCSI存储
- Linux 下rsync命令详细整理
- 理解线性代数,矩阵运算,行列式
热门文章
- word用宏+excel加解密的VB、python参考代码
- java jni 结构体_JAVA 的JNI,传参为结构体问题: 我在网上找的资料://返回一个结构 public native DiskInfo getStruct();...
- iOS开发笔记 - 语言篇之Swift
- WGAN模型——pytorch实现
- 深度 linux photoshop近似工具
- xingkongmix雅思自学笔记(22/12/24)day01
- pic16f1787 C语言程序,单片机定时器中断原理图解
- TensorFlow技术内幕(一):导论
- python求相关系数矩阵,协方差矩阵
- Windows电脑任务栏出现卡顿黑屏