第一步:登陆
1、get访问微信首页https://wx.qq.com
提供session、headers
用途:获取cookie
后续访问必须带session、headers、cookie这三个参数,并保持不变
get参数分别是
appid:值为自定义,格式为wx782c26e4c19acffb
fun:值为new
lang:值为en_us
_:值为当前时间戳
用途:获取二维码uuid
用途:下载和展示二维码
4、扫码和确认,访问https://wx.qq.com/cgi-bin/mmwebwx-bin/login
get参数
loginicon:值必须为true
uuid:值为{{uuid}}
r:值为当前时间戳/1524
_:值为当前时间戳
用途:返回登陆状态,登陆成功之后的redirect_uri
返回状态码说明如下:
200,扫码和确认成功
201,扫码,未确认
其他,未扫码或者其他原因
 
第二步、初始化页面和获取登陆信息
1、get访问{{redirect_uri}}
用途:返回登陆认证等信息,一个字典类型的json格式,下文用login_info表示
2、post访问https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=【当前时间戳】
post参数为
BaseRequest:通过1返回参数获取值
例子:{"BaseRequest": {"DeviceID": "uKUD8e%2Bp7iXqNpbOuPTntL7OdbsfxEv5JdQjKtb7Mc%2FVQK2leE%2BRrNVkI5fQZZjB", "Sid": "xkQE8IoFPjwXEf2W", "Uin": "575635712", "Skey": "@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324", "isgrayscale": "1"}}
用途:返回微信用户信息、第一页好友信息、和BaseRequest、最新聊天信息等等
 
 
第三步、获取好友信息
get参数
r:值为当前时间戳
seq:值为0
skey:值为login_info[Skey]
用途:返回所有的好友信息,字典json格式
有用的好友信息字段说明:
Sex:1表示男,2表示女,0为其他【公众号、群、系统账号等等】
UserName,微信系统为每个微信号分配一个唯一号码,开头@@表示群、字母或者数字开头表示系统账号,其他【公众号、好友等】以单@开头
NickName,个人设置的昵称,重复可能性很大
Alias,微信号,如果没有设置为空,不会出现重复
 
3.2获取群组信息(如果不想获取群组内的人员昵称、头像等参数,可以先不用研究)
post访问 https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?type=ex&r=xxx&lang=zh_CN&pass_ticket=xxx
参数:

BaseRequest:
{
    DeviceID:”xxx”
    Sid:”xxx”
    Skey:”xxx”
    Uin:xxx
}
Count:4
List:
[
    0:{UserName: “xxx”, EncryChatRoomId: “”}
    1:{UserName: “xxx”, ChatRoomId: “”}
    …
]

参数说明:List>UserName就是对应群组的id,群组id是webwxgetcontact返回的id前缀是@@的。
注意:这个接口webwxgetcontact你可能是无法获取群组信息的,究其原因是因为你并没有将群聊加入通讯录,只要在微信上,点开你要监听的群组,然后开启将群组加入通讯录就可以了。
 
第四步、接受和发送新信息
1、接受信息
1)、定时检查是否有新信息
get参数是:
'r' : 当前时间戳*1000
'skey' : login_info[skey]
'sid' : login_info[sid]
'uin' : login_info[uin]
'deviceid' : login_info[deviceid]
'synckey' : login_info[synckey]
'_' : 当前时间戳*1000
用途:返回最新信息数,0表示没有新消息
post参数为
'BaseRequest' : login_info[BaseRequest]
'SyncKey' : login_info[SyncKey]
'rr' :~当前时间戳*1000
例子:{"rr": -1485065809, "BaseRequest": {"Ret": 0, "ErrMsg": ""}, "SyncKey": {"List": [{"Key": 1, "Val": 645531166}, {"Key": 2, "Val": 645531278}, {"Key": 3, "Val": 645531125}, {"Key": 11, "Val": 645531260}, {"Key": 13, "Val": 645524153}, {"Key": 201, "Val": 1485065810}, {"Key": 203, "Val": 1485064747}, {"Key": 1000, "Val": 1485058018}, {"Key": 1001, "Val": 1485057992}, {"Key": 1002, "Val": 1485058221}, {"Key": 1004, "Val": 1484911834}], "Count": 11}}
用途:返回最新信息列表
注意:群信息的发送者放在Content开头部分
2、发送信息
post参数
'BaseRequest': self.base_request,
'Msg': {
'Type': login_info[BaseRequest],
'Content': content,
'FromUserName': 自己的username,
'ToUserName': 发送的username,
'LocalID': login_info[msgid],
'ClientMsgId': login_info[msgid],
},
例子:{"Msg": {"Content": "啊啊啊啊", "ToUserName": "filehelper", "FromUserName": "@974141db55d51041ee1e0b8b6af5589776a5282910b9ac1e154693430a23f79f", "Type": "Test Message", "LocalID": 1485065800472, "ClientMsgId": 1485065800472}, "BaseRequest": {"Ret": 0, "ErrMsg": ""}}
返回发送结果json字典
需要代码或技术支持可以私聊我QQ:969061664

