騰訊RTX的API開發,給RTX開個天窗
好多人可能沒聽說RTX這個軟件,在此我簡單說明一下,這個軟件是騰訊為企業開發的一個內部聊天軟件,服務端不是在騰訊那邊,而是需要企業自己安裝到自己公司內部的服務器上,以供企業內部員工交流使用,功能和QQ差不多,只是比QQ弱一點罷了.
嚴格說起來,其實RTX是有提供API接口的,只是不大太好,最近公司對此有需要,所以我就重寫了一下這個API.另外我重寫的主要原因是RTX自帶的API遇到中文會亂碼,而且還有很多雜七雜八的問題,上網搜結果發現關於RTX的API討論話題極少.估計是因為大家對這個軟件的關注程度不高的原因吧.
試想一下,其實網站交互的時候我們除了可以用網站發郵件或手機簡訊之外還可以發送即時消息到RTX上,讓公司內部的員工能夠及時瞭解到網站訪問者的需求,爲了達到這個目的,因此我重寫了我們公司內部的RTX的API,重寫之後的API能實現新增RTX用戶,修改用戶資料,刪除用戶,獲取所有的用戶列表,根據狀態獲取某些用戶,獲取公司內部的組織架構,發送即時通知給某些用戶,發送即時消息給某些用戶等等,下邊我就直接上代碼了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 | <?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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库