可以直接拿去用了

<?php
session_start();
class openlogin{
        
        public $_URL = "";
        
        public $config    =    array();

        public function __construct(){
            $this->openlogin();
        }
        function openlogin(){    

        }

        /*获取登陆页面URL*/
        public function login_url(){
            
            if(empty($this->config)){
                return false; 
            }
            
            $config = $this->config;
            $login_url    =    $config[\'login_url\'];
            $_SESSION[\'state\'] = $state = md5(uniqid(rand(), TRUE));
            $array = array(
                "response_type"=>"code",
                "state"    =>    $state,
                "client_id"=>$config[\'appkey\'],
                "redirect_uri"=>urlencode( $config[\'redirect_uri\'] )
            );

            $this->set($array);

            $url    =  $this->combineURL($login_url , $this->_param);

            if($url){
                @header("Location:".$url);
            }else{
                return false;
            }
        }

        /*获取access_token*/
        public function get_access_token(){
            if(empty($this->config)){
                return false; 
            }

            $config = $this->config;

            if(! $config[\'code\'] = $_REQUEST[\'code\'] ){
                return false;
            }

            $url    =    $config[\'authorization_url\'];
            $state    =    $_SESSION[\'state\'];
            $array = array(
                "grant_type"=>"authorization_code",
                "client_id"    =>    $config[\'appkey\'],
                "client_secret"=>$config[\'appsecret\'],
                "code"=>$config[\'code\'],
                "redirect_uri"=>urlencode( $config[\'redirect_uri\'] ),
                "state"=>$state
            );
            $this->set($array);
            return  $this->post_contents($url);
        }        
    
    
        
        /* set $this->_param 数组*/
        public function set($array) {
            if(empty($array)){
                return false;
            }
            $this->_param = array();
            foreach($array  as $name=>$value){
                $this->_param[$name] = $value;
            }
        }
        /**
         * post_contents
         * 服务器通过post请求获得内容
         * @param string $url       请求的url,拼接后的
         * @return string           请求返回的内容
         */
        public function post_contents($url){
            if(empty($url)){
                return false;
            }
            $param    = $this->combineURL("" , $this->_param);
            $ch = curl_init();
            // 设置URL和相应的选项
            curl_setopt($ch, CURLOPT_URL, $url);    
            curl_setopt($ch, CURLOPT_FAILONERROR, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);  
             curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $param);            
            // 抓取URL并把它传递给浏览器
            $reponse = curl_exec($ch);            
            curl_close($ch);
            return $reponse;
            
        }
        
        /**
         * get_contents
         * 服务器通过get请求获得内容
         * @param string $url       请求的url,拼接后的
         * @return string           请求返回的内容
         */
        public function get_contents($url){
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
                curl_setopt($ch, CURLOPT_URL, $url);
                $response =  curl_exec($ch);
                curl_close($ch);

            //-------请求为空
            if(empty($response)){
                return false;
            }

            return $response;
        }

        /**
             * combineURL
             * 拼接url
             * @param string $baseURL   基于的url
             * @param array  $keysArr   参数列表数组
             * @return string           返回拼接的url
             */
        public function combineURL($baseURL,$keysArr){
            if( $baseURL=="" ){
                $combined    =    "";
            }else{
                $combined = $baseURL."?";
            }
            $valueArr = array();

            foreach($keysArr as $key => $val){
                $valueArr[] = "$key=$val";
            }

            $keyStr = implode("&",$valueArr);
            $combined .= ($keyStr);
            
            return $combined;
        }
        
}


class qq_openlogin extends openlogin{
    private $openname    =    "qq";
    public $config = array(
                "appkey"=>"your appkey",
                "appsecret"=>"your appsecret",
                "redirect_uri"=>"XXXXX",
                "login_url" => "https://graph.qq.com/oauth2.0/authorize",    
                "scope"=>"get_user_info,add_share,list_album,add_album,upload_pic,add_topic,add_one_blog,add_weibo,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,get_tenpay_addr",
                "authorization_url"=>"https://graph.qq.com/oauth2.0/token"
            );

    function __construct()
    {
        $this->qq_openlogin();
    }
    
    function qq_openlogin(){
        parent::__construct();
    }


    function get_access_token(){
        $response    =    parent::get_access_token();
        
        /*检测错误是否发生*/
        if(strpos($response, "callback") !== false){

            $lpos = strpos($response, "(");
            $rpos = strrpos($response, ")");
            $response  = substr($response, $lpos + 1, $rpos - $lpos -1);
            $msg = json_decode($response);

            if(isset($msg->error)){
                return false;
            }
        }

        $params = array();
        parse_str($response, $params);
        /*access_token == $params[access_token]*/
        
        /*获取 openid */
        $response    =    $this->get_contents("https://graph.qq.com/oauth2.0/me?access_token=".$params[\'access_token\']);

        //--------检测错误是否发生
        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)){
            return false;
        }

        /*
            获取用户信息需要参数:openid(用户的ID,与QQ号码一一对应),access_token(可通过使用Authorization_Code获取Access_Token 或来获取access_token有3个月有效期),oauth_consumer_key(用户appid),format(返回格式) 
                
        */
        /*数据库保存*/
        $open_param    =    array(
            "openid"=>$user->openid,
            "access_token"=>$params[\'access_token\']
        );
        //
        $open_param[\'oauth_consumer_key\']    =    $this->config[\'appkey\'];
        $open_param[\'format\']                =    "json";
        /*拼接url*/
        $get_user_url = $this->combineURL("https://graph.qq.com/user/get_user_info",$open_param);
        //猎取用户信息
        $userinfo    =    $this->get_contents($get_user_url);        

        $userinfo    =    json_decode($userinfo);

        return $userinfo;        
    }
}

class weibo_openlogin extends openlogin{
    private $openname    =    "weibo";
    public $config = array(
                "appkey"=>"your appkey",
                "appsecret"=>"your appsecret",
                "login_url"    =>    "https://api.weibo.com/oauth2/authorize",
                "redirect_uri"=>"XXXXXXX",
                "authorization_url"=>"https://api.weibo.com/oauth2/access_token"
            );

    function __construct()
    {
        $this->qq_openlogin();
    }
    
    function qq_openlogin(){
        parent::__construct();
    }

    function get_access_token(){
        $response    =    parent::get_access_token();

        $userinfo = json_decode($response);

        return $userinfo;
    }

}

class taobao_openlogin extends openlogin{
    private $openname    =    "taobao";
    public $config = array(
                "appkey"=>"your appkey",
                "appsecret"=>"your appsecret",
                "redirect_uri"=>"XXXXX",
                "authorization_url"=>"https://oauth.taobao.com/token",
                "login_url"=>"https://oauth.taobao.com/authorize"
            );

    function __construct()
    {
        $this->qq_openlogin();
    }
    
    function qq_openlogin(){
        parent::__construct();
    }

    function get_access_token(){
        $response    =    parent::get_access_token();

        $userinfo = json_decode($response);

        return $userinfo;
    }

}




if($_GET[\'openname\']){
    $openname    =    $_GET[\'openname\']."_openlogin";
    $openlogin    = new $openname();
    if(!isset($_REQUEST[\'code\'])){        
        //请求url
        $url = $openlogin->login_url();
        if(!$url){
            echo "0";
            exit();
        }
    }else{
        if(isset($_REQUEST["state"]) && ($_SESSION[\'state\']    !=    $_REQUEST["state"] )){
            echo "1";
            exit();
        }    
    
        $rs = $openlogin->get_access_token();
        
        print_r( $rs );

    }

}



?>

 添加一个人人登陆

class renren_openlogin extends openlogin{
    private $openname    =    "renren";
    public $config = array(
                "appid"=>"your appid",
                "appkey"=>"your appkey",
                "appsecret"=>"your secret key",
                "redirect_uri"=>"XXXXXX",
                "authorization_url"=>"https://graph.renren.com/oauth/token",
                "login_url"=>"https://graph.renren.com/oauth/authorize"
            );

    function __construct()
    {
        $this->qq_openlogin();
    }
    
    function qq_openlogin(){
        parent::__construct();
    }

    function get_access_token(){
        $response    =    parent::get_access_token();

        $userinfo = json_decode($response);

        return $userinfo;
        /*
                access_token:获取的Access Token;
                expires_in:Access Token的有效期,以秒为单位;
                refresh_token:用于刷新Access Token 的 Refresh Token,长期有效,不会过期;
                scope:Access Token最终的访问范围,既用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限)。关于权限的具体信息请参考
        */
    }

    /*获取登陆页面URL*/
    public function login_url(){
        
        if(empty($this->config)){
            return false; 
        }
        
        $config = $this->config;
        $login_url    =    $config[\'login_url\'];
        $array = array(
            "response_type"=>"code",
            "client_id"=>$config[\'appid\'],
            "redirect_uri"=>urlencode( $config[\'redirect_uri\'] )
        );

        $this->set($array);

        $url    =  $this->combineURL($login_url , $this->_param);

        if($url){
            @header("Location:".$url);
        }else{
            return false;
        }
    }

}

 

版权声明:本文为Tourmaline原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Tourmaline/p/3196379.html