QQ 扫码登陆详解 – 可做登陆或者授权程序

站长

发表文章数:4245

前言:

账号,注册啥的太麻烦了,就想着直接用 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)); 
  • }

未经允许不得转载:www.xssyun.com作者:站长, 转载或复制请以 超链接形式 并注明出处 xss云之家-资源网,新人技术交流平台,一个湖北娃的个人博客
原文地址:《QQ 扫码登陆详解 – 可做登陆或者授权程序》 发布于2020-02-22

分享到:
赞(0) 生成海报

评论 抢沙发

8 + 9 =


长按图片转发给朋友

投稿赚钱
2020年在家赚取零花钱
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册