TimRestInterface.class.php 33.4 KB
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 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673
<?php

namespace Com\IM;

abstract class TimRestInterface
{

    /**
     * 初始化函数
     * @param int    $sdkappid 应用的appid
     * @param string $identifier 访问接口的用户
     * @param string $userSig 用户签名
     * @return bool|void
     */
    abstract function init($sdkappid, $identifier, $userSig = '');

    /**
     * 独立模式根据Identifier生成UserSig的方法
     * @param int    $identifier 用户账号
     * @param int    $expiry_after 过期时间
     * @param string $protected_key_path 私钥的存储路径及文件名
     * @return string $out 返回的签名字符串
     */
    abstract public function generate_user_sig($identifier, $expiry_after, $protected_key_path, $tool_path);

    /**
     * 托管模式设置用户凭证
     * @param string $protected_key_path 私钥的存储路径及文件名
     * @return bool 返回成功与否
     */
    abstract public function set_user_sig($usr_sig);

    ################################ 单发消息 ###################################

    /**
     * 发文本消息
     * @param string $account_id 发送者id
     * @param string $receiver 接收方的用户账号
     * @param string $text_content 消息内容(这里为文本消息)
     * @return array 通过解析REST接口json返回包得到的关联数组, 其中包含成功与否、及错误提示(如果有错误)等字段
     */
    abstract function openim_send_msg($account_id, $receiver, $text_content);

    /**
     * 发图片消息(图片不大于10M)
     * @param string $account_id 发送者id
     * @param string $receiver 接收方的用户账号
     * @param string $pic_path 要发送的图片本地路径
     * @return array 通过解析REST接口json返回包得到的关联数组, 其中包含成功与否、及错误提示(如果有错误)等字段
     */
    abstract function openim_send_msg_pic($account_id, $receiver, $pic_path);

    /**
     * 单发消息(高级接口)
     * @param string $account_id 发送者id
     * @param string $receiver 接收方的用户账号
     * @param array  $msg_content 消息内容, php构造示例:
     *     $msg_content = array();
     *     //创建array 所需元素
     *     $msg_content_elem = array(
     *         'MsgType' => 'TIMTextElem',       //文本类型
     *         'MsgContent' => array(
     *         'Text' => "hello",                //hello 为文本信息
     *        )
     *     );
     *     //将创建的元素$msg_content_elem, 加入array $msg_content
     *     array_push($msg_content, $msg_content_elem);
     * @return array 通过解析REST接口json返回包得到的关联数组, 其中包含成功与否、及错误提示(如果有错误)等字段
     */
    abstract function openim_send_msg2($account_id, $receiver, $msg_content);

    /**
     * 批量发文本消息
     * @param array  $account_list 接收消息的用户id集合
     * @param string $text_content 消息内容(这里为文本消息)
     * @return array 通过解析REST接口json返回包得到的关联数组, 其中包含成功与否、及错误提示(如果有错误)等字段
     */
    abstract function openim_batch_sendmsg($account_list, $text_content);

    /**
     * 批量发图片
     * @param array  $account_list 接收消息的用户id集合
     * @param string $pic_path 要发送图片的本地路径
     * @return array 通过解析REST接口json返回包得到的关联数组, 其中包含成功与否、及错误提示(如果有错误)等字段
     */
    abstract function openim_batch_sendmsg_pic($account_list, $pic_path);

    /**
     * 批量发消息(高级接口)
     * @param array $account_list 接收消息的用户id集合
     * @param array $msg_content 消息内容, php构造示例:
     *   $msg_content = array();
     *   //创建array 所需元素
     *   $msg_content_elem = array(
     *       'MsgType' => 'TIMTextElem',       //文本??型
     *       'MsgContent' => array(
     *       'Text' => "hello",                //hello 为文本信息
     *      )
     *   );
     *   //将创建的元素$msg_content_elem, 加入array $msg_content
     *   array_push($msg_content, $msg_content_elem);
     * @return array 通过解析REST接口json返回包得到的关联数组, 其中包含成功与否、及错误提示(如果有错误)等字段
     */
    abstract function openim_batch_sendmsg2($account_list, $msg_content);

