騰訊RTX的API開發,給RTX開個天窗

    好多人可能沒聽說RTX這個軟件,在此我簡單說明一下,這個軟件是騰訊為企業開發的一個內部聊天軟件,服務端不是在騰訊那邊,而是需要企業自己安裝到自己公司內部的服務器上,以供企業內部員工交流使用,功能和QQ差不多,只是比QQ弱一點罷了.

    嚴格說起來,其實RTX是有提供API接口的,只是不大太好,最近公司對此有需要,所以我就重寫了一下這個API.另外我重寫的主要原因是RTX自帶的API遇到中文會亂碼,而且還有很多雜七雜八的問題,上網搜結果發現關於RTX的API討論話題極少.估計是因為大家對這個軟件的關注程度不高的原因吧.

    試想一下,其實網站交互的時候我們除了可以用網站發郵件或手機簡訊之外還可以發送即時消息到RTX上,讓公司內部的員工能夠及時瞭解到網站訪問者的需求,爲了達到這個目的,因此我重寫了我們公司內部的RTX的API,重寫之後的API能實現新增RTX用戶,修改用戶資料,刪除用戶,獲取所有的用戶列表,根據狀態獲取某些用戶,獲取公司內部的組織架構,發送即時通知給某些用戶,發送即時消息給某些用戶等等,下邊我就直接上代碼了:

<?PHP
require('_class.php');

//驗證使用這個API的用戶身份是否合法?
$K='twboss_rtx';	//d6904e27b5c274b1d6acaadda88ec131
$key=Fun::toGet('key');
if($key!=md5($K)){
	exit('Error:'.__LINE__.', 您無權使用該API!');
}unset($key,$K);

