最近在做个微信机器人,所以研究了网页版的微信协议及相关接口,在这里简单总结一下。
从表面上看,对于网页版微信我们的使用流程是这样的:
很简单,只有四步,但如果细化到内里细节的话,上面这简单四步的背后其实隐藏很多其他的逻辑。比如说网页微信是怎么知道手机已经扫码了?微信服务器是怎么确定用户此时的登录是有效的?网页微信又是怎么知道新消息过来的?关于这些,我们可以看看下面的流程图:
而在这个流程中,主要涉及以下几个接口:
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 这篇文章。
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/1097231.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
微信协议网页版微信协议解析
最近在做个微信机器人,所以研究了网页版的微信协议及相关接口,在这里简单总结一下。从表面上看,对于网页版微信我们的使用流程是这样的:很简单,只有四步,但如果细化到内里细节的话,上面这简单四……
家具企业精细化管理的基本内容包括哪几点
家具企业精细化管理的基本内容包括哪几点?精细化管理对于家具企业来说是一个全面化的管理模式。全面化是指精细化管理的思想和作风要贯彻到整个企业的所有管理活动中。具体包括哪些内容呢? 家具企业精细化管理的基本内容:1、精细化的操作 是指……
智能制造的核心作用主要有哪几点
智能制造的核心作用主要有哪几点?随着现在科技的不断发展,很多制造行业都开始向智能制造进行转型,使得生产效率更加高效便捷。发展智能制造的核心是提高企业生产效率,拓展企业价值增值空间,主要表现在哪些方面呢&#……
已上传的微信小程序源码丢失,通过反编译找回
前提:你的程序源码已经上传,可以打开体验版或开发版小程序。工具:小程序包解密:链接: https://pan.baidu.com/s/1A2ZCqflr4jMLfg03U_LWHQ 提取码: 4ntn wxappUnpacker:链接: https://pan.baidu.com/s/1HQS8xQsqrhc4hzi……
erp精细化管理怎么做
erp精细化管理怎么做?ERP的精细化,不像普及化那样站在厂商的角度侃侃而谈的,而是站在客户的角度来考虑怎样才能应用ERP系统取得具体实效,以及ERP系统是如何与企业的个性化管理实践等细节层面相结合。那erp精细化管理怎么做&#x……
智能制造发展主要任务是什么
智能制造发展主要任务是什么?前不久,工业和信息化部、国家发展和改革委员会等部门联合发布了《“十四五”智能制造发展规划》(以下简称《规划》),旨在加快推动我国智能制造发展进程。智能制造是制造强国建设的主攻方向……
crm系统采购流程是怎样
crm系统采购流程是怎样?对于很多企业来说,采购一套crm系统是非常必要的,crm系统可以对客户的各种信息进行收集,并通过客户信息分析出最佳的销售方案,但是想要采购一套CRM系统也比较麻烦,具体流程是怎样呢&a……
家具企业如何实现供需平衡
家具企业如何实现供需平衡?家具作为民众的大宗消费品,在人民生活水平迅速提高,随着疫情防控的常态化,以及疫情居家对于家居生活需求的提升,家具企业如何实现供需平衡呢? 供需不平衡原因:需求……
生产运作系统的核心要素是什么
生产运作系统的核心要素是什么?生产运作系统是一个投入和产出的系统,其职能就是将一系列投入转换为社会和用户所需要的产出。构成要素是硬件要素和软件要素,性质是生产。其核心要素是什么呢? 生产运作系统的核心要素࿱……
家具企业如何降低管理成本
家具企业如何降低管理成本?我国制造业由于整体经济环境进入新常态,人工、原材料、能源等生产要素的增幅大于家具企业生产效率的提升,使家具企业经营越来越困难。那家具企业如何降低管理成本呢? 家具企业降低管理成本࿱……
判定一副牌是否是顺子
转载一个不用排序就判定出顺子的算法:https://blog.csdn.net/qq_43968080/article/details/85346468
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;#define MAX_COUNT 20
#define MASK_COLOR 0xF0 ……
几篇讲解lua闭包函数的博文
1:、https://blog.csdn.net/maximuszhou/article/details/44280109
2、https://www.jb51.net/article/55806.htm
3、举例讲解lua闭包函数的实际表现 https://www.jb51.net/article/55806.htm
4、看了这两篇博文基本就明白了闭包函数的用法了。…
cocosstudio的使用注意一(listview上加载一个item(Layout),item上加载checkbox,Text,导致listview“无法滑动”)
今天写代码遇到一个问题listview上加载一个item(Layout),item上加载checkbox,Text;并且设置回弹属性为false,那么死活无法向下滑动,so 我对litview添加监听事件,哦 触发到了,所以,关键点是我只添加了一个item,所有没有……
c++和lua相互调用
转载自:https://www.cnblogs.com/sevenyuan/p/4511808.html…
lua中对于for循环的用法
关于此种写法的 (for <var_list> in <expre_list> do end)
转载自:https://blog.csdn.net/qq_28644183/article/details/71629908…
原 texture packer 处理图片空白的问题
转载至: https://blog.csdn.net/harryptter/article/details/50344219
设置一个属性 trim mode 属性为 none…
使用命令行打包发布cocostudio资源
参考:https://www.jianshu.com/p/4f19568aff0c
http://www.cocoachina.com/bbs/read.php?tid-282397.html
注意 (-f) .ccs的路径不能使用相对路径,只能绝对路径; (-o)发布资源路径可以是相对路径…
cocostudio常见问题
1、不同界面使用不同路径但是名字相同的csd文件,在没有清除可写路径(cocos存在是一个容器中);可能会出现问题,
具体距离, layerA,layerB,在layerA中加载一个nodeTmp,在layerB中也加载一个nodeT……
cocos3.10环境配置
https://blog.csdn.net/hfutdog/article/details/71368171…
cocos-lua中添加lfs的库
方案一:
1、转载:https://blog.csdn.net/sc1987910/article/details/79622014
2、上述转载的博客会编译不通过,需要在lfs.h中添加: #ifdef __cplusplus extern "C" { #endif #include <lua.h> #include <lau……
编程日记2023/4/16 15:00:53