QQ快速登录协议分析

1.获取pt_local_token

请求

https://xui.ptlogin2.qq.com/cgi-bin/xlogin?s_url=https%3A%2F%2Fhuifu.qq.com%2Findex.html&style=20&appid=715021417&proxy_url=https%3A%2F%2Fhuifu.qq.com%2Fproxy.html

在header的Set-Cookie中记录着该值

2. 获取本机所登陆的QQ号码

请求

https://localhost.ptlogin2.qq.com:4301/pt_get_uins?callback=ptui_getuins_CB&r=0.6694805047494219&pt_local_tk=`pt_local_tk`

请求头带入Referer,Cookie带入pt_local_token=第一步得到的值
端口是从4000~4008之间的,不确定哪一个

referer:

https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=https%3A//qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&&hide_title_bar=1&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self&s_url=https%3A%2F%2Fqzs.qzone.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&pt_qr_app=%E6%89%8B%E6%9C%BAQQ%E7%A9%BA%E9%97%B4&pt_qr_link=http%3A//z.qzone.com/download.html&self_regurl=https%3A//qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=http%3A//z.qzone.com/download.html&pt_no_auth=1

返回数据

var var_sso_uin_list=
[{“account”:”Q号”,”client_type”:65793,”face_index”:144,”gender”:1,”nickname”:”Blue”,”uin”:”QQ号”,”uin_flag”:4194822}];ptui_getuins_CB(var_sso_uin_list);

3. 获取clientkey

请求:

https://localhost.ptlogin2.qq.com:4301/pt_get_st?clientuin=`QQ号`&callback=ptui_getst_CB&r=0.7284667321181328&pt_local_tk=-1806654417

请求头带入Referer,Cookie带入pt_local_token=第一步得到的值

clientkey还是在response中的header的Set-Cookie中

4. 获取skey,uin

请求

https://ssl.ptlogin2.qq.com/jump?clientuin=`clientuin`&keyindex=9&pt_aid=715021417&u1=https%3A%2F%2Fhuifu.qq.com%2Findex.html&pt_local_tk=`pt_local_tk`&pt_3rd_aid=0&ptopt=1&style=40

请求头带入referer和cookie。
cookie需要带入pt_local_tokenclientuinclientkey等关键参数。

skey,uin还是在response中的header的Set-Cookie中

另外此请求返回数据中有一个URL,其实用这个URL就可以直接登录对方的QQ空间了。
URL 大概下面这样子

ptui_qlogin_CB(‘0’, ‘https://ptlogin2.qzone.qq.com/check_sig?pttype=2&uin=QQ号&service=jump&nodirect=0&ptsigx=06bbcd374ab3c5df7d26d1493f9a6364895db2999b5cb25a3fcf208213a7211c3848716312355f3cb98c44626c6f3fda428d7e4e09f196e1ace0c26f3acd7620&s_url=https%3A%2F%2Fqzs.qzone.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone%26specifyurl%3Dhttp%253A%252F%252Fuser.qzone.qq.com%252FQ号&f_url=&ptlang=2052&ptredirect=100&aid=1000101&daid=5&j_later=0&low_login_hour=0®master=0&pt_login_type=2&pt_aid=549000912&pt_aaid=0&pt_light=0&pt_3rd_aid=0', ‘’)

5. 获取p_skey

请求

https://ssl.ptlogin2.qq.com/jump?clientuin=`clientuin`&keyindex=9&pt_aid=549000912&daid=5&u1=https%3A%2F%2Fqzs.qzone.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&pt_local_tk=1543159096&pt_3rd_aid=0&ptopt=1&style=40&has_onekey=1

请求头带入referer和cookie。
cookie需要带入pt_local_token

特别注意:p_skey是在response的Request的Response的Header中

为防止别人恶意传播,此处就不贴代码了。

我把源码放我公众号上了,喜欢研究的朋友可以去取一下,回复: QQ快速登录 即可获取

再放几个常用的接口:

1. 获取QQ全部好友与分组

接口:https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list
POST请求
Header中加入cookie,cookie中带入这三个值:uin=; skey=;p_skey=
Body中带入:bkn=g_tk
g_tk是通过skey经过算法计算出来了,源码中有这个算法

2. QQ群列表

接口:https://qun.qq.com/cgi-bin/qun_mgr/get_group_list
POST请求
Header中加入cookie,cookie中带入这三个值:uin=; skey=;p_skey=
Body中带入:bkn=g_tk

3. 获取某个群的群成员

接口:https://qun.qq.com/cgi-bin/qun_mgr/search_group_members
POST请求

Header中加入cookie,cookie中带入这三个值:uin=; skey=;p_skey=
POST参数:bkn=;gc=群号;sort=0;st=起始位置;end=结束位置
其中end为要获取多少个,st为获取成员的起始位置

-------------本文结束感谢您的阅读-------------