    ################################ 帐号管理 ###################################

    /**
     * 独立模式帐号同步接口
     * @param string $identifier 用户名
     * @param string $nick 用户昵称
     * @param string $face_url 用户头像URL
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function account_import($identifier, $nick, $face_url);

    /**
     * 独立模式帐号同步接口
     * @param string $Identifier 为用户申请同步的帐号,长度为4-24个字符
     * @param string $IdentifierType Identifier的类型,1:手机号(国家码-手机号) 2:邮箱 3:字符串帐号
     * @param string $Password Identifier的密码,长度为8-16个字符
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract public function register_account($identifier, $identifierType, $password);

    ################################ 资料管理 ###################################

    /**
     * 获取用户资料
     * @param string $account_id 获取哪个用户的资料
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、拉取到的用户信息(如果成功),及错误提示等字段
     */
    abstract function profile_portrait_get($account_id);

    /**
     * 获取用户资料(高级接口)
     * @param array $account_list 需要获取资料的帐号id集合, php构造示例:
     *     $account_list = array();
     *     array_push($account_list, $account_id);  //$account_id为用户id,需要用户传递
     * @param array $tag_list 需要拉取的字段,目前可拉取的字段:
     *            1.昵称:"Tag_Profile_IM_Nick
     *            2.加好友设置"Tag_Profile_IM_AllowType", php构造示例:
     *     $tag_list = array(
     *         "Tag_Profile_IM_Nick",                  //昵称
     *     );
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、拉取到的用户信息(如果成功),及错误提示等字段
     */
    abstract function profile_portrait_get2($account_list, $tag_list);

    /**
     * 设置用户名称
     * @param string $account_id 需要设置的用户
     * @param string $new_name 要设置为的用户名
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function profile_portrait_set($account_id, $new_name);

    /**
     * 设置用户资料(高级接口)
     * @param string $account_id 需要设置的用户
     * @param array  $profile_list 设置选项集合,用户账号设置内容选项, 比如昵称, php构造示例:
     *   //创建array $profile_list
     *     $profile_list = array();
     *     //创建昵称选项
     *     $profile_nick = array(
     *         "Tag" => "Tag_Profile_IM_Nick",             //用户昵称
     *         "Value" => "new_name"                        //"new_name"要设置成的用户名
     *         );
     *    //加好友验证方式
     *    $profile_allow = array(
     *        "Tag" => "Tag_Profile_IM_AllowType",
     *        "Value" => "AllowType_Type_NeedConfirm"
     *    );
     *    array_push($profile_list, $profile_nick);
     *    array_push($profile_list, $profile_allow);
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */

    abstract function profile_portrait_set2($account_id, $profile_list);


    ################################ 关系链管理 ###################################
    ## 关系链托管方式请详见:关系链系统概述 (http://avc.qcloud.com/wiki2.0/im/) 即时通信云-概述-关系链系统 ##
    /**
     * 建立双方好友关系
     * @param string $account_id 发起者id
     * @param string $receiver 添加的用户,完成之后两者互为好友
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function sns_friend_import($accout_id, $receiver);

    /**
     * 解除双方好友关系
     * @param string $account_id 用户id,即需要删除好友的用户
     * @param string $frd_id 需要删除的好友
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function sns_friend_delete($account_id, $frd_id);

    /**
     * 解除所有好友关系
     * @param string $account_id 用户id,即需要解除所有好友关系的用户
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function sns_friend_delete_all($account_id);

    /**
     * 校验好友关系(默认双向严重)
     * @param string $account_id 需要校验好友的用户id
     * @param string $to_account 校验是否为好友的id
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示、验证结果等字段
     */
    abstract function sns_friend_check($account_id, $to_account);

