zoukankan      html  css  js  c++  java
  • 新浪,腾讯,淘宝,人人登陆

    [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; } } class qq_openlogin extends openlogin{ private $openname = "qq"; public $config = array( "appkey"=>"your appkey", "appsecret"=>"your appsecret", "redirect_uri"=>"http://test.gzyqj.com/openlogin.php?openname=qq", "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"=>"http://test.gzyqj.com/openlogin.php?openname=weibo", "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"=>"http://test.gzyqj.com/openlogin.php?openname=taobao", "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"=>"http://test.gzyqj.com/openlogin.php?openname=renren", "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; } } } ?> [/php]
  • 相关阅读:
    常用数据结构之哈希表
    常用数据结构之队列
    常用的数据结构之栈
    常用的数据结构之链表
    Zabbix3.4监控Windows机器CPU使用率
    在Pycharm中导入第三方模块库(诸如:matplotlib、numpy等)
    WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
    npm无法安装node-sass的解决方法
    常见的树形结构封装
    Mac安装MySql
  • 原文地址:https://www.cnblogs.com/doseoer/p/4007679.html
Copyright © 2011-2022 走看看