騰訊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

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

时间: 2024-10-26 04:04:14

騰訊RTX的API開發,給RTX開個天窗的相关文章

Delphi APP 開發入門(六)Object Pascal 語法初探

Delphi APP 開發入門(六)Object Pascal 語法初探 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:3442 發表時間:2014/06/10 tags: 行動開發 教學 App Delphi XE6 Android iOS Delphi APP 開發入門(五)GPS 定位功能 << 前情 經過前面五週幾乎每週可以寫出一個簡單App後,大家都可以感受到Delphi強大的開發威力!

Delphi APP 開發入門(一)重生的 Delphi

Delphi APP 開發入門(一)重生的 Delphi 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:10312 發表時間:2014/05/06 tags: 行動開發 教學 App Delphi XE6 簡介 Delphi算是開發工具界的老將,從1995年以VCL(Visual Component Library)可視元件架構搭配視覺化開發環境開始嶄露頭角.而在Windows98問世後,推出成熟穩

報表開發常識普及之java報表工具的採購成本

一般情況下,java報表開發工具在一個開發項目中占的比例大概是 10% 左右,最近又有上升的趨勢,在總體統計項目中報表的開發量大的能佔到20%.下面的計算還是以10%為標準,每人月的成本按2.5萬計算. 以一個100萬的軟體開發項目為例,java報表開發工具的工作量佔總工作量的10% ,即開發成本為 10萬元.以2.5萬/人 來計算,這個項目需要用4個人月 來完成報表開發工作.在實際的項目中,這 10 萬元有以下幾種方式分攤: 集成商的代碼積累+程序員按項目定製 即純手工編寫代碼.這裡又分兩種情

免安裝、免設定的 Hadoop 開發環境 - cloudera 的 QuickStart VM

cloudera 的 QuickStart VM,為一種免安裝.免設定 Linux 及 Hadoop,已幫你建好 CDH 5.x.Hadoop.Eclipse 的一個虛擬機環境.下載後解壓縮,可直接以 VirtualBox.VMWare.Docker.KVM 任一虛擬機,開啟 Hadoop 2.x 執行環境,並可用內建本地模式的 Eclipse 開發工具,開發.執行 Hadoop 程式碼. 下載點 :http://www.cloudera.com/downloads.html?productID

RTX的api開發實例

RTX的api開發實例 最近接觸了RTX的接口開發部份,RTX其实有很多玩法,除了可以用自帶的客戶端發消息之外還可以用PHP調用API的方式來做一些事情,下邊整理了一下分享給大家 值得提醒的是这些接口都需要设置访问权限不然访问时会提醒“IP受限制” RTX Server强加了SDK访问安性,因此通过http方式访问cgi文件需要在SDKProperty.xml添加远程访问机器的IP地址,如下图所示,允许192.168.10.100通过http方式访问cgi文件 以下为所有接口的清单,你也可以访问

Delphi APP 開發入門(七)通知與雲端推播

Delphi APP 開發入門(七)通知與雲端推播 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:5131 發表時間:2014/06/18 tags: 行動開發 教學 App Delphi XE6 Android iOS Delphi APP 開發入門(六)Object Pascal 語法初探 << 前情 今天教大家使用的是通知(Notification)功能,在Delphi XE6很貼心的也將通

實戰案例 - 微信開發重點摘要之用戶唯一識別碼與網頁存取授權碼 (2)

在取得用戶同意授權碼之後,就可以接著拿 openid 和 access token. openid 筆者稱之為用戶唯一識別碼,access code 則是網頁存取授權碼.從騰訊的公眾平台開發文件可以知道,openid 是跟著用戶走的,每個用戶都有自己的識別碼,這個識別碼也是開發者在寫程式的過程中,區分微信用戶的途徑:而 access code 則有類似鑰匙的作用,有了這個和 openid 就能獲取用戶資訊,要取得用戶識別碼和網頁存取授權碼,最關鍵的地方在這個網址: https://api.wei

各式 Web 前端開發工具整理

程式碼編寫工具 (Coding Tools) 工作流程/建置/組合 (Workflow/Builds/Assemblers) lumbar brunch grunt lineman yeoman Takeoff mimosa codeKit liveReload stealJS anvil.js modjs AUTOMATON Fire.app 瀏覽器套件管理員 (Browser Package Managers) (參見: Front-End Package Manager Compariso

JAVA報表finereport二次開發的JS使用說明

一.概述 隨著FineReport的發展,它提供的設計器和伺服器應該能夠滿足您絕大部分的需求,完全實現零編碼的軟體開發,革命性地加快軟體開發速度,提高軟體穩定性.但是需求是千變萬化的,而FineReport所包含的功能是報錶行業中比較普遍的典型的,也許某些個性化的功能通過FineReport軟體無法實現.為此,FineReport支持應用開發人員使用網頁腳本.API介面等對FineReport進行深入的開發與控制,以滿足其個性化的需求.當然,如果您發現您的某個需求必須要編程來實現,建議您先給我們