一. 引言
我们都知道,微信提供了多种登录的方式,包括手机端、电脑端以及web端。
web端的登录,我们用Python程序完全可以模拟出来~~(如果你不知道,那也没关系,稍微了解下Python request session即可)
而所谓的机器人实际上就是后台一个智能的程序,类似“微软小冰”,“iPhone siri”。今天我们要用的是一个开放的机器人API,“图灵机器人”
下面就让我们一步步分析如何,通过模拟web端微信登录+“图灵机器人” 实现一个微信机器人
二. 深入分析
1. web版微信不是用用户名密码而是用扫描二维码登录,如何实现的呢?
让我们登录https://wx.qq.com/,查看此时的网络请求情况 如下图所示
1). 实际上客户端会先发送一个js get请求,请求url为https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1469852355025
仔细分析这个请求,会发现有已下几个参数
appid: wx782c26e4c19acffb //这个值不变,表示来自微信网页版
redirect_uri: https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage //这个也是一个固定值
fun: new //固定值位new
lang: zh_CN //表示中文
_: 1469852355025 //13位时间戳
2).然后服务端返回数据,window.QRLogin.code = 200; window.QRLogin.uuid = "IatVataLfQ==";
2. 多刷新几次,你会发现服务端的返回值中window.QRLogin.uuid的值每次都在变化。
实际上uuid是服务端用来标识一次登录的通信id
2. 当我们拿到uuid后,就需要获取二维码,继续查看当前的网络请求
1). 客户端继续发送一个js get 请求,url为https://login.weixin.qq.com/qrcode/IatVataLfQ==
仔细分析这个请求,会发现qrcode后跟着的值就是从上一个请求拿到的uuid值
2). 当拿到二维码之后,还需用微信客户端进行扫描(god,都有客户端了为什么还需用用web登录~~~~)
3. ok,拿出手机扫描屏幕的二维码,继续查看网络请求
1). 当我们在APP上点击登录按钮之后,实际上客户端是向服务端发送了一个js的get 请求,url为https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=od5FW4ipFw==&tip=0&r=-979422099&_=1469857970642
仔细分析这个请求,会发现有以下几个参数
uuid: od5FW4ipFw== //从上面请求得到的数据
tip: 0 //表示等待用户扫描确认
r: -979422099 //随机9位数字
_: <