    /**
     * 校验好友关系
     * @param string $account_id 需要校验好友的用户id
     * @param array  $to_account_list 校验是否为好友的id集合
     * @param string $check_type 校验类型,目前支持:单向校验"CheckResult_Type_Singal",双向校验"CheckResult_Type_Both"
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示、验证结果等字段
     */
    abstract function sns_friend_check2($account_id, $to_account_list, $check_type);

    /**
     * 拉取好友
     * @param string $account_id 需要获取好友的用户id
     * @return array 通过解析REST接口json返回包得到的关联数组,包含拉取到的好友信息、成功与否及错误提示等字段
     */
    abstract function sns_friend_get_all($account_id);

    /**
     * 拉取好友(高级接口)
     * @param string $account_id 需要获取好友的用户id
     * @param array  $tag_list 需要拉取的字段,该拉取协议是一条整合数据的协议,可以指定拉取自己好友的昵称
     *        加好友设置以及对用户的备注等字段,如果需要拉取昵称字段,则这里就需要在Json数组中填入Tag_Profile_IM_Nick.
     *          php构造示例:
     *     $tag_list = array(
     *         "Tag_Profile_IM_Nick",      //昵称选项
     *         "Tag_SNS_IM_Remark"         //备注选项
     *     );
     * @return array 通过解析REST接口json返回包得到的关联数组,包含拉取到的好友信息、成功与否及错误提示等字段
     */
    abstract function sns_friend_get_all2($account_id, $tag_list);

    /**
     * 拉取指定好友的信息
     * @param string $account_id 需要拉取好友的帐号
     * @param string $frd_id 需要被拉取的好友
     * @return array 通过解析REST接口json返回包得到的关联数组,包含拉取到的好友信息、成功与否及错误提示等字段
     */
    abstract function sns_friend_get_list($account_id, $frd_id);

    /**
     * 拉取特定好友(高级接口)
     * @param string $account_id 需要拉取好友的帐号
     * @param array  $frd_list 拉取好友对象, php构造示例:
     *     $frd_list = array();
     *     array_push($frd_list, "leckie");  //"leckie" 为需要被拉取的好友id
     * @param array  $tag_list 需要拉取属性的选项字段, 该拉取协议是一条整合数据的协议,可以指定拉取自己好友的昵称
     *          、加好友设置以及对用户的备注等字段,如果需要拉取昵称字段,则这里就需要在Json数组中填入Tag_Profile_IM_Nick
     *    $tag_list = array(
     *         "Tag_Profile_IM_Nick",   //昵称选项
     *         "Tag_SNS_IM_Remark"      //备注选项
     *     );
     * @return array 通过解析REST接口json返回包得到的关联数组,包含拉取到的好友信息、成功与否及错误提示等字段
     */
    abstract function sns_friend_get_list2($account_id, $frd_list, $tag_list);

    ################################ 群组管理 ###################################

    /**
     * 获取app中所有群组, 如果APP中的总群数量超过10000个,最多只会返回10000个(如果需要获取完整必须使用高级接口)
     * @return array 通过解析REST接口json返回包得到的关联数组,包含拉取到的群组信息、成功与否及错误提示等字段
     */
    abstract function group_get_appid_group_list();

    /**
     * 获取app中所有群组(高级接口)
     * @param int    $limit 最多获取多少个群,不得超过10000, 如果不填,获取能获取的最大数量的群.
     * @param int    $offset 控制从整个群组列表中的第多少个开始读取(从0开始). 对于分页请求(页码数字从1开始),每
     *          一页的Offset值应当为:(页码数-1)×每页展示的群组数量, 如果不填从0开始.
     * @param string $group_type 如果仅需要返回特定群组形态的群组,可以通过GroupType进行过滤,但此时返回的TotalCount
     *          的含义就变成了APP中该群组形态的群组总数. 例如:假设APP旗下总共50000个群组,其中有20000个为公开群组,如
     *          果将请求包体中的GroupType设置为Public,那么不论limit和offset怎样设置,应答包体中的TotalCount都为20000,
     *          且GroupIdList中的群组全部为公开群组.
     * @return array 通过解析REST接口json返回包得到的关联数组,包含拉取到的群组信息、成功与否及错误提示等字段
     */
    abstract function group_get_appid_group_list2($limit, $offset, $group_type);

