国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 程序人生 > 随笔 > CI框架QQ一键登录(CI如何使用QQ互联)

CI框架QQ一键登录(CI如何使用QQ互联)

来源:程序员人生   发布时间:2015-11-19 00:34:44 阅读次数:12737次
   在这里教大家如何用CI框架进行QQ一键登录,本文为实战篇,已经运行在平台上了,按照我的步骤来,你也可以使用CI框架进行QQ一键登陆

第一步:注册QQ互联 地址http://connect.qq.com
创建应用,如下图所示

这里网站地址填写网站首页地址,回调地址填写member控制器下的qq_login方法,即图片上的回调地址

第二步:配置服务器
如果你的系统没有安装curl,请先安装curl。
在php.ini中,需要开启如下代码
  1. extension=php_openssl.dll 
  2. extension=php_curl.dll 
  3. allow_url_include = on 


第三步:新建配置文件
在application\config下新建文件qq_setting.php并输入如下内容
 

  1. <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
  2.  
  3.     /** 
  4.      * @qq互联配置信息 
  5.      * 默认开启get_user_info模块 
  6.      * **/ 
  7.  
  8.     $config['inc_info'] = array
  9.                 'appid' => '第一步中申请的appid'
  10.                 'appkey' => '第一步中申请的key'
  11.                 'callback' => '第一步中回调地址' 
  12.     ); 

第四步:创建自定义类
在application\libraries下新建个文件夹,命名为tencent,然后再tencent下创建文件oauth.php
oauth.php文件内容如下
 

  1. <?php 
  2. /* 
  3. 腾讯QQ登陆模块 
  4. www.wfuyu.com 程序员人生 
  5. 2015-11-19 
  6. */     
  7.     class Oauth 
  8.     { 
  9.         public function __construct() { 
  10.             $this->access_token= ''
  11.             $this->openid = ''
  12.             $CI = &get_instance(); 
  13.             $CI->config->load('qq_setting'); 
  14.             $this->qq_set= $CI->config->item('inc_info'); 
  15.         } 
  16.  
  17.      //获得登录的 openid 
  18.         public function wget_openid($code){ 
  19.             $url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id={$this->qq_set['appid']}&client_secret={$this->qq_set['appkey']}&code={$code}&redirect_uri={$this->qq_set['callback']}"
  20.            $content=file_get_contents($url); 
  21.                     if (stristr($content,'access_token=')) { 
  22.                 $params = explode('&',$content); 
  23.                 $tokens = explode('=',$params[0]); 
  24.                 $token  = $tokens[1]; 
  25.                 $this->access_token=$token
  26.                 if ($token) { 
  27.                      $url="https://graph.qq.com/oauth2.0/me?access_token=$token"
  28.                     $content=file_get_contents($url); 
  29.                      $content=str_replace('callback( ','',$content); 
  30.                      $content=str_replace(' );','',$content); 
  31.                      $returns = json_decode($content); 
  32.                      $openid = $returns->openid; 
  33.                      $this->openid = $openid
  34.                      $_SESSION["token2"]  = $openid
  35.                 } else { 
  36.                     $openid=''
  37.                 } 
  38.             } elseif (stristr($content,'error')) { 
  39.                 $openid=''
  40.             } 
  41.              
  42.             return $openid
  43.         } 
  44. //用户登陆       
  45.     public function redirect_to_login() { 
  46.             //跳转到QQ登录页的接口地址, 不要更改!! 
  47.             $redirect = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id={$this->qq_set['appid']}&scope=&redirect_uri={$this->qq_set['callback']}"
  48.             header("Location:$redirect"); 
  49.         } 
  50.          
  51.  /** 
  52.         * 返回用户信息 
  53.         *  
  54. */ 
  55.         public function get_user_info(){ 
  56.             $url = "https://graph.qq.com/user/get_user_info?access_token=$this->access_token&oauth_consumer_key={$this->qq_set['appid']}&openid=$this->openid"
  57.             //$content=file_get_contents($url); 
  58.                  
  59.            $content=file_get_contents($url); 
  60.             $result = json_decode($content); 
  61.             return $result->nickname; 
  62.         } 
  63.      
  64.  
  65.     } 

这个代码,大家直接复制就可以用了

第五步:创建一个member控制器,在member控制器中,新建一个qq_login方法
代码如下
 

  1. //qq用户登陆 
  2.   public function qq_login(){ 
  3.          $this->load->library('tencent/oauth','oauth');  
  4.          if(!isset($_GET['code'])){ 
  5.                       $this->oauth->redirect_to_login();//登陆腾讯qq,并返回到回调地址 
  6.           }else
  7.              $code = $_GET['code']; 
  8.              $openid =  $this->oauth->wget_openid($code); 
  9.              if(!emptyempty($openid)){ 
  10.  
  11.                $data['info']=$this->m->get_member($openid,'connectid');//通过connectid获取会员信息 
  12.                  if(!emptyempty($data['info'])){ 
  13.                        //QQ已存在于数据库(已绑定QQ的用户),则直接转向登陆操作 
  14.                         $res=$this->m->check_login($data['info'],'qq'); 
  15.                            if($res==true){ 
  16.                                $this->message('登录成功!',site_url($this->router->class)); 
  17.                            }else
  18.                              $this->message('用户名或密码错误,',site_url($this->router->class.'/login')); 
  19.                            } 
  20.          
  21.                  }else
  22.                    //未存在于数据库中,跳去完善资料页面。页面预置用户名(QQ返回是UTF8编码,如有需要进行转码) 
  23.                          $user = $this->oauth->get_user_info();//获取用户信息 
  24.                           
  25.                          $data['nickname'] =$user
  26.                          $data['connectid'] = $openid
  27.                          $this->session->set_userdata('qqsession',$data); 
  28.                          $this->seotitle='用户注册-'.$this->seotitle; 
  29.                          $this->load->view($this->router->class.'/register'); 
  30.                           
  31.                             
  32.                  } 
  33.              }else
  34.                  $this->login(); 
  35.              } 
  36.          }   
  37.  
  38.     } 

上面是我实际项目的方法,大家可以根据自己的项目修改就可以了。

第六步:放置QQ登陆图标
任意地方,放如下代码就可了

  1. <a href="/member/qq_login" target="_blank"><img src="skin/member/images/qq.jpg"></a> 


到这里,就完成了全部功能,QQ一键登录用于CI框架,大家还有什么不明白的地方,都可以在程序员人生网给我留言

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生