php实现新浪、腾讯、淘宝登陆的代码

发布时间:2019-10-16编辑:脚本学堂
本文介绍下,php实现新浪、腾讯、淘宝登录的代码,有需要的朋友参考下吧。

php实现新浪、腾讯与淘宝登录的例子。

代码:
 

复制代码 代码示例:

<?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;
        }
       
}

//php实现QQ登录
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;       
    }
}

//php实现微博登录
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;
    }
}

//php实现淘宝登录
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 );
    }
}
?>

附,人人网登陆代码。
 

复制代码 代码示例:

<?php
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;
        }
    }
}