    /**
     * 创建群
     * @param string $group_type 群类型, 包括Public(公开群), Private(私密群), ChatRoom(聊天室)
     * @param string $group_name 群名称
     * @param string $owner_id 群主id, 自动添加到群成员中.如果不填,则群没有群主
     * @return array 通过解析REST接口json返回包得到的关联数组,包含新建的群号、成功与否、错误提示等字段
     */
    abstract function group_create_group($group_type, $group_name, $owner_id);

    /**
     * 创建群(高级接口)
     * @param string $group_type 群类型(包括Public(公开群), Private(私密群), ChatRoom(聊天室))
     * @param string $group_name 群名称
     * @param string $owner_id 群主id, 自动添加到群成员中.如果不填,群没有群主
     * @param array  $info_set 存储群组基本信息的字典,内容包括用introduction 群简介, group_id 自定义群组显示出来的id,
     *          notification 群公告, face_url 群头像url地址, max_member_num 最大群成员数量, apply_join 申请加群处理方式
     *        (比如FreeAccess 自由加入). php构造示例:
     *    $info_set = array(
     *        'introduction' => "群简介"(string),
     *        'group_id' => "自定义群组id"(string),
     *        'notificatoin' => "群公告"(string),
     *        'face_url' => "群头像url地址"(string),
     *        'max_member_num' => 最大群成员数量(int),
     *        'apply_join' => "申请加群的处理方式"(string)
     *        );
     * @param array  $mem_list 初始群成员列表,最多500个,每个群成员由Member_Account(用户id), Role(角色, 比如管理员Admin,
     *        普通成员Member)组成. php构造示例:
     *     $mem_list = array();
     *     $mem_account = array()(
     *         "Member_Account" => "bob",   // 成员id
     *         "Role" => "Admin"   // 赋予该成员的身份,目前备选项只有Admin
     *     );
     *     array_push($account_list, $mem_account);  //$mem_account为用户id,需要用户传递
     * @return array 通过解析REST接口json返回包得到的关联数组,包含新建的群号、成功与否、错误提示等字段
     */
    abstract function group_create_group2($group_type, $group_name, $owner_id, $info_set, $mem_list);

    /**
     * 转让群组
     * @param string $group_id 需要转让的群组id
     * @param string $new_owner 需要设置的新群主id
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_change_group_owner($group_id, $new_owner);

    /**
     * 获取群组详细信息
     * @param string $group_id 需要获取信息的群组id
     * @return array 通过解析REST接口json返回包得到的关联数组,包含拉取到的群组信息(如果成功)、成功与否、错误提示等字段
     */
    abstract function group_get_group_info($group_id);

    /**
     * 获取群组详细信息(高级接口)
     * @param array $group_list 群组集合. php构造示例:
     *   $group_list = array();
     *   array_push($group_list, "group_id"); //group_id 为群组号码
     * @param array $base_info_filter 基础信息字段过滤器. php构造示例:
     *     $base_info_filter = array(
     *         "Type",               //群类型(包括Public(公开群), Private(私密群), ChatRoom(聊天室))
     *         "Name",               //群名称
     *         "Introduction",       //群简介
     *         "Notification",       //群公告
     *         "FaceUrl",            //群头像url地址
     *         "CreateTime",         //群组创建时间
     *         "Owner_Account",      //群主id
     *         "LastInfoTime",       //最后一次系统通知时间
     *         "LastMsgTime",        //最后一次消息发送时间
     *         "MemberNum",          //群组当前成员数目
     *         "MaxMemberNum",       //群组内最大成员数目
     *         "ApplyJoinOption"     //申请加群处理方式(比如FreeAccess 自由加入)
     *         );
     * @param array $member_info_filter 成员信息字段过滤器, php构造示例:
     *        $member_info_filter = array(
     *            "Account",           // 成员ID
     *            "Role",               // 成员身份
     *            "JoinTime",        // 成员加入时间
     *            "LastSendMsgTime", // 该成员最后一次发送消息时间
     *            "ShutUpUntil"      // 该成员被禁言直到某时间
     *            );
     * @param array $app_define_filter 群组维度的自定义字段过滤器, php构造示例:
     *        $app_define_filter = array(
     *            "GroupTestData1",  //自定义数据
     *            );
     * @return array 通过解析REST接口json返回包得到的关联数组,包含拉取到的群组信息(如果成功)、成功与否、错误提示等字段
     */
    abstract function group_get_group_info2($group_list, $base_info_filter, $member_info_filter, $app_define_filter);

