好多人可能沒聽說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開個天窗的更多相关文章

  1. 學習 DT device tree 以 ST 的開發板 STM32F429i-disc1 為例

    目標 因為對 device tree 不是很熟悉, 所以就將 device tree, 設為學習目標. 啟動 注意, 這篇隨筆的解說都放在最下面,會標 Explanation_XX,只要搜尋 Expl ...

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

    Delphi APP 開發入門(六)Object Pascal 語法初探 分享: Share on facebookShare on twitterShare on google_plusone_sh ...

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

    Delphi APP 開發入門(一)重生的 Delphi 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀 ...

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

    cloudera 的 QuickStart VM,為一種免安裝.免設定 Linux 及 Hadoop,已幫你建好 CDH 5.x.Hadoop.Eclipse 的一個虛擬機環境.下載後解壓縮,可直接以 ...

  5. RTX的api開發實例

    RTX的api開發實例 最近接觸了RTX的接口開發部份,RTX其实有很多玩法,除了可以用自帶的客戶端發消息之外還可以用PHP調用API的方式來做一些事情,下邊整理了一下分享給大家 值得提醒的是这些接口 ...

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

    Delphi APP 開發入門(七)通知與雲端推播 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次數: ...

  7. 各式 Web 前端開發工具整理

    程式碼編寫工具 (Coding Tools) 工作流程/建置/組合 (Workflow/Builds/Assemblers) lumbar brunch grunt lineman yeoman Ta ...

  8. Bear 實驗室: 什麼是Git flow ? 如何在SourceTree使用Git flow管理開發!

      http://www.takobear.tw/12/post/2014/02/bear-git-flow-sourcetreegit-flow.html     Bear 實驗室: 什麼是Git ...

  9. 【ZZ】快速學會開發Android App

    http://www.cc.ntu.edu.tw/chinese/epaper/0022/20120920_2209.html 作者:吳玉舒 / 臺灣大學計算機及資訊網路中心程式設計組幹事 智慧型手機 ...

随机推荐

  1. php包含(include/require)文件时的作用域

    当一个php脚本被require/include时,他的变量作用域根据其上下文环境决定. 1.如果是在一个函数中require/include一个文件,则此文件中的变量作用域是这个函数的范围.也就是说 ...

  2. Oracle primary,unique,foreign 区别,Hibernate 关联映射

    Oracle primary,unique,foreign 区别 转:http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html NOT N ...

  3. cloudera manager安装步骤小结

    1.准备三台虚拟机,系统是centos 7,IP分别是: 192.168.254.110 master 192.168.254.111 slave1 192.168.254.112 slave2 2. ...

  4. C# 正则表达式测试工具与分享窗体自适应类

    放假刚回来,自己打算写一个正则表达式的测试工具,因为上次在网上用的一个在线正则表示测试工具就 没有很好的服务自己的,所以才有了现在的想法,想写一个C#开发者用的正则表达式测试工具!期间由于最大化时控件 ...

  5. 5.3 Static

    相信很多人都遇到过App 莫名其妙就崩溃的情况,尤其是一些配置很低的手机,重现场景就是在App 切换到后台,闲置了一段时间后再继续使用时,就会崩溃.导致上述崩溃发生的罪魁祸首就是全局变量. 在内存不足 ...

  6. 《理解 ES6》阅读整理:块绑定(Block Binding)

    变量声明一直是JavaScript中一个需要技巧的部分.在大多数基于C的编程语言中,变量(更正式地说是绑定)在声明的时候创建,然而在JavaScript中并不是这样.在JavaScript中,变量在何 ...

  7. International Conference in 2014

    International Conference on Machine Learning (ICML2014, Beijing).(papers are available) Neural Infor ...

  8. 递归获取XML元素

    看到的一道题,用递归获取XML元素.... static void Main(string[] args) { string xmlContent = @"<FileSystem> ...

  9. Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮

    上次介绍了 Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 现在开始介绍如何配置审批流,首先在form上添加三个按钮,Submit, Agree, Reject: 1. ...

  10. 在 .NET 4.5 中反射机制的变更

    反射机制(Reflection)通常会涉及到3中场景: 运行时反射 场景:可以检索已加载程序集.类型.对象.实例和方法调用的元数据(Metadata). .NET 支持情况:支持 仅供静态分析的反射 ...