通过HTTP协议实时获取微信聊天记录的更多相关文章

  1. Android开发——获取微信聊天记录(后台秘密发邮件)

    1. 首先先展示一下效果图: 2. Accessibility机制 Accessibility机制之前已经介绍过了,具体可以查看Accessibility机制实现模拟点击,需要简单的配置(如设置被监听 ...

  2. Xp根据数据库insert获取微信聊天记录

    https://mp.weixin.qq.com/s?__biz=MzIzNDA3MDgwNA==&mid=2649230245&idx=1&sn=3746423a481976 ...

  3. (转)获取安卓iOS上的微信聊天记录、通过Metasploit控制安卓

    在这篇文章中我们将讨论如何获取安卓.苹果设备中的微信聊天记录,并演示如何利用后门通过Metasploit对安卓设备进行控制.文章比较基础.可动手性强,有设备的童鞋不妨边阅读文章边操作,希望能激发大家对 ...

  4. 微信聊天记录查看器(程序+源码) - iOS版

    本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4338643.html Updates [2016.10.14]感谢 ...

  5. 移动安全初探:窃取微信聊天记录、Hacking Android with Metasploit

    在这篇文章中我们将讨论如何获取安卓.苹果设备中的微信聊天记录,并演示如何利用后门通过Metasploit对安卓设备进行控制.文章比较基础.可动手性强,有设备的童鞋不妨边阅读文章边操作,希望能激发大家对 ...

  6. 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...

  7. 微信公众号开发系列-获取微信OpenID

    在微信开发时候在做消息接口交互的时候须要使用带微信加密ID(OpenId),下面讲讲述2中类型方式获取微信OpenID.接收事件推送方式和网页授权获取用户基本信息方式获取. 1.通过接收被动消息方式获 ...

  8. php获取微信基础接口凭证Access_token

    php获取微信基础接口凭证Access_token的具体代码,供大家参考,具体内容如下 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进 ...

  9. geotrellis使用(二十二)实时获取点状目标对应的栅格数据值

    目录 前言 实现方法 总结 一.前言        其实这个功能之前已经实现,今天将其采用1.0版的方式进行了重构与完善,现将该内容进行总结.        其实这个功能很常见,比如google地球上 ...

随机推荐

  1. Shiro-工作流程

    [与Web集成] 1.Shiro 提供了与 Web 集成的支持,其通过一个ShiroFilter 入口来拦截需要安全控制的URL,然后进行相应的控制. 2.ShiroFilter 类似于如 Strut ...

  2. CSS中具有继承性的属性:

    CSS中具有继承性的属性:   color:#eee font: font-style font-variant: font-weight:bold font-size font-family: fo ...

  3. Codeforces 263A. Appleman and Easy Task

    A. Appleman and Easy Task time limit per test  1 second memory limit per test  256 megabytes input  ...

  4. ssh登录问题

    ssh username@ip 密码正确但是登陆ssh时permission denied 1.   启动sshd:/etc/init.d/ssh start 2.   在/etc/ssh/sshd_ ...

  5. noip模拟赛 算

    [问题背景]zhx 帮他妹子做数学题.[问题描述]求: 如 N=3, M=3, 这个值为 1^1+1^2+1^3+2^1+2^2+2^3+3^1+3^2+3^3=56. [输入格式]仅一行, 包含两个 ...

  6. P - FatMouse and Cheese 记忆化搜索

    FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension ...

  7. css3 字体自适应

    css3提供了一些与当前viewpoint相关的元素,vw,vh,vim等. “viewpoint” = window size vw = 1% of viewport width 1vh = 1% ...

  8. addSubview和insertSubview 区别

     子视图是以栈的方式存放的. 每次addsubview时都是在最后面添加. 每次在addsubview前和addsubview后可以看看[self.view.subViews count]: 你看看你 ...

  9. LeetCode 389. Find the Difference (找到不同)

    Given two strings s and t which consist of only lowercase letters. String t is generated by random s ...

  10. JSP开发学习参考文章

    配置JDK和Tomcat环境变量 http://blog.csdn.net/lijiazhi1987/article/details/2742181 eclipse maven plugin 插件安装 ...