UCenter开发基础手册API接口.docx
《UCenter开发基础手册API接口.docx》由会员分享,可在线阅读,更多相关《UCenter开发基础手册API接口.docx(10页珍藏版)》请在冰豆网上搜索。
UCenter开发基础手册API接口
UCenter开发手册API接口(-09-0611:
50:
33)
Discuz!
文档UCenter开发手册
API接口
如下关于文献阐述以及代码样例,均以PHP程序为例。
UCenterAPI接口文献必要存储于应用程序根目录“api/”目录中,且文献名可以自定义,默以为uc.php,即“api/uc.php”。
文献构造可分为4某些,包括12个接口项目。
第1某些为常量定义、第2某些为告知方式判断以及初始化输入参数、第3某些为接口类代码段、第4某些为函数定义。
1、常量定义
define('UC_CLIENT_VERSION','1.5.0');//noteUCenter版本标记
define('UC_CLIENT_RELEASE','1031');
define('API_DELETEUSER',1);//note顾客删除API接口开关
define('API_RENAMEUSER',1);//note顾客改名API接口开关
define('API_GETTAG',1);//note获取标签API接口开关
define('API_SYNLOGIN',1);//note同步登录API接口开关
define('API_SYNLOGOUT',1);//note同步登出API接口开关
define('API_UPDATEPW',1);//note更改顾客密码开关
define('API_UPDATEBADWORDS',1);//note更新核心字列表开关
define('API_UPDATEHOSTS',1);//note更新域名解析缓存开关
define('API_UPDATEAPPS',1);//note更新应用列表开关
define('API_UPDATECLIENT',1);//note更新客户端缓存开关
define('API_UPDATECREDIT',1);//note更新顾客积分开关
define('API_GETCREDITSETTINGS',1);//note向UCenter提供积分设立开关
define('API_GETCREDIT',1);//note获取顾客某项积分开关
define('API_UPDATECREDITSETTINGS',1);//note更新应用积分设立开关
define('API_RETURN_SUCCEED','1');
define('API_RETURN_FAILED','-1');
define('API_RETURN_FORBIDDEN','-2');
常量定义某些定义了接口所用到14个接口项目开关设立,“1”为启动“0”为关闭。
如果启动,则代码段运营后返回API_RETURN_SUCCEED,否则返回API_RETURN_FORBIDDEN。
接口运营失败则返回API_RETURN_FAILED。
2、告知方式判断以及初始化输入参数
if(!
defined('IN_UC')){
error_reporting(0);
set_magic_quotes_runtime(0);
define('DISCUZ_ROOT',substr(dirname(__FILE__),0,-3));
defined('MAGIC_QUOTES_GPC')||define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc());
require_onceDISCUZ_ROOT.'./config.inc.php';
$_DCACHE=$get=$post=array();
$code=@$_GET['code'];
parse_str(_authcode($code,'DECODE',UC_KEY),$get);
if(MAGIC_QUOTES_GPC){
$get=_stripslashes($get);
}
$timestamp=time();
if($timestamp-$get['time']>3600){
exit('Authracationhasexpiried');
}if(empty($get)){
exit('InvalidRequest');
}
$action=$get['action'];
require_onceDISCUZ_ROOT.'./uc_client/lib/xml.class.php';
$post=xml_unserialize(file_get_contents('php:
//input'));
if(in_array($get['action'],array('test','deleteuser','renameuser','gettag','synlogin','synlogout','updatepw','updatebadwords','updatehosts','updateapps','updateclient','updatecredit','getcreditsettings','updatecreditsettings'))){
require_onceDISCUZ_ROOT.'./include/db_'.$database.'.class.php';
$GLOBALS['db']=newdbstuff;
$GLOBALS['db']->connect($dbhost,$dbuser,$dbpw,$dbname,$pconnect,true,$dbcharset);
$GLOBALS['tablepre']=$tablepre;
unset($dbhost,$dbuser,$dbpw,$dbname,$pconnect);
$uc_note=newuc_note();
exit($uc_note->$get['action']($get,$post));
}else{
exit(API_RETURN_FAILED);
}
}else{
define('DISCUZ_ROOT',$app['extra']['apppath']);
require_onceDISCUZ_ROOT.'./config.inc.php';
require_onceDISCUZ_ROOT.'./include/db_'.$database.'.class.php';
$GLOBALS['db']=newdbstuff;
$GLOBALS['db']->connect($dbhost,$dbuser,$dbpw,$dbname,$pconnect,true,$dbcharset);
$GLOBALS['tablepre']=$tablepre;
unset($dbhost,$dbuser,$dbpw,$dbname,$pconnect);
}
通过常量IN_UC来判断接口文献是通过远程HTTP方式访问还是直接包括方式调用
2、接口代码段
接口类名称为uc_note,接口名称作为此类一种办法,uc_note代码构造大体如下:
classuc_note{
var$dbconfig='';
//var$db='';
var$appdir='';
function_serialize($arr,$htmlon=0){
if(!
function_exists('xml_serialize')){
include_onceDISCUZ_ROOT.'./uc_client/lib/xml.class.php';
}
returnxml_serialize($arr,$htmlon);
}
functionuc_note(){
$this->appdir=substr(dirname(__FILE__),0,-3);
$this->dbconfig=$this->appdir.'./config.inc.php';
}
functiontest($get,$post){
returnAPI_RETURN_SUCCEED;
}
functiondeleteuser($get,$post){
returnAPI_RETURN_SUCCEED;
}
}
详细可以参照Discuz7.0.0代码中/api/uc.php
test
此接口供仅测试连接。
当UCenter发起test接口祈求时,如果成功获取到接口返回API_RETURN_SUCCEED值,表达UCenter和应用通讯正常。
deleteuser
当UCenter删除一种顾客时,会发起deleteuser接口祈求,告知所有应用程序删除相应顾客。
输入参数放在$get['ids']中,值为用逗号分隔顾客ID。
如果删除成功则输出API_RETURN_SUCCEED。
deleteuser接口示例(PHP)
renameuser
当UCenter更改一种顾客顾客名时,会发起renameuser接口祈求,告知所有应用程序改名。
输入参数$get['uid']表达顾客ID,$get['oldusername']表达旧顾客名,$get['newusername']表达新顾客名。
如果修改成功则输出API_RETURN_SUCCEED。
renameuser接口示例(PHP)
updatepw
当顾客更改顾客密码时,此接口负责接受UCenter发来新密码。
输入参数$get['username']表达顾客名,$get['password']表达新密码。
如果修改成功则输出API_RETURN_SUCCEED。
updatepw接口示例(PHP)
gettag
如果应用程序存在标签功能,可以通过此接口把应用程序标签数据传递给UCenter。
输入参数放在$get['id']中,值为标签名称。
输出数组需通过uc_serialize解决。
integer[0]标签名称
array[1]标签数据mixed['xxx']自定义
自定义各种数组项,索引名任意,一同返回给UCenter。
为了保证应用间数据共享,您需要在“应用管理管理”“标签单条显示模板”和“标签模板标记阐明”设立模板和阐明。
模板中“{xxx}”表达标签数据索引,代表相应数据。
如扩展数据模板中“{image}”将显示“['image']”数组项内容。
gettag接口示例(PHP)
synlogin
如果应用程序需要和其她应用程序进行同步登录,此某些代码负责标记指定顾客登录状态。
输入参数放在$get['uid']中,值为顾客ID。
此接口为告知接口,无输出内容。
同步登录需使用P3P原则。
synlogin接口示例(PHP)
synlogout
如果应用程序需要和其她应用程序进行同步退出登录,此某些代码负责撤销顾客登录状态。
此接口为告知接口,无输入参数和输出内容。
同步退出需使用P3P原则。
synlogout接口示例(PHP)
updatebadwords
当UCenter词语过滤设立变更时,此接口负责告知所有应用程序更新后词语过滤设立内容。
设立内容用POST方式提交到接口。
接口运营完毕输出API_RETURN_SUCCEED。
updatebadwords接口示例(PHP)
updatehosts
当UCenter域名解析设立变更时,此接口负责告知所有应用程序更新后域名解析设立内容。
设立内容用POST方式提交到接口。
接口运营完毕输出API_RETURN_SUCCEED。
updatehosts接口示例(PHP)
updateapps
当UCenter应用程序列表变更时,此接口负责告知所有应用程序更新后应用程序列表。
设立内容用POST方式提交到接口。
接口运营完毕输出API_RETURN_SUCCEED。
updateapps接口示例(PHP)
updateclient
当UCenter基本设立信息变更时,此接口负责告知所有应用程序更新后基本设立内容。
设立内容用POST方式提交到接口。
接口运营完毕输出API_RETURN_SUCCEED。
updateclient接口示例(PHP)
updatecredit
当某应用执行了积分兑换祈求接口函数uc_credit_exchange_request()后,此接口负责告知被兑换目应用程序所需修改顾客积分值。
输入参数$get['credit']表达积分编号,$get['amount']表达积分增减值,$get['uid']表达顾客ID。
updatecredit接口示例(PHP)
getcreditsettings
此接口负责把应用程序积分设立传递给UCenter,以供UCenter在积分兑换设立中使用。
此接口无输入参数。
输出数组需通过uc_serialize解决。
输出数组单条构造:
1维KEY2维KEY
array[n]积分编号string[0]积分名称
string[1]积分单位
如:
array(
'1'=>array('威望',''),
'2'=>array('金钱','枚'),
)
getcreditsettings接口示例(PHP)
updatecreditsettings
此接口负责接受UCenter积分兑换设立参数。
输入参数放在$get['credit']中,值为设立参数数组。
接口运营完毕输出API_RETURN_SUCCEED。
输入数组单条构造:
1维KEY2维KEY
array[appid]应用程序IDinteger['appiddesc']积分兑换目的应用程序ID
integer['creditdesc']积分兑换目的积分编号
integer['creditsrc']积分兑换源积分编号
string['title']积分名称
string['unit']积分单位
integer['ratio']积分兑换比率
如:
array(
'1'=>array(
'appiddesc'=>2,
'creditdesc'=>1,
'creditsrc'=>1,
'title'=>'金钱',
'unit'=>'枚',
'ratio'=>2,
),
)
updatecreditsettings接口示例(PHP)
getcredit
此接口用于把应用程序中指定顾客积分传递给UCenter。
输入参数$get['uid']为顾客ID,$get['credit']为积分编号。
接口运营完毕输出积分值。
getcredit接口示例(PHP)
4、函数定义
接口函数中必要包括如下函数,否则无法对的对UCenter传递过来数据进行解码。
functionauthcode($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('0d',$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)){
returnsubstr($result,26);
}else{
return'';
}
}else{
return$keyc.str_replace('=','',base64_encode($result));
}
}
functionuc_serialize($arr,$htmlon=0){
include_onceUC_CLIENT_ROOT.'./lib/xml.class.php';
returnxml_serialize($arr,$htmlon);
}
functionuc_unserialize($s){
include_onceUC_CLIENT_ROOT.'./lib/xml.class.php';
returnxml_unserialize($s);
}