$action=Fun::toGet('action');
switch(strtolower($action)){
case 'add':					//新增RTX用戶
	_Add();
	break;
case 'mdy':					//修改某人的RTX登入密碼
	_Mdy();
	break;
case 'del':					//刪除某人
	_Del();
	break;
case 'setdept':				//修改用戶所屬部門
	_Setdept();
	break;
case 'userlist':			//獲取RTX用戶列表
	_Userlist();
	break;
case 'deptlist':			//獲取組織架構列表
	_Deptlist();
	break;
case 'getstatus':			//獲取用戶在線狀態
	_Getstatus();
	break;
case 'getuserbystatus':		//提取某種類型的用戶列表
	_Getuserbystatus();
	break;
case 'sendtz':				//發通知給某人或某幾個人
	_Sendtz();
	break;
case 'sendim':				//發送消息給某人
	_Sendim();
	break;
default:
	break;
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
		user:必填,只能由英文和數字組成,長度不能小於3
		pass:必填,只能由英文,數字和底線組成,長度不能小於3
		title是用戶真實姓名,可以用中文
	用法:
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=add&user=7di&pass=123123&title='.iconv('UTF-8','big5','馮健'));
		echo '<pre>',var_dump($a),'</pre>';
/**/
function _Add(){
	$user=Fun::toGet('user');		//登入名
	$pass=Fun::toGet('pass');		//登入密碼
	$title=Fun::toGet('title');		//真實姓名

	if($user=='' or $pass==''){exit('Error:'.__LINE__.', 登入名或密碼不能為空!');}
	$title=($title=='') ? $user : $title;

	if(!Fun::Preg("^[a-zA-Z0-9]{3,16}$",'chk',$user)){exit('Error:'.__LINE__.', 登入名稱只能有英文和數字組成,並且長度範圍是3~16');}
	if(!Fun::Preg("^[a-zA-Z0-9._]{3,16}$",'chk',$pass)){exit('Error:'.__LINE__.', 登入密碼只能有英文,數字和底線組成,並且長度範圍是3~16');}

	try{
		$RootObj= new COM('RTXSAPIRootObj.RTXSAPIRootObj');
		$RootObj -> ServerIP= '127.0.0.1';
		$RootObj -> ServerPort= '8006';

		$UserManagerObj=$RootObj -> UserManager;

		if(($UserManagerObj -> IsUserExist($user))===FALSE){
			$UserManagerObj -> AddUser($user,0);   //添加用户
			$UserManagerObj -> SetUserPwd($user,$pass);
			$UserManagerObj -> SetUserBasicInfo($user,$title,0,'','','',0);

			echo '200 ok';
		}else{
			exit('Error:'.__LINE__.',用戶已存在!');
		}
	}catch(Exception $e){
		echo '<pre>',Var_Dump($e->getMessage()),'</pre>';
	}
	die();
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
		user:必填,只能由英文和數字組成,長度不能小於3
		pass:必填,只能由英文,數字和底線組成,長度不能小於3
		title:選填,用戶真實姓名,可以用中文
	用法:
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=mdy&user=7di&pass=123123&title='.iconv('UTF-8','big5','馮健'));
		echo '<pre>',var_dump($a),'</pre>';
/**/
function _Mdy(){

	$user=Fun::toGet('user');		//登入名
	$pass=Fun::toGet('pass');		//登入密碼
	$title=Fun::toGet('title');		//真實姓名

	if($user=='' or $pass==''){exit('Error:'.__LINE__.', 登入名或密碼不能為空!');}
	$title=($title=='') ? $user : $title;

	if(!Fun::Preg("^[a-zA-Z0-9]{3,16}$",'chk',$user)){exit('Error:'.__LINE__.', 登入名稱只能有英文和數字組成,並且長度範圍是3~16');}
	if(!Fun::Preg("^[a-zA-Z0-9._]{3,16}$",'chk',$pass)){exit('Error:'.__LINE__.', 登入密碼只能有英文,數字和底線組成,並且長度範圍是3~16');}

	try{
		$RootObj= new COM('RTXSAPIRootObj.RTXSAPIRootObj');
		$RootObj -> ServerIP= '127.0.0.1';
		$RootObj -> ServerPort= '8006';
		$UserManagerObj=  $RootObj -> UserManager;


		if(($UserManagerObj -> IsUserExist($user))===TRUE){
			$UserManagerObj -> SetUserPwd($user,$pass); //设置用户密码
			$UserManagerObj -> SetUserBasicInfo($user,$title,0,'','','',0);

			echo '200 ok';
		}else{
			exit('Error:'.__LINE__.',用戶不存在!');
		}
	}catch(Exception $e){
		echo '<pre>',Var_Dump($e->getMessage()),'</pre>';
		Die();
	}
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
		user:必填,只能由英文和數字組成,長度不能小於3
		pass:必填,只能由英文,數字和底線組成,長度不能小於3
		title:選填,用戶真實姓名,可以用中文
	用法:
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=del&user=xxx');
		echo '<pre>',var_dump($a),'</pre>';
/**/
function _Del(){

	$user=Fun::toGet('user');		//登入名
	$pass=Fun::toGet('pass');		//登入密碼
	$title=Fun::toGet('title');		//真實姓名

	if($user=='' or $pass==''){exit('Error:'.__LINE__.', 登入名或密碼不能為空!');}
	$title=($title=='') ? $user : $title;

	if(!Fun::Preg("^[a-zA-Z0-9]{3,16}$",'chk',$user)){exit('Error:'.__LINE__.', 登入名稱只能有英文和數字組成,並且長度範圍是3~16');}
	if(!Fun::Preg("^[a-zA-Z0-9._]{3,16}$",'chk',$pass)){exit('Error:'.__LINE__.', 登入密碼只能有英文,數字和底線組成,並且長度範圍是3~16');}

	try{
		$RootObj= new COM('RTXSAPIRootObj.RTXSAPIRootObj');
		$RootObj -> ServerIP= '127.0.0.1';
		$RootObj -> ServerPort= '8006';
		$UserManagerObj=  $RootObj -> UserManager;

		if(($UserManagerObj -> IsUserExist($user))===TRUE){
			$UserManagerObj -> DeleteUser($user);

			echo '200 ok';
		}else{
			exit('Error:'.__LINE__.',用戶不存在!');
		}
	}catch(Exception $e){
		echo '<pre>',Var_Dump($e->getMessage()),'</pre>';
		Die();
	}
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
		uid:必填,RTX號碼,不可以是登入名
		did:必填,所屬部門的id
	用法:
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=setdept&uid=9534&did=18');
		echo '<pre>',var_dump($a),'</pre>';
/**/
function _Setdept(){
	$uid=Fun::toGet('uid');		//RTX號碼
	$did=Fun::toGet('did');		//所屬部門的id

	if(!is_numeric($uid) or $uid<1){exit('Error:'.__LINE__.', 只能填寫被修改者的RTX號碼,不可以填寫登入名!');}
	if(!is_numeric($did) or $did<1){exit('Error:'.__LINE__.', 只能填寫所屬部門的ID值,不可以填寫部門名稱!');}

	$ACC=new Access('../db/rtxdb.mdb','','');
	$ACC->num_rows("update RTX_DeptUser set DeptID = {$did} where UserID={$uid}");
	echo '200 ok';
	die();
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
	用法:
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=userlist');
		echo '<pre>',var_dump(json_decode($a,TRUE)),'</pre>';
		die();
/**/
function _Userlist(){
	$ACC=new Access('../db/rtxdb.mdb','','');
	$a=$ACC->getlist("SELECT a.ID,a.UserName,a.Name,a.Gender,a.Mobile,a.Email,a.Phone,a.UserVersion,b.DeptID FROM `SYS_User` AS a,RTX_DeptUser AS b WHERE (a.AccountState=0 OR a.AccountState IS NULL) AND b.UserId=a.ID ORDER BY a.ID DESC");
	foreach($a as $k=>$v){
		if(!isset($a[$k]['Name']) or $a[$k]['Name']==''){continue;}

		$a[$k]['Name']=iconv('big5','UTF-8',$a[$k]['Name']);

	}unset($k,$v);
	header('Content-type: application/json; charset=UTF-8');
	echo json_encode($a);
	die();
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
	用法:
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=deptlist');
		echo '<pre>',var_dump(json_decode($a,TRUE)),'</pre>';
		die();
/**/
function _Deptlist(){
	$ACC=new Access('../db/rtxdb.mdb','','');
	$a=$ACC->getlist("SELECT DeptID,PDeptID,DeptName,SortID FROM `RTX_Dept` ORDER BY PDeptID ASC,SortID ASC");
	foreach($a as $k=>$v){
		if(!isset($a[$k]['DeptName']) or $a[$k]['DeptName']==''){continue;}

		$a[$k]['DeptName']=iconv('big5','UTF-8',$a[$k]['DeptName']);
	}unset($k,$v);

	header('Content-type: application/json; charset=UTF-8');
	echo json_encode($a);
	die();
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
		user:必填,某人的登入名
	用法:
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=getstatus&user=7di');
		echo $a;
		die();
/**/
function _Getstatus(){
	$user = Fun::toGet('user');

	$ObjApi= new COM('Rtxserver.rtxobj');
	$objProp= new COM('Rtxserver.collection');
	$ObjApi->Name = 'SysTools';
	$objProp->Add('Username',$user);

	$r = @$ObjApi->Call2(0x2001,$objProp);
	echo($r);
	unset($user,$r,$objProp,$ObjApi);
	die();
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
		status:必填,狀態值['offline','online','away']
	用法:
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=getuserbystatus&status=away');
		echo $a;
		die();
/**/
function _Getuserbystatus(){
	$status=Fun::toGet('status');
	$status=($status=='') ? 'online' : strtolower(trim($status));

	if(!in_array($status,array('offline','online','away'))){
		exit('Error:'.__LINE__.', status is not in offline online away!');
	}

	$RootObj= new COM("RTXSAPIRootObj.RTXSAPIRootObj");
	$RootObj -> ServerIP= '127.0.0.1';
	$RootObj -> ServerPort= '8006';

	$r = $RootObj->QueryUsersByState($status);
	echo ($r);
	unset($status,$r,$RootObj);
	die();
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
		to:必填,誰要接收(多個人名之間要用分號分隔)
		tit:必填,通知的標題
		msg:必填,通知的正文
		tim:必填,通知顯示多久
	用法:
		$msg=(iconv('UTF-8','big5','這是測息,正文!'));
		$tit=iconv('UTF-8','big5','這是標題!');
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=sendtz&tit='.$tit.'&msg='.$msg.'&to=7di;benhuang');
		echo $a;
		die();
/**/
function _Sendtz(){
	$to=Fun::toGet('to');		//誰要接收
	$tit=Fun::toGet('tit');		//通知的標題
	$msg=Fun::toGet('msg');		//通知的正文
	$tim=Fun::toGet('tim');		//通知顯示多久
	$tim = (strlen($tim) == 0 or !is_numeric($tim)) ? 100000 : $tim;

	if($to=='' or $msg=='' or $tit==''){
		exit('Error:'.__LINE__.', 通知標題,正文,接收者均不可為空!');
	}

	$RootObj= new COM("RTXSAPIRootObj.RTXSAPIRootObj");
	$RootObj -> ServerIP= '127.0.0.1';
	$RootObj -> ServerPort= '8006';
	$RootObj->SendNotify($to,$tit,$tim,$msg);    //txtReceivers.Text, txtTitle.Text, CInt(txtTime.Text), txtContent.Text
	unset($RootObj,$to,$tit,$msg,$tim);

	echo '200 ok';
	die();
}

/**
	交流:
		QQ群:223494678
	參數:
		key:必填,API密鈅
		action:必填,操作指令
		user:必填,發送者登入名
		pass:必填,發送者登入密碼
		to:必填,誰要接收(多個人名之間要用分號分隔)
		msg:必填,通知的正文
	用法:
		$msg=(iconv('UTF-8','big5','這是測息,正文!'));
		$a=file_get_contents('http://10.20.30.40:8012/_api.php?key=d6904e27b5c274b1d6acaadda88ec131&action=sendim&user=admin&pass=bossadm.com.tw&to=7di;benhuang&msg='.$msg);
		echo $a;
		die();
/**/
function _Sendim(){
	$user=Fun::toGet('user');
	$pass=Fun::toGet('pass');
	$to=Fun::toGet('to');
	$msg=Fun::toGet('msg');

	if($to=='' or $msg=='' or $user=='' or $pass==''){
		exit('Error:'.__LINE__.', 每個參數均不可為空!');
	}

	if(!Fun::Preg("^[a-zA-Z0-9]{3,16}$",'chk',$user)){exit('Error:'.__LINE__.', 登入名稱只能有英文和數字組成,並且長度範圍是3~16');}
	if(!Fun::Preg("^[a-zA-Z0-9._]{3,16}$",'chk',$pass)){exit('Error:'.__LINE__.', 登入密碼只能有英文,數字和底線組成,並且長度範圍是3~16');}

	$RootObj= new COM('RTXSAPIRootObj.RTXSAPIRootObj');
	$RootObj -> ServerIP= '127.0.0.1';
	$RootObj -> ServerPort= '8006';

	$sid=Fun::guid();
	$RootObj->SendIM($user,$pass,$to,$msg,$sid);

	echo '200 ok';
	unset($user,$pass,$to,$msg,$sid,$RootObj);
	die();
}

 

 對RTX有興趣的朋友可以加我的QQ群一起討論,QQ群號是223494678

posted @ 2014-07-29 17:15  PHP群:223494678  阅读(1300)  评论(1编辑  收藏