第三方登录SDK

          紧接着上次的第三方登录文档,这一波又来了。

       一、使用qq登录https://connect.qq.com/

            首次登录的话会跳转到应用开发者注册,自己测试的话选择个人。下面的各项自己按真实情况填写。

             

        注册后添加应用,网址一定要是外网能访问的你的网站,不能随便填写的。点击验证会出现一部分代码,将代码复制粘贴在你网站首页或者一级目录下HTML代码的head标签中。完成代码粘贴      后点击弹出成的开始验证。验证成功会提示网站验证成功,下一步创建应用。

        创建成功后自动跳转到应用,页面上会显示上一个博文中的APPIDAPPKEY了。          

        配置本地的项目的域名,将域名指向127.0.0.1;没有虚拟机的可以使用localhost来配置,在自己的域名所指位置或者localhost创建一个接收返回值的php文件,如:code.php。在其中           接收$_GET[“code”]。并将其也配置在你添加的应用回调地址中(http://localhost/code.php)。(多个回调地址中间用英文分号隔开)

           QQ互联每修改一次配置都有验证一下网址才可以保存。

      二、引入官方SDK

            从开放平台的文档资料下载SDK

         

            

 

                找个合适的版本,因为我做的是PHP,就下载PHP的,做java的小伙伴可以下载java的对应类型。

                下载解压后会有一个connect2.1的文件夹,放在项目的根目录,API文件夹中放置了配置文件和接入类,开发中主要用的就是这个文件夹,doc文件夹是开发帮助文档,example中是一

     些功能示例。Install文件夹是帮助配置的一个文件。

              访问connect2.1文件夹,会显示下图的样子,按照提示填写配置,请求授权不建议选择太多,按照自己的需求选择就可以,因为选择的授权都会在用户登录的OAuth页面显示给用户的,

     给用户不安全感。配置之后除了API文件夹其他都可以删掉啦。

              

             如果没有看上一篇博文的话要提前看一下,方便理解啊。

             QQ互联http://wiki.connect.qq.com/这个页面中OAuth协议介绍中有开发攻略,  Server_side  Client_side分别指的服务端语言和客户端语言分别是怎么接入的,php语言是服务端语言,所以使用

    的是Server_side

      三、SDK核心类和重要方法 

登录授权相关的三个主要类(Connect2.1/class/*.class.php

  (1)、Recorder.class.php[配置读写与SESSION存取]

        __construct方法中:

          $incFileContents = file(ROOT."comm/inc.php");//读取配置文件jsoninc.php是自动             生成的一个文件,里面包含有appidappkey,callback

          $incFileContents = $incFileContents[1];

          $this->inc = json_decode($incFileContents);//解析成PHP对象

        readInc($name)方法中:

          return $this->inc->$name;//->readInc("appid")即读取配置文件的appid

 

 (2)、URL.classphp[基于CURL库的getpost请求]

  public function combineURL($baseURL,$keysArr){

        $combined = $baseURL."?";//拼接?

        $valueArr = array();
 
        foreach($keysArr as $key => $val){
$valueArr[] = "$key=$val";//拼接参数 } $keyStr = implode("&",$valueArr);//使用&拼接参数键值对 $combined .= ($keyStr); return $combined; }

            (3)、Oauth.class.php[Oauth相关URL动态拼接与token操作]

public function qq_login(){//拼接qq登录页面URL
        $appid = $this->recorder->readInc("appid");//读取appid
        $callback = $this->recorder->readInc("callback");//读取回调地址
        $scope = $this->recorder->readInc("scope");//读取授权列表

        //-------生成唯一随机串防CSRF攻击
        $state = md5(uniqid(rand(), TRUE));//原样返回参数
        $this->recorder->write('state',$state);//state写入session中

        //-------构造请求参数列表
        $keysArr = array(
            "response_type" => "code",
            "client_id" => $appid,
            "redirect_uri" => $callback,
            "state" => $state,
            "scope" => $scope
        );

        $login_url =  $this->urlUtils->combineURL(self::GET_AUTH_CODE_URL, $keysArr);

        header("Location:$login_url");
    }

                

      四、SDK优化

             SDK太长时间也没有新的版本,所以有的东西老了,要调整一下文件及目录。SDK中可能有常量名称太普通,与你本地的项目中常量名称重复了;所以可以批量替换SDK中的常量名称为不常见

    的名称。可以将代码少的文件直接写在包含该文件的页面中,省去包含。然后可以将不用的文件删除。

      下面呢有一个调试函数,可以新建一个php文件放进去,我这就放到了debug.php中了;在项目中引入这个文件用来调试。

function  debug($val,$dump=false,$exit=true){
    if($dump){
        $zz = 'var_dump';
    } else {
        $zz = (is_array($val)|| is_object($val))?'print_r':'printf';
    }
    //输出到html、
    header("Content-type:text/html;charst=utf-8");
    echo '<pre>debug output:<hr/>';
    $zz($val);
    echo '</pre>';
    if($exit)exit;
}

 

     

qqlogin.php页面

  require_once 'debug.php';

  require_once 'Connect2.1/qqConnectAPI.php';

  //访问QQ登录页面

  $oauth = new Oauth();

  $oauth->qq_login();

     五、获取openId

       QQ用户在第三方站点的唯一标识,同一个QQ用户在不同站点登录使用QQ登录openID是一样的。可以直接判断openID是不是第一次登录就可以知道用户是不是第一次登录,可以做一些限制什  么的。

 

  获取openID

  Callback.php页面

     require_once 'debug.php';

    require_once 'Connect2.1/qqConnectAPI.php';

    //请求accesstoken

    $oauth = new Oauth();

    $accesstoken=$oauth->aa_callback();

    $openid=$oauth->get_openid();

  最后可以将$accesstoken$openid存在cookie里,退出qq登录时候也就是将cookie中存的数据删除掉。

   

 

            在使用过程中需要注意以下三点:

                  APPid申请之后3个月未申请上线将被回收。

                  申请上线需要使用官网提供的QQ登录按钮素材。

                  站点里不能有违国家法律的东西。

     接下来的开发可以参照官方给的流程:在这里-->http://wiki.connect.qq.com/

     这个暂时告一段落了,后面还要继续新的方向......加油!

 

 

posted @ 2017-05-20 17:56  楠...楠  阅读(4058)  评论(1编辑  收藏  举报