新浪,腾讯,淘宝登陆
可以直接拿去用了
<?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 版权协议,转载请附上原文出处链接和本声明。