-
新浪,,淘宝登岸
添加时间:2013-7-18 点击量:可以直接拿去用了
<?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;
}
}
}
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》