search
HomePHP FrameworkThinkPHPQQ third-party authentication login extension class based on Thinkphp3.2

QQ third-party authentication login extension class based on Thinkphp3.2

QQ third-party authentication login extension class based on Thinkphp3.2

Based on Thinkphp3.2 QQ third-party authentication login extension class. In fact, the following classes are also collected and compiled by me from the TP official website. I have slightly modified and improved them.

Here I put the file in "/Application/Common/Lib/Qqconnect.class.php". (In fact, you can put this file path according to your own preference)

Instantiation

$Qqconnect = new \Common\Lib\Qqconnect();

In the __construct method, you can directly write your app_id, app_key and callback address
You can also change the code to pass parameters or write it to the configuration file according to your own preferences.

Calling method:

1. Call the getAuthCode method in the login button method of qq

$qqobj=new \Org\Util\Qqconnect();
$qqobj->getAuthCode();

2. Call the getUsrInfo method in the callback address method

$qqobj=new \Org\Util\Qqconnect();
$result=$qqobj->getUsrInfo();

3. The parameter scope in the getAuthCode method adds the values ​​​​get_user_info, list_album, upload_pic, do_like according to its own needs.

Qqconnect.class.php

<?php
// +----------------------------------------------------------------------
// | Copyright (c) 2015.
// +----------------------------------------------------------------------
// | Author: qiandutianxia <852997402@qq.com>
// +----------------------------------------------------------------------
namespace Common\Lib;
/**
 *  qq第三方登录认证
 */
class Qqconnect {
    private static $data;
    //APP ID
    private $app_id="";
    //APP KEY
    private $app_key="";
    //回调地址
    private $callBackUrl="";
    //Authorization Code
    private $code="";
    //access Token
    private $accessToken="";
    private $openid="";
 
