<?php
/**
*
* 新浪登陆页面
*
* 需要在后台系统设置中设置 META 认证资料, APPKEY, APPSKEY 与高级信息中填入相应的回调地址(重要)
步骤是先去取得code在去取accss_token,
获得accsss_token就是授权成功返回的,
有了accsss_token就可以用来调用所有接口了
*
* 修改users表
* ALTER TABLE `eb_users` ADD `user_sina_uid` VARCHAR(12) NOT NULL DEFAULT '0' COMMENT '新浪登录唯一UID' ;
*
*/
define('IN_360SHOP', true);
$path = './';
include($path . 'extension.inc');
include($path . 'global.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_LOGIN);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
$code = request_var('code', '');
$mod = request_var('mod', '');
$do = request_var('do', '');
$id = request_var('id', '');
if( $config['wb_open'] != 1 )
{
tip_return('/','未开启微博帐号登录');
}
if( is_null($config['wb_akey']) || is_null($config['wb_skey']) )
{
tip_return('/','NO WEIBO CONFIG !');
}
$redirect_uri = $config['server_name'];
if (!strpos( $redirect_uri , 'http://') ) $redirect_uri = 'http://' . $redirect_uri ;
//获取code的回调url
$callback_url = $redirect_uri.'/sina_login.php';
//获取accss_token的回调url
$redirect_uri .= '/sina_login.php';
$redirect_uri .= $mod ? '?mod='.$mod : '';
$redirect_uri .= $do ? '&do='.$do : '';
$redirect_uri .= $id ? '&id='.$id : '';
$redirect_uri = urlencode($redirect_uri);
//获取code
$codeUrl = "https://api.weibo.com/oauth2/authorize";
$codeUrl .= "?client_id=". $config['wb_akey'];
$codeUrl .= "&response_type=code";
$codeUrl .= "&redirect_uri=" . $redirect_uri ;
if($code)
{
/**
* 组织微博URL
*/
$arrParams = array();
$arrParams['client_id'] = $config['wb_akey'];
$arrParams['client_secret'] = $config['wb_skey'];
$arrParams['grant_type'] = 'authorization_code';
$arrParams['redirect_uri'] = urlencode($callback_url);
$arrParams['code'] = $code;
/**
* 组织微博请求地址
*/
$accessTokenUrl = "https://api.weibo.com/oauth2/access_token?";
$accessTokenUrl .= "?client_id=".$config['wb_akey'];
$accessTokenUrl .= "&client_secret=".$config['wb_skey'];
$accessTokenUrl .= "&grant_type=authorization_code";
$accessTokenUrl .= "&redirect_uri=".urlencode($callback_url);
$accessTokenUrl .= "&code=".$code;
//构造参数
$ArgList = '';
foreach( $arrParams AS $key => $val )
{
$ArgList .= "$key=" . urlencode($val) . "&";
}
$ArgList = rtrim($ArgList, '&');
/**
* CURL获取授权码,获取accss_token
*/
try {
$headers = array();
$headers[] = "API-RemoteIP: " . $_SERVER['REMOTE_ADDR'];
$ci = curl_init();
curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($ci, CURLOPT_USERAGENT, 'Sae T OAuth2 v0.1');
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, '30');
curl_setopt($ci, CURLOPT_TIMEOUT, '30');
curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ci, CURLOPT_ENCODING, "");
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ci, CURLOPT_HEADER, FALSE);
curl_setopt($ci, CURLOPT_POST, TRUE);
curl_setopt($ci, CURLOPT_POSTFIELDS, $ArgList);
curl_setopt($ci, CURLOPT_URL, $accessTokenUrl );
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers );
curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE );
$Respond = curl_exec($ci);
curl_close ($ci);
}catch (Exception $e)
{
//echo $e->getMessage();
$Respond = '';
}
//返回accss_token,转为对象
$Respond = json_decode($Respond);
/**
* 异常处理
*/
if(empty($Respond)) tip_return('./', '微博授权异常,请联系系统管理人员');
if(isset($respond->error)) tip_return('./', '微博授权失败,重新授权');
/**
* 授权返回值
*/
$access_token = isset($Respond->access_token) ? $Respond->access_token : '' ;
$expires_in = isset($Respond->expires_in) ? $Respond->expires_in : 0 ;
$uid = isset($Respond->uid) ? $Respond->uid : 0 ;
$expire_time = time() + $expires_in;
/**
* 如果只是登录 在这里结束
*/
//if( !$mod || !$do || !$id )
//{
//判断微博是否绑定
if( $userdata['user_sina_uid'] != '')
{
tip_return('/','该帐号已经绑定了微博帐号');
}
//$res = sinaLogin($uid);
//
//if($res)
//{
// $msg = '登陆成功!';
//}
//else
//{
// $msg = '对不起,登陆失败,请重试!';
//}
//}
/**
* 接口获得微博信息数据
*/
/*
include(INCLUDES . 'sina' . DS . 'sina.class.php' );
$objSina = sina::_new_();
$objSina->gObjApi = sina::_api_new_('users/show');
$objSina->gObjApi->access_token($access_token);
$objSina->gObjApi->uid($uid);
$objSina->exec();
$Respond = $objSina->getObjData(); //返回数组数据
*/
if( isset($Respond->error) ) tip_return('./', $msg );
/**
* 组织微博会员信息
*/
$arrParams = array();
$arrParams['uid'] = $Respond->id;
$arrParams['screen_name'] = $Respond->screen_name;
//$arrParams['avatar_large'] = $Respond->avatar_large;
//$arrParams['location'] = $Respond->location;
//$arrParams['domain'] = $Respond->domain;
//$arrParams['followers_count'] = $Respond->followers_count;
//$arrParams['bi_followers_count'] = $Respond->bi_followers_count;
//$arrParams['access_token'] = $access_token;
//$arrParams['expires_time'] = $expire_time;
//$arrParams['add_time'] = time();
//修改注册User表信息
$Respond = sinaLogin($arrParams['uid'], $arrParams['screen_name'] );
if(!$Respond) tip_return('./', '微博会员信息设置失败', 'error');
//sinaUsersInfo($arrParams);
//
////获取双向关注好友
//$objSina->gObjApi = sina::_api_new_('friendships/friends/bilateral/ids');
//$objSina->gObjApi->access_token($access_token);
//$objSina->gObjApi->uid($uid);
//$objSina->exec();
//$Respond = $objSina->getObjData(); //返回数组数据
//
//if(isset($Respond->error)) return ;
//
///**
// * 随机获取微博好友
// */
//$idsTotalNum = $Respond->total_number;
//$idsPageNum = ceil($idsTotalNum/50)-1;
//$idsPageNum = $idsPageNum ? $idsPageNum : 1;
//$randPage = rand(1, $idsPageNum);
//
//$objSina->gObjApi->access_token($access_token);
//$objSina->gObjApi->uid($uid);
//$objSina->gObjApi->page($randPage);
//$objSina->exec();
//$Respond = $objSina->getObjData(); //返回数组数据
//
//if(isset($Respond->error)) return ;
//
////获取随机的四个uid
//if( count($Respond->ids) < 6)
//{
// $getNum = $Respond->total_number;
//}
//else
//{
// $getNum = 6;
//}
//
//$idsAryIndex = $idsAry = array();
//$idsAryIndex = @array_rand($Respond->ids, $getNum);
//$idsAryIndex = empty($idsAryIndex) ? array(0) : $idsAryIndex;
//
//if($getNum == 1)
//{
// $idsAryIndex = array();
// $idsAryIndex[] = '0';
//}
//
//foreach ( $idsAryIndex as $val)
//{
// $idsAry[] = $Respond->ids[$val];
//}
//
//$arrParam = array();
//$arrParam['uid'] = $uid;
//$arrParam['ids'] = $idsAry;
//
//sinaFriendship($arrParam);
$url = './';
if($mod)
{
$url .= '?mod='.$mod;
$url .= $do ? '&do='.$do : '';
$url .= $id ? '&id='.$id : '';
}
tip_return( $url, '登录成功,正在为您跳转...');
}
/**
* 随机获取6个双向关注好友
*/
//function sinaFriendship($arrParams)
//{
// global $db;
//
// if( empty($arrParams)) return ;
// if( !isset($arrParams['uid'])) return ;
// if( !isset($arrParams['ids'])) return ;
//
// $sql = " SELECT * FROM " . WEIBO_RELATION_TABLE ;
// $sql .= " WHERE uid = " . $arrParams['uid'];
// $result = $db->sql_query($sql);
// while ( $row = $db->sql_fetchrow( $result ) )
// {
// if( in_array($row['friend_id'], $row) ) unset($arrParams['ids']);
// }
//
// if(empty($arrParams['ids'])) return ;
//
// $dataParams = array();
//
// foreach ( $arrParams['ids'] as $val )
// {
// $dataParams[] = array(
// 'uid' => $arrParams['uid'],
// 'friend_id' => $val
// );
// }
//
// $sql = 'INSERT INTO ' . WEIBO_RELATION_TABLE . $db->sql_build_array('MULTI_INSERT', $dataParams);
//
// $db->sql_query($sql);
//
// return true;
//}
/**
* 记录微博登录信息
*
*/
//function sinaUsersInfo( $arrParams )
//{
// global $db;
//
// $sql = " SELECT uid FROM " . WEIBO_USERS_TABLE;
// $sql .= " WHERE uid = " . $arrParams['uid'] ;
// $sql .= " LIMIT 1 " ;
// $db->sql_query($sql);
// $uid = $db->sql_fetchfield('uid');
// if( $uid )
// {
// unset($arrParams['uid']);
// unset($arrParams['add_time']);
//
// $sql = 'UPDATE '. WEIBO_USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $arrParams).' WHERE uid = '.$uid ;
// }
// else
// {
// $sql = 'INSERT INTO ' . WEIBO_USERS_TABLE . $db->sql_build_array('INSERT', $arrParams);
// }
//
// $result = $db->sql_query($sql);
//
// if($result)
// {
// return true;
// }
// else
// {
// return false;
// }
//}
/**
* 微博帐号注册
*/
function sinaLogin($sina_id, $sina_name='新浪游客')
{
global $db, $user_ip;
if(!$sina_id) tip_return('./', '登录失败', 'error');
$sql = 'SELECT * FROM ' . USERS_TABLE . " WHERE user_sina_uid = '" . $sina_id . "'";
$query = $db->sql_query($sql);
if (!$row = $db->sql_fetchrow($query))
{
$arr_params = array(
'user_realname' => $sina_name,
'user_ip' => $user_ip,
'user_lastvisit' => time(),
'user_regdate' => time(),
'user_sina_uid' => $sina_id,
'role_type' => 'ucp',
'user_active' => 1,
);
$sql = 'INSERT INTO ' . USERS_TABLE . $db->sql_build_array('INSERT', $arr_params);
$result = $db->sql_query($sql);
if(!$result) tip_return('./', "登录错误", 'error');
$user_id = $db->sql_nextid();
/*注册成功*/
if($session_id = session_begin($user_id, $user_ip, PAGE_INDEX, FALSE, TRUE, 0))
{
call_hook_action('register_success' , array('user_id'=> $user_id));
}
else message_die(CRITICAL_ERROR, "Couldn't start session : register", "", __LINE__, __FILE__);
return true;
}
else
{
$arr_params = array('user_realname'=> $sina_name);
$sql = 'UPDATE '. USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $arr_params).' WHERE user_sina_uid = ' . $sina_id ;
$db->sql_query($sql);
session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, 0, 0);
return true;
}
return false;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>微博帐号登录中……</title>
<script language="javascript">
function geHash()
{
var StrPage = "<?php echo $codeUrl ?>";
window.location.assign(StrPage);
return ;
}
geHash();
</script>
</head>
<body>
</body>
</html>