    /**
     * 获取群组成员详细信息
     * @param string $group_id 群组id
     * @param int    $limit 最多获取多少个成员, 如果不填, 获取全部成员
     * @param int    $offset 从第几个成员开始获取, 如果不填, 从第一个成员开始获取
     * @return array 通过解析REST接口json返回包得到的关联数组,包含拉取到的群组成员详细信息(如果成功)、成功与否、错误提示等字段
     */
    abstract function group_get_group_member_info($group_id, $limit, $offset);

    /**
     * 修改群组名字
     * @param string $group_id 群组id
     * @param string $group_name 将其作为群组名字
     * @return string 返回成功与否,及错误提示(如果有错误)
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_modify_group_base_info($group_id, $group_name);

    /**
     * 修改群组信息(高级接口)
     * @param string $group_id 群组id
     * @param string $group_name 群组名字
     * @param array  $info_set 需要修改的群组基本信息的字典集合, 包括群简介,群公告, 群头像url地址,群成员最大数量,
     *        申请加群方式. php构造示例:
     *    $info_set = array(
     *        'introduction' => "群简介"(string),
     *        'notification' => "群公告"(string),
     *        'face_url' => "群头像url地址(string)",
     *        'max_member_num' => "群成员最大数量"(string),
     *        'apply_join' => "申请加入方式"(string)
     *        );
     * @param array  $app_define_list 自定义字段. php构造示例:
     *     $app_define_list = array();
     *     //定义自定义字段字典数组
     *     $app_define_one = array()(
     *         "Key": "GroupTestData1",  // 需要修改的自定义字段key
     *         "Value": "NewData"  // 自定义字段的新值
     *         );
     *    array_push($app_define_list, $app_define_one);
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_modify_group_base_info2($group_id, $group_name, $info_set, $app_define_list);

    /**
     * 增加群组成员
     * @param string $group_id 要操作的群组id
     * @param string $member_id 要加入的用户id
     * @param int    $silence 是否静默加入, 0为否, 1为是
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_add_group_member($group_id, $member_id, $silence);


    /**
     * 删除群组成员
     * @param string $group_id 要操作的群组id
     * @param string $member_id 要删除的成员id
     * @param int silence 是否静默删除, 0为否,1为是
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_delete_group_member($group_id, $member_id, $silence);


    /**
     * 修改群成员身份
     * @param string $group_id 要操作的群组id
     * @param string $account_id 要操作的用户id
     * @param string $role 用户身份(Admin/Member)
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_modify_group_member_info($group_id, $account_id, $role);

    /**
     * 修改群成员资料(高级接口)
     * @param string $group_id 要操作的群组id
     * @param string $account_id 用户id
     * @param string $role Admin或者Member, 分别为设置/取消管理员, 为null则不改变成员身份
     * @param string $msg_flag 消息屏蔽类型,比如AcceptAndNotify(接收并提示), 为null则不改变屏蔽类型
     * @param int    $shutup_time 禁言时间
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_modify_group_member_info2($group_id, $account_id, $role, $msg_flag, $shutup_time);

    /**
     * 解散群
     * @param string $group_id 群组id
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_destroy_group($group_id);

    /**
     * 获取某一用户加入的群组
     * @param string $account_id 用户id
     * @return array 通过解析REST接口json返回包得到的关联数组,包含该用户加入的群的信息(如果成功), 成功与否、错误提示等字段
     */
    abstract function group_get_joined_group_list($account_id);

