最近在做个微信机器人,所以研究了网页版的微信协议及相关接口,在这里简单总结一下。

从表面上看,对于网页版微信我们的使用流程是这样的:

很简单,只有四步,但如果细化到内里细节的话,上面这简单四步的背后其实隐藏很多其他的逻辑。比如说网页微信是怎么知道手机已经扫码了?微信服务器是怎么确定用户此时的登录是有效的?网页微信又是怎么知道新消息过来的?关于这些,我们可以看看下面的流程图:

而在这个流程中,主要涉及以下几个接口:

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 这篇文章。

微信协议网页版微信协议解析相关推荐

  1. 问题:网页版微信协议如何获取语音消息并播放

    这是一个坑等待解决. 在使用网页版微信协议的过程中发现,是相同地址,通过网页登陆上去后,就能获取并收听到音频,而通过程序的就不行. https://wx.qq.com/cgi-bin/mmwebwx- ...

  2. 用WeRoBot和Python编写一个不使用网页版微信的微信群聊机器人

    要使用 WeRoBot 和 Python 编写一个不使用网页版微信的微信群聊机器人,您需要执行以下步骤: 安装 WeRoBot 库: pipinstall WeRoBot 创建一个 Python 脚本 ...

  3. jquery 背景特效实现_html5实现的仿网页版微信聊天界面效果源码

    码农那点事儿 关注我们,一起学习进步 这是一款基于html5实现的仿网页版微信聊天界面效果源码,可实现微信网页版聊天界面效果,在编辑框编辑文字之后按Ctrl+Enter键即可提交文字到聊天对话框上.整 ...

  4. 网页版微信自动群发消息

    操作步骤: 登陆网页版微信 打开开发者工具 打开 console 控制台 粘贴一下代码到控制台并回车 实现原理 遍历好友列表 修改输入框文本 点击发送 // 拿到所有聊天对象(仅限当前网页上展示的内容 ...

  5. 微信群控系统制作系列一——java模拟登录网页版微信

    PS:很多人咨询我怎么做手机群控系统,因此我开了个制作群控系统的系列,准备分五期讲解群控系统的制作.前两篇是基础内容. 今天做个简单的java模拟登录网页版微信. 既然要做模拟登录,那么我们一定要了解 ...

  6. html5仿网页版微信聊天界面代码

    2019独角兽企业重金招聘Python工程师标准>>> html5仿网页版微信聊天界面代码 转载于:https://my.oschina.net/u/1266171/blog/783 ...

  7. 网页版微信和微信公共号扫码登陆原理分析

    看到知乎上有关于微信扫码登陆原理的讨论.现将自己的分析结果写出来,供大家参考,不正确的地方望指正. 用户打开网页版微信: https://wx.qq.com/,微信为用户生成了一张包含uuid的二维码 ...

  8. 自己动手写油猴脚本 - 简单优化微信读书网页版阅读体验

    1. 微信读书网页版的问题: 内容居中未充满整个body(强迫症),右侧的下滑滚动条影响全屏时候的阅读体验. 2. 解决方法 使用油猴脚本(没有Tampermonkey,请自行百度安装)来修改网页源码 ...

  9. 微信机器人网页版接口详解

    微信网页版接口详解 本系列会讲述微信机器人技术的实现,第一讲主要了解微信网页版给我们提供的http接口,这一步是做一个基于微信网页版机器人的基础和难点. 本讲将微信网页版的主要接口罗列出,并给出了入参 ...

最新文章

  1. 结构光|一文详解相移步长的选择问题
  2. 【UE4】二十三、UE4笔试面试题
  3. 在windows上模拟linux环境,MSYS2——Windows平台下模拟linux环境的搭建-Go语言中文社区...
  4. Android开发入门教程--Android应用程序结构分析
  5. CPU缓存和内存屏障
  6. 对话框的MFC,一点回车就退出
  7. js 可以做什么东西_Deno需要做什么才能取代Node.js?
  8. 吴钩:打开宋代的“隐藏玩法”
  9. CIO们拼命都想上的“网红”中台,也有它的另一面
  10. C++箴言:多态基类中将析构函数声明为虚拟zz
  11. 苹果手机连接服务器传输文件,iOS 设备实现wifi局域网传输文件到iphone
  12. 微信小程序:全新圣诞节头像框制作生成微信小程序源码下载支持多模板
  13. threejs 透视相机参数解析
  14. 股票交易手续费怎么计算
  15. 【Cpp】C和C++混合编程
  16. M3U8视频AES解密播放
  17. 基于Java毕业设计职业信息服务平台源码+系统+mysql+lw文档+部署软件
  18. 【openfilier】配置iSCSI存储
  19. Linux 下rsync命令详细整理
  20. 理解线性代数,矩阵运算,行列式

热门文章

  1. word用宏+excel加解密的VB、python参考代码
  2. java jni 结构体_JAVA 的JNI,传参为结构体问题: 我在网上找的资料://返回一个结构 public native DiskInfo getStruct();...
  3. iOS开发笔记 - 语言篇之Swift
  4. WGAN模型——pytorch实现
  5. 深度 linux photoshop近似工具
  6. xingkongmix雅思自学笔记(22/12/24)day01
  7. pic16f1787 C语言程序,单片机定时器中断原理图解
  8. TensorFlow技术内幕(一):导论
  9. python求相关系数矩阵,协方差矩阵
  10. Windows电脑任务栏出现卡顿黑屏