    public function __construct(){
        $this->app_id="";
        $this->app_key="";
        $this->callBackUrl=""; //你的回调地址
        //检查用户数据
        if(empty($_SESSION[&#39;QC_userData&#39;])){
            self::$data = array();
        }else{
            self::$data = $_SESSION[&#39;QC_userData&#39;];
        }
    }
 
 
    //获取Authorization Code
    public function getAuthCode(){
        $url="https://graph.qq.com/oauth2.0/authorize";
        $param[&#39;response_type&#39;]="code";
        $param[&#39;client_id&#39;]=$this->app_id;
        $param[&#39;redirect_uri&#39;]=$this->callBackUrl;
 
        //生成唯一随机串防CSRF攻击
        $state = md5(uniqid(rand(), TRUE));
        $_SESSION[&#39;state&#39;]=$state;
        $param[&#39;state&#39;]=$state;
        $param[&#39;scope&#39;]="get_user_info";
        $param =http_build_query($param,&#39;&#39;,&#39;&&#39;);
        $url=$url."?".$param;
        header("Location:".$url);
    }
 
    //通过Authorization Code获取Access Token
    private function _getAccessToken(){
        $this->code=$_GET[&#39;code&#39;];
        $url="https://graph.qq.com/oauth2.0/token";
        $param[&#39;grant_type&#39;]="authorization_code";
        $param[&#39;client_id&#39;]=$this->app_id;
        $param[&#39;client_secret&#39;]=$this->app_key;
        $param[&#39;code&#39;]=$this->code;
        $param[&#39;redirect_uri&#39;]=$this->callBackUrl;
        $param =http_build_query($param,&#39;&#39;,&#39;&&#39;);
        $url=$url."?".$param;
        return $this->getUrl($url);
    }
 
    //获取openid
    public function _setOpenID(){
        $rzt=$this->_getAccessToken();
        parse_str($rzt,$data);
        $this->accessToken=$data[&#39;access_token&#39;];
        $url="https://graph.qq.com/oauth2.0/me";
        $param[&#39;access_token&#39;]=$this->accessToken;
        $param =http_build_query($param,&#39;&#39;,&#39;&&#39;);
        $url=$url."?".$param;
        $response=$this->getUrl($url);
 
        //--------检测错误是否发生
        if(strpos($response, "callback") !== false){
            $lpos = strpos($response, "(");
            $rpos = strrpos($response, ")");
            $response = substr($response, $lpos + 1, $rpos - $lpos -1);
        }
        $user = json_decode($response);
 
        if(isset($user->error)){
            exit("错误代码:100007");
        }
         
        return $user->openid;
    }
 
 
    //获取信息
    public function getUserInfo(){
        if($_GET[&#39;state&#39;] != $_SESSION[&#39;state&#39;]){
            exit("错误代码:300001");
        }
 
        $openid=$this->_setOpenID();
        if(empty($openid)){
            return false;
        }
        session(&#39;openid&#39;,$openid);
        $url="https://graph.qq.com/user/get_user_info";
        $param[&#39;access_token&#39;]=$this->accessToken;
        $param[&#39;oauth_consumer_key&#39;]=$this->app_id;
        $param[&#39;openid&#39;]=$openid;
        $param =http_build_query($param,&#39;&#39;,&#39;&&#39;);
        $url=$url."?".$param;
        $rzt=$this->getUrl($url);
        return $rzt;
    }
 
    public function getOpenId(){
        if($_GET[&#39;state&#39;] != $_SESSION[&#39;state&#39;]){
            exit("错误代码:300001");
        }
        $rzt=$this->_getAccessToken();
        parse_str($rzt,$data);
        $this->accessToken=$data[&#39;access_token&#39;];
        $url="https://graph.qq.com/oauth2.0/me";
        $param[&#39;access_token&#39;]=$this->accessToken;
        $param =http_build_query($param,&#39;&#39;,&#39;&&#39;);
        $url=$url."?".$param;
        $response=$this->getUrl($url);
 
        //--------检测错误是否发生
        if(strpos($response, "callback") !== false){
            $lpos = strpos($response, "(");
            $rpos = strrpos($response, ")");
            $response = substr($response, $lpos + 1, $rpos - $lpos -1);
        }
        $info = object_array(json_decode($response));
        $qq[&#39;access_token&#39;] = $this->accessToken;
        $qq[&#39;openid&#39;]       = $info[&#39;openid&#39;];
        session(&#39;qq&#39;,$qq);
        return $info[&#39;openid&#39;];
    }
 
 
    public function getInfo($openid=&#39;&#39;,$accessToken=&#39;&#39;){
        $url="https://graph.qq.com/user/get_user_info";
        $param[&#39;oauth_consumer_key&#39;]=$this->app_id;
        $param[&#39;access_token&#39;]=$accessToken;
        $param[&#39;openid&#39;]=$openid;
        $param =http_build_query($param,&#39;&#39;,&#39;&&#39;);
        $url=$url."?".$param;
        $rzt=$this->getUrl($url);
        $info = object_array(json_decode($rzt));
        return $info;
    }
 
 
    //CURL GET
    private function getUrl($url){
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        if (!empty($options)){
            curl_setopt_array($ch, $options);
        }
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
 
 
    //CURL POST
    private function postUrl($url,$post_data){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        ob_start();
        curl_exec($ch);
        $result = ob_get_contents();
        ob_end_clean();
        return $result;
    }
}

The following is the code in the controller

LoginController.class.php This file mainly contains two methods

The address accessed when clicking QQ login

public function qq_login(){
        $Qqconnect = new \Common\Lib\Qqconnect();
        $Qqconnect->getAuthCode();
    }

Callback access address

public function callback(){
        $Qqconnect = new \Common\Lib\Qqconnect();
        $openid = $Qqconnect->getOpenId();
        $qq = session(&#39;qq&#39;);
 
 
 
        $Member = M(&#39;Member&#39;);
        $map = array();
        $map[&#39;openid&#39;] = $openid;
        $userInfo = $Member->where($map)->find();
 
 
        if(!empty($userInfo)){
            $this->success(&#39;登陆成功!&#39;,U(&#39;Member/index&#39;));
        }else{
            $Qqconnect = new \Common\Lib\Qqconnect();
            $userInfo = $Qqconnect->getInfo($qq[&#39;openid&#39;],$qq[&#39;access_token&#39;]);
            print_r($userInfo);
            exit;
    }

The above is just a simple example, you can refer to it for modification and improvement. If there is anything you don’t understand, you can leave a message for discussion.

Recommended tutorial: "PHP Video Tutorial"

The above is the detailed content of QQ third-party authentication login extension class based on Thinkphp3.2. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:liqingbo. If there is any infringement, please contact admin@php.cn delete

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.