    /**
     * 获取某一用户加入的群组(高级接口)
     * @param string $account_id 用户id
     * @param string $group_type 拉取哪种群组形态(Pulic(公开群)/Private(私密群)/ChatRoom(聊天室)),不填为拉取所有
     * @param array  $base_info_filter 基础信息字段过滤器. php构造示例:
     *    $base_info_filter = array(
     *         "Type",               //群类型(包括Public(公开群), Private(私密群), ChatRoom(聊天室))
     *         "Name",               //群名称
     *         "Introduction",       //群简介
     *         "Notification",       //群公告
     *         "FaceUrl",            //群头像url地址
     *         "CreateTime",         //群组创建时间
     *         "Owner_Account",      //群主id
     *         "LastInfoTime",       //最后一次系统通知时间
     *         "LastMsgTime",        //最后一次消息发送时间
     *         "MemberNum",          //群组当前成员数目
     *         "MaxMemberNum",       //群组内最大成员数目
     *         "ApplyJoinOption"     //申请加群处理方式(比如FreeAccess 自由加入, NeedPermission 需要同意)
     *         );
     * @param array  $self_info_filter 自身在群内的消息过滤器. php构造示例:
     *    $self_info_filter = array(
     *            "Role",            //群内身份(Amin/Member)
     *            "JoinTime",        //入群时间
     *            "MsgFlag",         //消息屏蔽类型
     *            "UnreadMsgNum"     //未读消息数量
     *         );
     * @return array 通过解析REST接口json返回包得到的关联数组,包含该用户加入的群的信息(如果成功), 成功与否、错误提示等字段
     */
    abstract function group_get_joined_group_list2($account_id, $group_type, $base_info_filter, $self_info_filter);

    /**
     * 查询用户在某个群组中的身份
     * @param string $group_id 群组id
     * @param string $member_id 要查询的用户
     * @return array 通过解析REST接口json返回包得到的关联数组,包含该用户在某个群的身份(如果成功), 成功与否、错误提示等字段
     */
    abstract function group_get_role_in_group($group_id, $member_id);

    /**
     * 批量禁言/取消禁言
     * @param string $group_id 群组id
     * @param string $member_id 要禁言/取消禁言 的用户
     * @param int    $second 表示禁言多少秒, 0表示取消禁言
     * @return array 通过解析REST接口json返回包得到的关联数组,包含该用户在某个群的身份(如果成功), 成功与否、错误提示等字段
     */
    abstract function group_forbid_send_msg($group_id, $member_id, $second);

