- extension=php_openssl.dll
- extension=php_curl.dll
- allow_url_include = on
第三步:新建配置文件
在application\config下新建文件qq_setting.php并输入如下内容
- <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
- /**
- * @qq互联配置信息
- * 默认开启get_user_info模块
- * **/
- $config['inc_info'] = array(
- 'appid' => '第一步中申请的appid',
- 'appkey' => '第一步中申请的key',
- 'callback' => '第一步中回调地址'
- );
第四步:创建自定义类
在application\libraries下新建个文件夹,命名为tencent,然后再tencent下创建文件oauth.php
oauth.php文件内容如下
- <?php
- /*
- 腾讯QQ登陆模块
- www.wfuyu.com 程序员人生
- 2015-11-19
- */
- class Oauth
- {
- public function __construct() {
- $this->access_token= '';
- $this->openid = '';
- $CI = &get_instance();
- $CI->config->load('qq_setting');
- $this->qq_set= $CI->config->item('inc_info');
- }
- //获得登录的 openid
- public function wget_openid($code){
- $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']}";
- $content=file_get_contents($url);
- if (stristr($content,'access_token=')) {
- $params = explode('&',$content);
- $tokens = explode('=',$params[0]);
- $token = $tokens[1];
- $this->access_token=$token;
- if ($token) {
- $url="https://graph.qq.com/oauth2.0/me?access_token=$token";
- $content=file_get_contents($url);
- $content=str_replace('callback( ','',$content);
- $content=str_replace(' );','',$content);
- $returns = json_decode($content);
- $openid = $returns->openid;
- $this->openid = $openid;
- $_SESSION["token2"] = $openid;
- } else {
- $openid='';
- }
- } elseif (stristr($content,'error')) {
- $openid='';
- }
- return $openid;
- }
- //用户登陆
- public function redirect_to_login() {
- //跳转到QQ登录页的接口地址, 不要更改!!
- $redirect = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id={$this->qq_set['appid']}&scope=&redirect_uri={$this->qq_set['callback']}";
- header("Location:$redirect");
- }
- /**
- * 返回用户信息
- *
- */
- public function get_user_info(){
- $url = "https://graph.qq.com/user/get_user_info?access_token=$this->access_token&oauth_consumer_key={$this->qq_set['appid']}&openid=$this->openid";
- //$content=file_get_contents($url);
- $content=file_get_contents($url);
- $result = json_decode($content);
- return $result->nickname;
- }
- }
这个代码,大家直接复制就可以用了
第五步:创建一个member控制器,在member控制器中,新建一个qq_login方法
代码如下
- //qq用户登陆
- public function qq_login(){
- $this->load->library('tencent/oauth','oauth');
- if(!isset($_GET['code'])){
- $this->oauth->redirect_to_login();//登陆腾讯qq,并返回到回调地址
- }else{
- $code = $_GET['code'];
- $openid = $this->oauth->wget_openid($code);
- if(!emptyempty($openid)){
- $data['info']=$this->m->get_member($openid,'connectid');//通过connectid获取会员信息
- if(!emptyempty($data['info'])){
- //QQ已存在于数据库(已绑定QQ的用户),则直接转向登陆操作
- $res=$this->m->check_login($data['info'],'qq');
- if($res==true){
- $this->message('登录成功!',site_url($this->router->class));
- }else{
- $this->message('用户名或密码错误,',site_url($this->router->class.'/login'));
- }
- }else{
- //未存在于数据库中,跳去完善资料页面。页面预置用户名(QQ返回是UTF8编码,如有需要进行转码)
- $user = $this->oauth->get_user_info();//获取用户信息
- $data['nickname'] =$user;
- $data['connectid'] = $openid;
- $this->session->set_userdata('qqsession',$data);
- $this->seotitle='用户注册-'.$this->seotitle;
- $this->load->view($this->router->class.'/register');
- }
- }else{
- $this->login();
- }
- }
- }
上面是我实际项目的方法,大家可以根据自己的项目修改就可以了。
第六步:放置QQ登陆图标
任意地方,放如下代码就可了
- <a href="/member/qq_login" target="_blank"><img src="skin/member/images/qq.jpg"></a>
到这里,就完成了全部功能,QQ一键登录用于CI框架,大家还有什么不明白的地方,都可以在程序员人生网给我留言