今天心血来潮,看了一下微信扫码登陆.这里记录一下,重申一下–做事需要耐心!!!
微信公众号官网:mp.weixin.qq.com
我们需要分析的是二维码图片如何拿到了,当然,强大的f12绝对可以,
拿到二维码后发现是一个可访问地址:https://mp.weixin.qq.com/cgi-bin/scanloginqrcode?action=getqrcode&random=1632554160456
在新的浏览器打开,噢居然没有展示? 那么继续分析有显示的是为什么呢? 在访问过程中可以在同浏览器可以打开,在不同浏览器打不开,这可以排除token等,说明是cookie,扒开请求头的外衣,cookie分别为:ua_id,uuid,那么是不是很简单呢,逐个寻找请求吧!
这里直接说在哪吧,不废话了,找东西的方法很简单,
步骤1访问首页:
从进入https://mp.weixin.qq.com/页面那一刻,请求这个地址时候可以获得ua_id;
步骤2开始登录:
从开始登录请求:https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin中获取uuid;
这里说一下微信的推测逻辑哈:
访问首页:获取ua_id,
拿着ua_id校验会话权限:https://mp.weixin.qq.com/webpoc/cgi/chat/checkChatPermission?type=15&grayType=random&token=&lang=zh_CN&f=json&ajax=1,如果返回false,请求头会带回来wxuin的cookie,再次校验,
bizlogin进行预登陆:https://mp.weixin.qq.com/cgi-bin/bizlogin,预登陆返回成功,进行接下来开始登录
startlogin 开始登陆:https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin,开始登陆后返回uuid,
这时,获取二维码:https://mp.weixin.qq.com/cgi-bin/scanloginqrcode?action=getqrcode&random=1632554160456
接下来,坚挺登陆状态:https://mp.weixin.qq.com/cgi-bin/scanloginqrcode?action=ask&token=&lang=zh_CN&f=json&ajax=1,从status判断状态(这里不罗列状态了,简单说一下,有6中),
最后,下次再说,提示一下bizlogin设置cookie,注意loginhook,从redirect_url中获取token,
贴代码给你示范一下,以下为nodejs代码
/**
* 步骤1,看代码不多说
*/
async function getHtml() {
const indexHtmlResp = await axios.get('https://mp.weixin.qq.com/', {
headers: {
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
});
let cookieArr = indexHtmlResp.headers['set-cookie'];
console.log(cookieArr[0].split(';')[0]);
//主要获取 ua_id
return cookieArr[0].split(';')[0];
}
//第二步:
async function startLogin(uaid) {
let url = 'https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin';
const resp = await axios.post(url, {
userlang: 'zh_CN',
redirect_url: '',
login_type: 3,
sessionid: +new Date + "" + Math.floor(100 * Math.random()),
token: '',
lang: 'zh_CN',
f: 'json',
ajax: 1
}, {
headers: {
'content-length':99,
'origin':'https://mp.weixin.qq.com',
'content-type':'application/x-www-form-urlencoded; charset=UTF-8',
'referer': 'https://mp.weixin.qq.com/',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
'cookie': uaid
},
transformRequest: [
function (data) {
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
ret = ret.substring(0, ret.lastIndexOf('&'));
return ret
}
],
});
//获取uuid
console.log(resp.data);
console.log(resp.headers['set-cookie'][0].split(';')[0]);
return resp.headers['set-cookie'][0].split(';')[0];
}
function refreshQrcode() {
// this.getQrcode();
let qrcodeSrc = 'https://mp.weixin.qq.com' + "/cgi-bin/scanloginqrcode?action=getqrcode&random=".concat(+new Date);
console.log('访问图片地址:',qrcodeSrc)
}
//汇总
async function test() {
//get uaid
let uaid = await getHtml();
//get wxuin
// let wxuin = await checkChatPermission(uaid);
//preLogin
//await bizLogin(uaid);
//start login
let uuid = await startLogin(uaid);
//get qrcodeSrc
refreshQrcode()
console.log("cookie:==>",uaid+';'+uuid);
//qrcodeSrc need cookie
// console.log(uaid + ';' + wxuin + ';' + uuid);
}
//执行代码
test()