天天看点

PHP第三方登录--QQ登录

//第三方登录 ----QQ号码登录
// 1> 前置条件: QQ号码 + 公网通过域名可以访问的web服务器(网站根目录具有读写权限)  服务器运行环境
// 2> 申请AppID 与 APPKey      QQ互联 :http://connect.qq.com
// 3> 创建注册 : 网站地址:公网可访问的域名  回调地址: 网站首页  -> 复制 meta标签
// 4> 开始验证->创建应用 App ID: dfhshdfjkvj12123   App Key : njdfhjdgfgjkhdjkgh453sd4f54d5gdr

//1 callback.php
<?php
// echo $_GET['code'];
  $oauth = new Oauth();
  $accessToken = $oauth -> qq_callback();
  $openId = $oauth->get_openid();


setcookie('qq_caaessToken',$accessToken,time()+86400);
setcookie('qq_openid',$openId,time()+86400);
header('Location: index.php');

?>
// 2. 引入官方SDK 从开方平台的文档中心下载SDK qqConnect_Server_SDK-php_v2.1.zip
// SDK解读: 文档资料 -> oauth开发指引 -> 开发攻略 _Server_side (服务端)
// SDK 核心类与方法 :
// 登录授权的三个主要类 *.class.php
//  Recorder.class.php[配置读写与SESSION存取]
 ~  __construct()
  $incFileContents = file(ROOT,'comm/inc.php');读入配置文件json字符串
  $incFileContents = $incFileCotents[1];
  $this->inc = json_decode($incFileContents); 解析成php对象
 ~  readInc($name)
   return $this->inc->$name;
   ->readInc('appid') 读取配置文件中的AppID
//  URL.class.php [基于curl库的get与POST请求]
  ~ conbineURL($baseURL,$keysArr);
     $conbined = $baseURL. '?'; 拼接?
     foreach($keysArr as $key=>$val) $valueArr[] = '$key=$val';拼接参数
     $keyStr = implode("&",$valueArr); 使用&拼接参数键值对
  生成形如:http:// xxx.com?a=b&c=d...的链接
    get($url,$keyArr) ; 发送get请求
   post($url,$keyArr,$flag = 0);发送POST请求
//  Oauth.class.php [Oauth相关的URL动态拼接与token请求]
    qq_login ; 拼接QQ登录页面URl
    $appid = $this->record->readInc('appid'); 读取AppID
    $callback = $this->record->readInc('callback'); 读取回调地址
    $scope = $this->record->readInc('scope'); 读取授权列表
    // ..........生成唯一随机字符串防CSRF攻击
  $state = MD5(uniqid(rand(),TURE)); 原样返回参数
  $this->recorrd->write('state',$state); state写入SESSION中
 $ketArr = array(
     'response_type' => 'code',
     'client_id' => $appid,
     'redirect_url' => $callback,
     'scope' => $scope,
     'state' => $state,
   );

// index.php