www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > api/uc.php

    <?php
define('UC_VERSION', '1.0.0');		//UCenter 版本标识
define('API_DELETEUSER', 1);		//用户删除 API 接口开关
define('API_RENAMEUSER', 1);		//用户改名 API 接口开关
define('API_UPDATEPW', 1);		//用户改密码 API 接口开关
define('API_GETTAG', 1);		//获取标签 API 接口开关
define('API_SYNLOGIN', 1);		//同步登录 API 接口开关
define('API_SYNLOGOUT', 1);		//同步登出 API 接口开关
define('API_UPDATEBADWORDS', 0);	//更新关键字列表 开关
define('API_UPDATEHOSTS', 0);		//更新域名解析缓存 开关
define('API_UPDATEAPPS', 0);		//更新应用列表 开关
define('API_UPDATECLIENT', 1);		//更新客户端缓存 开关
define('API_UPDATECREDIT', 1);		//更新用户积分 开关
define('API_GETCREDITSETTINGS', 1);	//向 UCenter 提供积分设置 开关
define('API_UPDATECREDITSETTINGS', 1);	//更新应用积分设置 开关
define('API_RETURN_SUCCEED', '1');
define('API_RETURN_FAILED', '-1');
define('API_RETURN_FORBIDDEN', '-2');
ob_start();
define('PHP_SELF',dirname($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']));
if(include(dirname(__FILE__).'/../config/config.php')){
	ob_end_clean();
	require(CORE_DIR.'/kernel.php');
	require(CORE_DIR.'/include/shopCore.php');
	require(CORE_DIR.'/lib/uc_client/lib/xml.class.php');

	class ucCore extends shopCore{

		function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {

			$ckey_length = 4;

			$key = md5($key ? $key : UC_KEY);
			$keya = md5(substr($key, 0, 16));
			$keyb = md5(substr($key, 16, 16));
			$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

			$cryptkey = $keya.md5($keya.$keyc);
			$key_length = strlen($cryptkey);

			$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
			$string_length = strlen($string);

			$result = '';
			$box = range(0, 255);

			$rndkey = array();
			for($i = 0; $i <= 255; $i++) {
				$rndkey[$i] = ord($cryptkey[$i % $key_length]);
			}

			for($j = $i = 0; $i < 256; $i++) {
				$j = ($j + $box[$i] + $rndkey[$i]) % 256;
				$tmp = $box[$i];
				$box[$i] = $box[$j];
				$box[$j] = $tmp;
			}

			for($a = $j = $i = 0; $i < $string_length; $i++) {
				$a = ($a + 1) % 256;
				$j = ($j + $box[$a]) % 256;
				$tmp = $box[$a];
				$box[$a] = $box[$j];
				$box[$j] = $tmp;
				$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
			}

			if($operation == 'DECODE') {
				if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
					return substr($result, 26);
				} else {
					return '';
				}
			} else {
				return $keyc.str_replace('=', '', base64_encode($result));
			}

		}

		function dsetcookie($var, $value, $life = 0, $prefix = 1) {
			global $cookiedomain, $cookiepath, $timestamp, $_SERVER;
			setcookie($var, $value,
				$life ? $timestamp + $life : 0, $cookiepath,
				$cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);
		}

		function dstripslashes($string) {
			if(is_array($string)) {
				foreach($string as $key => $val) {
					$string[$key] = $this->dstripslashes($val);
				}
			} else {
				$string = stripslashes($string);
			}
			return $string;
		}

		function uc_serialize($arr, $htmlon = 0) {
			return xml_serialize($arr, $htmlon);
		}

//    function uc_unserialize($s) {
//      include_once UC_CLIENT_ROOT.'./lib/xml.class.php';
//      return xml_unserialize($s);
//    }

		function run(){
			$this->definevar();
			$code = $_GET['code'];
			parse_str($this->authcode($code, 'DECODE', UC_KEY), $get);
			if(MAGIC_QUOTES_GPC) {
				$get = $this->dstripslashes($get);
			}
			if(time() - $get['time'] > 3600) {
				exit('Authracation has expiried');
			}
			if(empty($get)) {
				exit('Invalid Request');
			} 
			$action = $get['action'];
			$timestamp = time();
			$method = 'action_'.$action;
			if(method_exists($this,$method)){
				$this->$method($get);
			}else{
				exit(API_RETURN_FAILED);
			}
		}


		function action_test(){
			exit(API_RETURN_SUCCEED); 
		}

		function action_deleteuser($get=''){ 

			!API_DELETEUSER && exit(API_RETURN_FORBIDDEN);

			//用户删除 API 接口
			$account = $this->loadModel('member/account');
			$account->ucenterAccount('','','','delete',$get['ids']);
			exit(API_RETURN_SUCCEED);

		}

		function action_renameuser() {

			!API_RENAMEUSER && exit(API_RETURN_FORBIDDEN);

			//用户改名 API 接口
			$uid = $get['uid'];
			$usernamenew = $get['newusername'];

			$db->query("UPDATE {$tablepre}members SET username='$usernamenew' WHERE uid='$uid'");

			exit(API_RETURN_SUCCEED);

		}

		function action_updatepw($get='') {

			!API_UPDATEPW && exit(API_RETURN_FORBIDDEN);
			//更改用户密码
			exit(API_RETURN_SUCCEED);

		}

		function action_gettag() {

			!API_GETTAG && exit(API_RETURN_FORBIDDEN);

			//获取标签 API 接口
			$return = array($name, array());
			echo $this->uc_serialize($return, 1);

		}

		function action_synlogin($get='') {
			if(time() - $get['time']<=3600){
				!API_SYNLOGIN && exit(API_RETURN_FORBIDDEN); 
				$account = $this->loadModel('member/account');
				$o=$this->loadModel('utility/charset');
				if (strtoupper(UC_DBCHARSET)<>"UTF8")
					$get['username'] = $o->local2utf($get['username'],'zh');
				$account->ucenterAccount($get['uid'],$get['username'],$get['password'],'login');
				
			}else{
				exit(API_RETURN_FAILED);
			}

		}
		function action_synlogout() {
			!API_SYNLOGOUT && exit(API_RETURN_FORBIDDEN);
			$account = $this->loadModel('member/account');
			$account->ucenterAccount('','','','logout');
		}
		function action_updatebadwords() {

			!API_UPDATEBADWORDS && exit(API_RETURN_FORBIDDEN);

			//更新关键字列表
			exit(API_RETURN_SUCCEED);

		}

		function action_updatehosts() {

			!API_UPDATEHOSTS && exit(API_RETURN_FORBIDDEN);

			//更新HOST文件
			exit(API_RETURN_SUCCEED);

		}

		function action_updateapps() {

			!API_UPDATEAPPS && exit(API_RETURN_FORBIDDEN);

			//更新应用列表
			exit(API_RETURN_SUCCEED);

		}

		function action_updateclient() {
			!API_UPDATECLIENT && exit(API_RETURN_FORBIDDEN);
			$post = xml_unserialize(file_get_contents('php://input'));
			$cachefile = CORE_DIR . '/lib/uc_client/data/cache/settings.php';
			$fp = fopen($cachefile, 'w');
			$s = "<?php\r\n";
			$s .= '$_CACHE[\'settings\'] = '.var_export($post, TRUE).";\r\n";
			fwrite($fp, $s);
			fclose($fp);
			//更新客户端缓存
			exit(API_RETURN_SUCCEED);

		}

		function action_updatecredit() {

			!UPDATECREDIT && exit(API_RETURN_FORBIDDEN);

			//更新用户积分
			exit(API_RETURN_SUCCEED);

		}

		function action_getcreditsettings() {

			!GETCREDITSETTINGS && exit(API_RETURN_FORBIDDEN);

			//向 UCenter 提供积分设置
			echo $this->uc_serialize($credits);

		}

		function action_updatecreditsettings() {

			!API_UPDATECREDITSETTINGS && exit(API_RETURN_FORBIDDEN);

			//更新应用积分设置
			exit(API_RETURN_SUCCEED);

		}
		function definevar(){
			$passport = $this->loadModel('member/passport');
			$data = $passport->getOptions('ucenter');
			define('UC_CONNECT', 'mysql');
			define('UC_DBHOST', $data['ucserver']['value']);
			define('UC_DBUSER', $data['ucdbuser']['value']);
			define('UC_DBPW', $data['ucdbpass']['value']);
			define('UC_DBNAME', $data['ucdbname']['value']);
			define('UC_DBCHARSET', $data['ucdbcharset']['value']);
			define('UC_DBTABLEPRE', '`'.$data['ucdbname']['value'].'`.'.$data['ucprefix']['value']);
			define('UC_DBCONNECT', 0);
			define('UC_KEY', $data['uckey']['value']);
			define('UC_API', $data['ucapi']['value']);
			define('UC_CHARSET', $data['encoding']['value']);
			$tmp=parse_url($data['ucapi']['value']);
			if (preg_match('/([0-9]{1,3}\.){3}/',$tmp['host'])){
				define('UC_IP', $data['ucserver']['value']);
			}
			else{
				define('UC_IP', gethostbyname($data['ucserver']['value']));
			}
			define('UC_APPID', $data['ucserver']['value']);
			define('UC_PPP', $data['ucserver']['value']);
		}

	}
	$system = new ucCore(array());
	$system->run();
}else{
	header('HTTP/1.1 503 Service Unavailable',true,503);
	die('<h1>Service Unavailable</h1>');
}
?>