    /**
     * 在某一群组里发普通消息
     * @param string $account_id 发送消息的用户
     * @param string $group_id 群组id
     * @param string $text_content 要发送的信息(均为文本消息)
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_send_group_msg($account_id, $group_id, $text_content);

    /**
     * 在某一群组里发送图片
     * @param string $account_id 发送消息的用户
     * @param string $group_id 群组id
     * @param string $pic_path 要发送图片的本地路径
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_send_group_msg_pic($account_id, $group_id, $pic_path);

    /**
     * 在某一群组里发普通消息(高级接口)
     * @param string $account_id 发送消息的用户
     * @param string $group_id 群组id
     * @param array  $msg_content 要发送的消息集合,这里包括文本消息和表情消息. php构造示例:
     *     //创建array $msg_content
     *     $msg_content = array();
     *     //创建array 所需元素
     *     $msg_content_text = array(
     *         'MsgType' => 'TIMTextElem',       //文本类型
     *         'MsgContent' => array(
     *         'Text' => "hello",                //"hello" 为文本信息
     *        )
     *   $msg_content_face = array(
     *         'MsgType' => 'TIMTextElem',       //表情类型
     *         'MsgContent' => array(
     *         'Data' => "abc\u0000\u0001",      //"abc\u0000\u0001" 为图片信息
     *        )
     *     array_push($msg_content, $msg_content_text);
     *     array_push($msg_content, $msg_content_face);
     *     );
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_send_group_msg2($account_id, $group_id, $msg_content);

    /**
     * 在某一群组发系统消息
     * @param string $group_id 群组id
     * @param string $content 系统通知内容,支持二进制数组
     * @param string $receiver_id 接收者群成员id,为空表示全员下发
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_send_group_system_notification($group_id, $content, $receiver_id);

    /**
     * 在某一群组发系统消息(高级接口)
     * @param string $group_id 群组id
     * @param string $content 系统通知内容,支持二进制数组
     * @param array  $receiver_list 接收此系统提示的用户id集合, 为空表示发送给全员. php构造示例:
     *   $receiver_list = array(
     *         "peter",
     *         "leckie"
     *     )
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_send_group_system_notification2($group_id, $content, $receiver_list);

    /**
     * 导入群成员(只导入一个成员, 入群时间默认为当前)
     * @param string $group_id 要操作的群组id
     * @param string $member_id 要导入的用户id
     * @param string $role 要导入的用户的身份(现可填值只有Admin),不填默认为Member
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_import_group_member($group_id, $member_id, $role);

    /**
     * 导入群成员(批量导入)
     * @param string $group_id 要操作的群组id
     * @param string $member_list 要导入的用户id集合,构造示例:
     *   $member_list = array();
     *   $member_elem = array(
     *      "Member_Account" => $member_id,
     *      "Role" => $role
     *   );
     *   array_push($member_list, $member_elem);
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_import_group_member2($group_id, $member_list);

    /**
     * 导入一条群文本消息
     * @param string $group_id 要操作的群组id
     * @param string $from_account 该消息发送者
     * @param int    $text 文本消息内容
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_import_group_msg($group_id, $from_account, $text);

    /**
     * 导入群消息(高级接口, 一次最多导入20条)
     * @param string $group_id 要操作的群组id
     * @param string $msg_list 消息集合, 构造方式如下:
     *   //构造MsgBody
     *   $msg_content = array(
     *       "Text" => $text
     *   );
     *   $msg_body_elem = array(
     *       "MsgType" => "TIMTextElem",
     *       "MsgContent" => $msg_content,
     *   );
     *   $msg_body_list = array();
     *   array_push($msg_body_list, $msg_body_elem);
     *   //构造MsgList的一个元素
     *   $msg_list_elem = array(
     *       "From_Account" => $from_account,
     *       "SendTime" => time(),
     *       "Random" => rand(1, 65535),
     *       "MsgBody" => $msg_body_list
     *   );
     *   //构造MsgList
     *   $msg_list = array();
     *   array_push($msg_list, $msg_list_elem);
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_import_group_msg2($group_id, $msg_list);

    /**
     * 设置群组成员未读计数
     * @param string $group_id 要操作的群组id
     * @param string $member_account 要操作的群成员
     * @param int    $unread_msg_num 该成员的未读计数
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function group_set_unread_msg_num($group_id, $member_account, $unread_msg_num);

    /**
     * 消息记录下载
     * @param String $chat_type 消息类型,C2C:单发消息 Group:群组消息。
     * @param String $msg_time 需要下载的时间段,2015120121表示获取2015年12月1日21:00~21:59的消息的下载地址。
     * @return array 通过解析REST接口json返回包得到的关联数组,包含成功与否、错误提示等字段
     */
    abstract function get_history($chat_type, $msg_time);

    ################################ 通用接口 ###################################

    /**
     * 直接访问RestApi
     * 建议仅在没有合适接口时才考虑使用
     * @param array $req_body 相应RestApi所需要的请求包体内容
     * @return array 通过解析REST接口json返回包得到的关联数组, 其中包含成功与否、及错误提示(如果有错误)等字段
     */
    abstract function comm_rest($server_name, $command, $req_body);
}