QQ 扫码登陆代码:
<?php
header('Access-Control-Allow-Origin:*');
header('Content-type:application/json; charset=utf-8');
error_reporting(0);
date_default_timezone_set("PRC");
!empty($_GET['type']) ? $type = $_GET['type'] : error("请求参数错误,请刷新重试!~~");
switch ($type)
{
case 'Getqrcode':
echo json_encode(getqrcode());
break;
case 'Getresult':
!empty($_GET['qrsig']) ? $qrsig=$_GET['qrsig'] : error("请求参数错误,缺少qrsig~~");
echo json_encode(getresult($qrsig),JSON_UNESCAPED_UNICODE);
break;
default:
echo json_encode(getqrcode());
}
/**
* 获取二维码
*/
function getqrcode() {
$qrcode = array();
$api = 'https://ssl.ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=3&d=72&v=7&t=0.1415855' . time();
$paras['header'] = 1;
$ret = get_curl($api, $paras);
preg_match('/qrsig=(.*?);/', $ret, $matches);
preg_match_all('/ (d){3}/', $ret, $Conlen);
$arr = explode('com;', $ret);
$qrcode['qrsig'] = $matches[1];
$qrcode['data'] = base64_encode(trim($arr['1']));
return $qrcode;
}
/**
* @param $qrsig
* @return array
* 获取登录状态
*/
function getresult($qrsig) {
$ret = array();
$api = 'https://ssl.ptlogin2.qq.com/ptqrlogin?u1=' . urlencode('https://qzs.qzone.qq.com/') . '&ptqrtoken=' . getqrtoken($qrsig) . '&ptredirect=0&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-1-' . time() . '&js_ver=90220&js_type=1&login_sig=&pt_uistyle=40&aid=549000912&daid=5&has_onekey=1';
$paras['cookie'] = 'qrsig=' . $qrsig . ';';
$body = get_curl($api, $paras);
if (preg_match("/ptuiCB('(.*?)')/", $body, $arr)) {
$r = explode("','", str_replace("', '", "','", $arr[1]));
if ($r[0] == 0) {
preg_match('/uin=(d+)&/', $body, $uin);
$ret['code'] = 1;
$ret['data']['uin'] = $uin[1];
$ret['msg'] = 'QQ登录成功';
} elseif ($r[0] == 65) {
$ret['msg'] = '登录二维码已失效,请刷新重试!';
} elseif ($r[0] == 66) {
$ret['msg'] = '请使用手机QQ扫码登录';
} elseif ($r[0] == 67) {
$ret['msg'] = '正在验证二维码...';
} else {
$ret['msg'] = '未知错误001,请刷新重试!';
}
} else {
$ret['msg'] = '未知错误002,请刷新重试!';
}
return $ret;
}
function get_curl($url, $paras = array()) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$httpheader[] = "Accept:*/*";
$httpheader[] = "Accept-Encoding:gzip,deflate,sdch";
$httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
$httpheader[] = "Connection:close";
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
if ($paras['ctime']) { // 连接超时
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $paras['ctime']);
}
if ($paras['rtime']) { // 读取超时
curl_setopt($ch, CURLOPT_TIMEOUT_MS, $paras['rtime']);
}
if ($paras['post']) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $paras['post']);
}
if ($paras['header']) {
curl_setopt($ch, CURLOPT_HEADER, true);
}
if ($paras['cookie']) {
curl_setopt($ch, CURLOPT_COOKIE, $paras['cookie']);
}
if ($paras['refer']) {
if ($paras['refer'] == 1) {
curl_setopt($ch, CURLOPT_REFERER, 'http://m.qzone.com/infocenter?g_f=');
} else {
curl_setopt($ch, CURLOPT_REFERER, $paras['refer']);
}
}
if ($paras['ua']) {
curl_setopt($ch, CURLOPT_USERAGENT, $paras['ua']);
} else {
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
}
if ($paras['nobody']) {
curl_setopt($ch, CURLOPT_NOBODY, 1);
}
curl_setopt($ch, CURLOPT_ENCODING, "gzip");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$ret = curl_exec($ch);
curl_close($ch);
return $ret;
}
/** QQ空间Token算法*/
function getqrtoken($qrsig) {
$len = strlen($qrsig);
$hash = 0;
for ($i = 0; $i < $len; $i++) {
$hash += (($hash << 5) & 2147483647) + ord($qrsig[$i]) & 2147483647; $hash &= 2147483647; } return $hash & 2147483647; } function error($str){ exit(json_encode([ "code"=>-1,
"msg"=>$str
],JSON_UNESCAPED_UNICODE));
}
微信扫码登录代码:
<?php
header('Access-Control-Allow-Origin:*');
header('Content-type:application/json; charset=utf-8');
error_reporting(0);
date_default_timezone_set("PRC");
!empty($_GET['type']) ? $type = $_GET['type'] : error("请求参数错误,请刷新重试!~~");
switch ($type)
{
case 'Getqrcode':
echo json_encode(getqrcode());
break;
case 'Getresult':
!empty($_GET['qrsig']) ? $qrsig=$_GET['qrsig'] : error("请求参数错误,缺少qrsig~~");
echo json_encode(getresult($qrsig),JSON_UNESCAPED_UNICODE);
break;
default:
echo json_encode(getqrcode());
}
/**
* 获取二维码
*/
function getqrcode() {
$api = 'https://login.wx2.qq.com/jslogin?appid=wx782c26e4c19acffb';
$ret = get_curl($api);
//print_r($ret);die;
preg_match('/"(.*?)"/', $ret, $matches);
//print_r($matches);die;
$qrcode['data'] = 'https://login.weixin.qq.com/qrcode/'.$matches[1];
$qrcode['uuid'] = $matches[1];
return $qrcode;
}
/**
* [url=home.php?mod=space&uid=952169]@Param[/url] $qrsig
* [url=home.php?mod=space&uid=155549]@Return[/url] array
* 获取登录状态
*/
function getresult($uuid) {
$paras['ctime'] = 1000;
$paras['rtime'] = 1000;
$paras['refer'] = 'https://wx2.qq.com/';
$api = 'https://login.wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=' . $uuid . '&tip=0';
$body = get_curl($api, $paras);
preg_match('/(d){3}/', $body, $code);
preg_match('/redirect_uri="(.*?)"/', $body, $url);
if ($code[0] == '200') {
$body = get_curl($url[1]);
preg_match('/(d*?)</wxuin>/', $body, $wxuin);
$ret['code'] = 200;
$ret['data']['uin'] = $wxuin[1];
$ret['data']['type'] = 'wx';
$ret['msg'] = '微信登录成功';
} else {
$ret['code'] = 408;
$ret['msg'] = '请使用手机微信扫码登录';
}
print_r($ret);die;
return $ret;
}
function get_curl($url, $paras = array()) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$httpheader[] = "Accept:*/*";
$httpheader[] = "Accept-Encoding:gzip,deflate,sdch";
$httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
$httpheader[] = "Connection:close";
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
if ($paras['ctime']) { // 连接超时
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $paras['ctime']);
}
if ($paras['rtime']) { // 读取超时
curl_setopt($ch, CURLOPT_TIMEOUT_MS, $paras['rtime']);
}
if ($paras['post']) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $paras['post']);
}
if ($paras['header']) {
curl_setopt($ch, CURLOPT_HEADER, true);
}
if ($paras['cookie']) {
curl_setopt($ch, CURLOPT_COOKIE, $paras['cookie']);
}
if ($paras['refer']) {
if ($paras['refer'] == 1) {
curl_setopt($ch, CURLOPT_REFERER, 'http://m.qzone.com/infocenter?g_f=');
} else {
curl_setopt($ch, CURLOPT_REFERER, $paras['refer']);
}
}
if ($paras['ua']) {
curl_setopt($ch, CURLOPT_USERAGENT, $paras['ua']);
} else {
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
}
if ($paras['nobody']) {
curl_setopt($ch, CURLOPT_NOBODY, 1);
}
curl_setopt($ch, CURLOPT_ENCODING, "gzip");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$ret = curl_exec($ch);
curl_close($ch);
return $ret;
}
function error($str){
exit(json_encode([
"code"=>-1,
"msg"=>$str
],JSON_UNESCAPED_UNICODE));
}
以上是《QQ 扫码登陆、微信扫码登录代码教程》的全部内容,
感谢您对程序员阿鑫博客的支持!
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!