只需要群号实现一键加群,这个API是QQ官方的加群接口得到的,其中包含了三个接口,分别供PC和IOS端和安卓端调用实现加群和直接进群。
警告:本API仅供开发者学习交流使用,请勿用于非法用途。
分析接口调用以及PHP写法的思路:
我们通过QQ群的加群链接抓到GET包:
http://wp.qq.com/wpa/g_wpa_get?guin=34544417 //主要获取加群链接key的接口
我们发现这个接口提交GET请求后直接返回{"retcode":100101}
这是腾讯常见的错误提示,也就是说参数有错误。
经过我的研究发现,GET这个接口后被重定向到了这个接口:
http://shang.qq.com/wpa/g_wpa_get?guin=34544417
然后我们再get发现还是返回{"retcode":100101}
经过反复的测试得到一个结论:就是需要加请求协议头:
于是,我加了最基本的请求头的参数:
Content-Type
Accept
Referer
User-Agent
然后我们再GET成功返回了我们要的包含key的数据:
{"retcode":0,"result":{"data":[{"d":"0101020001020004020f1b21","guin":34544417,"key":"68c6e876725f2405ac41260b37f172a926536c2adad746683f924e5bbe40aa15"}]}}
然后我们要做的就是先取出这个key
68c6e876725f2405ac41260b37f172a926536c2adad746683f924e5bbe40aa15
然后我们根据常用的加群链接来获取自己需要的直接加群链接:
http://wp.qq.com/wpa/qunwpa?idkey=取得的key
经过测试这又是个重定向链接到:
http://shang.qq.com/wpa/qunwpa?idkey=取得的key
根据上面的协议头继续get:
看到了我们经常通过加群链接加群的跳转页面:
实际上就是http://shang.qq.com/wpa/qunwpa?idkey=取得的key
然后我们在这个跳转页面发现了关键的javascript:
var rawuin = 34544417;
var qsig = "tencent://groupwpa/?subcmd=all\u0026param=7B2267726F757055696E223A33343534343431372C2274696D655374616D70223A313533353435313938377D0A";
var k = "http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Fk%3DdU_ErRCUIx0Tk60fxnGotxbZAgiMKdeF";
var qun_type = "0";
var referer = "http://wp.qq.com/wpa/qunwpa?idkey=7b44d484b4005f743aa4b2fdf6f201e23e42bc4d4870fde1ee9e66cc95bbcfcd";
很明显这是腾讯定义的加群链接
经过分析发现这些url都是有定义的
其中rawuin是群号
qsig是PC端直接加群的链接
k是移动端加群的链接
referer是重定向的链接
然后我们在后面的javascript代码中分析得到以下结论:
如果是当前链接打开直接重定向加群链接
如果是移动端打开直接重定向到k 的链接
如果是PC端打开直接重定向到qsig 的链接
详细说明(本人经过多终端测试得出的结论):
PC端加群链接(访问直接弹出加群窗口或群聊天窗口,仅支持PC,IOS):tencent://groupwpa/?subcmd=all\u0026param=7B2267726F757055696E223A33343534343431372C2274696D655374616D70223A313533353435313938377D0A
移动端加群链接(URL需要转码,访问直接跳转到QQ APP群资料页面,支持PC,iOS,安卓):http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Fk%3DdU_ErRCUIx0Tk60fxnGotxbZAgiMKdeF
公用加群链接(页面自动判断用户平台,访问自动判断你的终端来加群,支持PC,iOS):http://wp.qq.com/wpa/qunwpa?idkey=7b44d484b4005f743aa4b2fdf6f201e23e42bc4d4870fde1ee9e66cc95bbcfcd
一键加群API接口PHP源代码:
<?php
$guin = @$_REQUEST['guin']; //接收群号
$type = @$_REQUEST['type']; //接收类型
if ($guin != '')
{
$url = 'http://shang.qq.com/wpa/g_wpa_get?guin='.$guin;
$data = get($url);
$key = GetBetween($data,'key":"','"}'); //取得key
$url = 'http://shang.qq.com/wpa/qunwpa?idkey='.$key;
$body = get($url); //取得跳转页面源码
if ($type != '')
{
if ($type == '1') //如果类型为1,取得PC端加群链接
{
$link = GetBetween($body,'var qsig = "','";'); //取得PC端加群链接
$link = str_replace('\u0026','&',$link);
//echo $link;
header('Location:'.$link); //重定向加群链接直接加群
}
if ($type == '2') //如果类型为2,取得移动端加群链接
{
$link = GetBetween($body,'var k = "','";');
$link = urldecode($link);
//echo $link;
header('Location:'.$link); //重定向加群链接直接加群
}
if ($type == '3') //如果类型为3,取得公用加群链接
{
//echo $url;
header('Location:'.$url); //重定向加群链接直接加群
}
}else{
//echo $body;
header('Location:'.$url);
}
}else{
echo '群号guin参数不正确';
}
function GetBetween($content,$start,$end){
$r = explode($start, $content);
if (isset($r[1])){
$r = explode($end, $r[1]);
return $r[0];
}
return '';
}
function get($url)
{
$header = array (
"Content-Type: application/x-www-form-urlencoded",
'Accept: */*',
"Referer: ".$url,
'User-Agent: Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)',);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, $url);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
?>
调用方式
公用一键加群:https://api.mlwei.com/qun/?guin=34544417
PC端加群:https://api.mlwei.com/qun/?guin=34544417&type=1
移动端加群:https://api.mlwei.com/qun/?guin=34544417&type=2
公用加群链接:https://api.mlwei.com/qun/?guin=34544417&type=3
注:34544417是群号,后面的参数是类型。
转自小伟博客