# OpenIM 客户端接口文档

本文档用于前端开发人员对接 OpenIM 服务器 API 接口。

## 目录

- [基础说明](#基础说明)
- [认证接口](#认证接口)
- [用户接口](#用户接口)
- [好友接口](#好友接口)
- [群组接口](#群组接口)
- [消息接口](#消息接口)
- [会话接口](#会话接口)
- [第三方服务接口](#第三方服务接口)
- [红包接口](#红包接口)
- [会议接口](#会议接口)
- [钱包接口](#钱包接口)
- [错误码说明](#错误码说明)

---

## 基础说明

### 请求格式

- **请求方法**: 所有接口均使用 `POST` 方法（除特殊说明外）
- **Content-Type**: `application/json`
- **请求头**: 需要在请求头中携带 `token` 进行身份验证（除白名单接口外）

```http
POST /api/user/get_users_info
Content-Type: application/json
token: your_token_here
```

### 响应格式

所有接口统一返回以下格式：

```json
{
  "errCode": 0,        // 错误码，0表示成功
  "errMsg": "",        // 错误消息
  "errDlt": "",        // 错误详情
  "data": {}           // 响应数据，具体结构见各接口说明
}
```

### 认证说明

- 大部分接口需要在请求头中携带 `token`
- 白名单接口（无需token）：
  - `/auth/get_admin_token` - 获取管理员token
  - `/auth/parse_token` - 解析token

### 基础URL

根据部署环境配置，例如：
- 开发环境: `http://localhost:10002`
- 生产环境: `https://your-domain.com`

---

## 认证接口

### 1. 获取用户Token

**接口地址**: `POST /auth/get_user_token`

**接口描述**: 用户登录时获取token

**请求参数**:
```json
{
  "secret": "string",           // 密钥（必填）
  "userID": "string",           // 用户ID（必填）
  "platform": 1                 // 平台ID（必填）：1-iOS, 2-Android, 3-Windows, 4-OSX, 5-Web, 6-小程序
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "expireTimeSeconds": 604800
  }
}
```

### 2. 解析Token

**接口地址**: `POST /auth/parse_token`

**接口描述**: 解析token，验证token有效性（白名单接口，无需token）

**请求参数**:
```json
{
  "token": "string"  // token字符串（必填）
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "userID": "string",
    "platform": 1,
    "expireTimeSeconds": 604800
  }
}
```

### 3. 强制登出

**接口地址**: `POST /auth/force_logout`

**接口描述**: 强制用户登出，使token失效

**请求参数**:
```json
{
  "userID": "string",    // 用户ID（必填）
  "platform": 1          // 平台ID（必填）
}
```

---

## 用户接口

### 1. 用户注册

**接口地址**: `POST /user/user_register`

**请求参数**:
```json
{
  "secret": "string",      // 密钥（必填）
  "users": [               // 用户列表（必填）
    {
      "userID": "string",  // 用户ID（必填）
      "nickname": "string", // 昵称（必填）
      "faceURL": "string",  // 头像URL（选填）
      "ex": "string"        // 扩展字段（选填）
    }
  ]
}
```

### 2. 更新用户信息

**接口地址**: `POST /user/update_user_info_ex`

**请求参数**:
```json
{
  "userID": "string",      // 用户ID（必填）
  "nickname": "string",    // 昵称（选填）
  "faceURL": "string",     // 头像URL（选填）
  "ex": "string"           // 扩展字段（选填）
}
```

### 3. 获取用户信息

**接口地址**: `POST /user/get_users_info`

**请求参数**:
```json
{
  "userIDs": ["user1", "user2"]  // 用户ID列表（必填）
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "users": [
      {
        "userID": "string",
        "nickname": "string",
        "faceURL": "string",
        "ex": "string",
        "createTime": 1234567890000
      }
    ]
  }
}
```

### 4. 获取用户在线状态

**接口地址**: `POST /user/get_users_online_status`

**请求参数**:
```json
{
  "userIDs": ["user1", "user2"]  // 用户ID列表（必填）
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "successResult": [
      {
        "userID": "string",
        "status": "online",  // online/offline
        "platformIDs": [1, 2]
      }
    ],
    "failedResult": [
      {
        "userID": "string",
        "errMsg": "string"
      }
    ]
  }
}
```

### 5. 订阅用户状态

**接口地址**: `POST /user/subscribe_users_status`

**请求参数**:
```json
{
  "userIDs": ["user1", "user2"]  // 要订阅的用户ID列表（必填）
}
```

### 6. 获取订阅的用户状态

**接口地址**: `POST /user/get_subscribe_users_status`

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "statusList": [
      {
        "userID": "string",
        "status": "online",
        "platformIDs": [1, 2]
      }
    ]
  }
}
```

### 7. 设置全局消息接收选项

**接口地址**: `POST /user/set_global_msg_recv_opt`

**请求参数**:
```json
{
  "globalRecvMsgOpt": 0  // 0-接收并通知，1-接收但不通知，2-不接收
}
```

---

## 好友接口

### 1. 申请添加好友

**接口地址**: `POST /friend/add_friend`

**请求参数**:
```json
{
  "toUserID": "string",      // 目标用户ID（必填）
  "reqMsg": "string",        // 申请消息（选填）
  "ex": "string"             // 扩展字段（选填）
}
```

### 2. 处理好友申请

**接口地址**: `POST /friend/add_friend_response`

**请求参数**:
```json
{
  "fromUserID": "string",    // 申请者用户ID（必填）
  "handleResult": 1,         // 处理结果（必填）：0-拒绝，1-同意
  "handleMsg": "string"       // 处理消息（选填）
}
```

### 3. 删除好友

**接口地址**: `POST /friend/delete_friend`

**请求参数**:
```json
{
  "friendUserID": "string"   // 好友用户ID（必填）
}
```

### 4. 获取好友列表

**接口地址**: `POST /friend/get_friend_list`

**请求参数**:
```json
{
  "pagination": {            // 分页参数（选填）
    "pageNumber": 1,
    "showNumber": 20
  }
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "friendsInfo": [
      {
        "ownerUserID": "string",
        "remark": "string",
        "createTime": 1234567890000,
        "friendUser": {
          "userID": "string",
          "nickname": "string",
          "faceURL": "string"
        }
      }
    ],
    "total": 100
  }
}
```

### 5. 获取指定好友信息

**接口地址**: `POST /friend/get_designated_friends`

**请求参数**:
```json
{
  "friendUserIDs": ["user1", "user2"]  // 好友用户ID列表（必填）
}
```

### 6. 设置好友备注

**接口地址**: `POST /friend/set_friend_remark`

**请求参数**:
```json
{
  "toUserID": "string",      // 好友用户ID（必填）
  "remark": "string"          // 备注（必填）
}
```

### 7. 获取好友申请列表

**接口地址**: `POST /friend/get_friend_apply_list`

**请求参数**:
```json
{
  "pagination": {
    "pageNumber": 1,
    "showNumber": 20
  }
}
```

### 8. 获取自己的申请列表

**接口地址**: `POST /friend/get_self_friend_apply_list`

**请求参数**: 同上

### 9. 添加黑名单

**接口地址**: `POST /friend/add_black`

**请求参数**:
```json
{
  "toUserID": "string"  // 目标用户ID（必填）
}
```

### 10. 获取黑名单列表

**接口地址**: `POST /friend/get_black_list`

**请求参数**:
```json
{
  "pagination": {
    "pageNumber": 1,
    "showNumber": 20
  }
}
```

### 11. 移除黑名单

**接口地址**: `POST /friend/remove_black`

**请求参数**:
```json
{
  "toUserID": "string"  // 目标用户ID（必填）
}
```

### 12. 检查是否为好友

**接口地址**: `POST /friend/is_friend`

**请求参数**:
```json
{
  "toUserIDs": ["user1", "user2"]  // 用户ID列表（必填）
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "results": [
      {
        "userID": "string",
        "isFriend": true
      }
    ]
  }
}
```

---

## 群组接口

### 1. 创建群组

**接口地址**: `POST /group/create_group`

**请求参数**:
```json
{
  "groupInfo": {
    "groupName": "string",        // 群名称（必填）
    "introduction": "string",     // 群介绍（选填）
    "faceURL": "string",          // 群头像（选填）
    "ex": "string"                // 扩展字段（选填）
  },
  "memberUserIDs": ["user1", "user2"]  // 初始成员列表（选填）
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "groupInfo": {
      "groupID": "string",
      "groupName": "string",
      "introduction": "string",
      "faceURL": "string",
      "ownerUserID": "string",
      "createTime": 1234567890000,
      "memberCount": 1
    }
  }
}
```

### 2. 设置群信息

**接口地址**: `POST /group/set_group_info`

**请求参数**:
```json
{
  "groupID": "string",           // 群ID（必填）
  "groupName": "string",         // 群名称（选填）
  "introduction": "string",      // 群介绍（选填）
  "faceURL": "string",           // 群头像（选填）
  "ex": "string"                 // 扩展字段（选填）
}
```

### 3. 加入群组

**接口地址**: `POST /group/join_group`

**请求参数**:
```json
{
  "groupID": "string",      // 群ID（必填）
  "reqMessage": "string",   // 申请消息（选填）
  "ex": "string"            // 扩展字段（选填）
}
```

### 4. 退出群组

**接口地址**: `POST /group/quit_group`

**请求参数**:
```json
{
  "groupID": "string"  // 群ID（必填）
}
```

### 5. 处理群组申请

**接口地址**: `POST /group/group_application_response`

**请求参数**:
```json
{
  "groupID": "string",        // 群ID（必填）
  "fromUserID": "string",     // 申请者用户ID（必填）
  "handleResult": 1,          // 处理结果（必填）：0-拒绝，1-同意
  "handledMsg": "string"      // 处理消息（选填）
}
```

### 6. 转让群主

**接口地址**: `POST /group/transfer_group`

**请求参数**:
```json
{
  "groupID": "string",      // 群ID（必填）
  "newOwnerUserID": "string"  // 新群主用户ID（必填）
}
```

### 7. 获取群组信息

**接口地址**: `POST /group/get_groups_info`

**请求参数**:
```json
{
  "groupIDs": ["group1", "group2"]  // 群ID列表（必填）
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "groups": [
      {
        "groupID": "string",
        "groupName": "string",
        "introduction": "string",
        "faceURL": "string",
        "ownerUserID": "string",
        "createTime": 1234567890000,
        "memberCount": 10
      }
    ]
  }
}
```

### 8. 获取已加入的群组列表

**接口地址**: `POST /group/get_joined_group_list`

**请求参数**:
```json
{
  "pagination": {
    "pageNumber": 1,
    "showNumber": 20
  }
}
```

### 9. 获取群成员列表

**接口地址**: `POST /group/get_group_member_list`

**请求参数**:
```json
{
  "groupID": "string",      // 群ID（必填）
  "pagination": {
    "pageNumber": 1,
    "showNumber": 20
  }
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "members": [
      {
        "groupID": "string",
        "userID": "string",
        "roleLevel": 1,      // 1-群主，2-管理员，3-普通成员
        "joinTime": 1234567890000,
        "nickname": "string",
        "faceURL": "string"
      }
    ],
    "total": 100
  }
}
```

### 10. 邀请用户加入群组

**接口地址**: `POST /group/invite_user_to_group`

**请求参数**:
```json
{
  "groupID": "string",              // 群ID（必填）
  "invitedUserIDs": ["user1", "user2"],  // 被邀请用户ID列表（必填）
  "reason": "string"                 // 邀请理由（选填）
}
```

### 11. 踢出群成员

**接口地址**: `POST /group/kick_group`

**请求参数**:
```json
{
  "groupID": "string",           // 群ID（必填）
  "kickedUserIDs": ["user1"]     // 被踢出用户ID列表（必填）
}
```

### 12. 解散群组

**接口地址**: `POST /group/dismiss_group`

**请求参数**:
```json
{
  "groupID": "string"  // 群ID（必填）
}
```

### 13. 设置群成员信息

**接口地址**: `POST /group/set_group_member_info`

**请求参数**:
```json
{
  "groupID": "string",      // 群ID（必填）
  "userID": "string",       // 用户ID（必填）
  "nickname": "string",     // 群内昵称（选填）
  "faceURL": "string",     // 头像（选填）
  "roleLevel": 2,          // 角色等级（选填）：1-群主，2-管理员，3-普通成员
  "ex": "string"           // 扩展字段（选填）
}
```

### 14. 禁言群成员

**接口地址**: `POST /group/mute_group_member`

**请求参数**:
```json
{
  "groupID": "string",      // 群ID（必填）
  "userID": "string",       // 用户ID（必填）
  "mutedSeconds": 3600      // 禁言时长（秒，必填）
}
```

### 15. 取消禁言群成员

**接口地址**: `POST /group/cancel_mute_group_member`

**请求参数**:
```json
{
  "groupID": "string",  // 群ID（必填）
  "userID": "string"    // 用户ID（必填）
}
```

### 16. 禁言群组

**接口地址**: `POST /group/mute_group`

**请求参数**:
```json
{
  "groupID": "string"  // 群ID（必填）
}
```

### 17. 取消禁言群组

**接口地址**: `POST /group/cancel_mute_group`

**请求参数**:
```json
{
  "groupID": "string"  // 群ID（必填）
}
```

---

## 消息接口

### 1. 发送消息

**接口地址**: `POST /msg/send_msg`

**请求参数**:
```json
{
  "sendID": "string",        // 发送者ID（必填）
  "groupID": "string",       // 群ID（选填，单聊不填，群聊必填）
  "recvID": "string",        // 接收者ID（选填，单聊必填，群聊不填）
  "senderNickname": "string", // 发送者昵称（选填）
  "senderFaceURL": "string",  // 发送者头像（选填）
  "contentType": 101,        // 消息类型（必填）：101-文本，102-图片，103-语音，104-视频等
  "content": "string",       // 消息内容（必填）
  "options": {               // 消息选项（选填）
    "isHistory": true,       // 是否存储历史
    "isPersistent": true,    // 是否持久化
    "isSenderSync": true     // 是否同步给发送者
  },
  "clientMsgID": "string",   // 客户端消息ID（必填）
  "offlinePushInfo": {       // 离线推送信息（选填）
    "title": "string",
    "desc": "string"
  }
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "serverMsgID": "string",
    "clientMsgID": "string",
    "sendTime": 1234567890000
  }
}
```

### 2. 发送简单消息

**接口地址**: `POST /msg/send_simple_msg`

**请求参数**: 同上，但参数更简化

### 3. 批量发送消息

**接口地址**: `POST /msg/batch_send_msg`

**请求参数**:
```json
{
  "sendID": "string",
  "groupID": "string",
  "recvIDs": ["user1", "user2"],  // 接收者ID列表
  "contentType": 101,
  "content": "string",
  "clientMsgID": "string"
}
```

### 4. 获取最新序列号

**接口地址**: `POST /msg/newest_seq`

**请求参数**:
```json
{
  "userID": "string"  // 用户ID（必填）
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "seq": 1000  // 最新序列号
  }
}
```

### 5. 根据序列号拉取消息

**接口地址**: `POST /msg/pull_msg_by_seq`

**请求参数**:
```json
{
  "userID": "string",           // 用户ID（必填）
  "seqRanges": [                // 序列号范围列表（必填）
    {
      "start": 1,
      "end": 100
    }
  ]
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "msgs": [
      {
        "serverMsgID": "string",
        "clientMsgID": "string",
        "sendID": "string",
        "recvID": "string",
        "groupID": "string",
        "contentType": 101,
        "content": "string",
        "sendTime": 1234567890000
      }
    ]
  }
}
```

### 6. 搜索消息

**接口地址**: `POST /msg/search_msg`

**请求参数**:
```json
{
  "sendID": "string",        // 发送者ID（选填）
  "recvID": "string",        // 接收者ID（选填）
  "groupID": "string",       // 群ID（选填）
  "contentType": 101,        // 消息类型（选填）
  "keyword": "string",        // 关键词（选填）
  "pagination": {
    "pageNumber": 1,
    "showNumber": 20
  }
}
```

### 7. 撤回消息

**接口地址**: `POST /msg/revoke_msg`

**请求参数**:
```json
{
  "conversationID": "string",  // 会话ID（必填）
  "seq": 100,                  // 消息序列号（必填）
  "userID": "string"           // 用户ID（必填）
}
```

### 8. 标记消息已读

**接口地址**: `POST /msg/mark_msgs_as_read`

**请求参数**:
```json
{
  "conversationID": "string",  // 会话ID（必填）
  "seqs": [100, 101, 102],    // 消息序列号列表（必填）
  "userID": "string"          // 用户ID（必填）
}
```

### 9. 标记会话已读

**接口地址**: `POST /msg/mark_conversation_as_read`

**请求参数**:
```json
{
  "conversationID": "string",  // 会话ID（必填）
  "hasReadSeq": 100,           // 已读序列号（必填）
  "userID": "string"           // 用户ID（必填）
}
```

### 10. 获取会话已读序列号

**接口地址**: `POST /msg/get_conversations_has_read_and_max_seq`

**请求参数**:
```json
{
  "userID": "string",                    // 用户ID（必填）
  "conversationIDs": ["conv1", "conv2"]  // 会话ID列表（必填）
}
```

### 11. 删除消息

**接口地址**: `POST /msg/delete_msgs`

**请求参数**:
```json
{
  "userID": "string",           // 用户ID（必填）
  "conversationID": "string",   // 会话ID（必填）
  "seqs": [100, 101, 102]      // 消息序列号列表（必填）
}
```

### 12. 清空会话消息

**接口地址**: `POST /msg/clear_conversation_msg`

**请求参数**:
```json
{
  "userID": "string",          // 用户ID（必填）
  "conversationID": "string"   // 会话ID（必填）
}
```

### 13. 获取服务器时间

**接口地址**: `POST /msg/get_server_time`

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "serverTime": 1234567890000  // 服务器时间戳（毫秒）
  }
}
```

---

## 会话接口

### 1. 获取所有会话

**接口地址**: `POST /conversation/get_all_conversations`

**请求参数**:
```json
{
  "ownerUserID": "string"  // 用户ID（必填）
}
```

**响应参数**:
```json
{
  "errCode": 0,
  "errMsg": "",
  "errDlt": "",
  "data": {
    "conversations": [
      {
        "ownerUserID": "string",
        "conversationID": "string",
        "conversationType": 1,  // 1-单聊，2-群聊
        "userID": "string",      // 单聊时使用
        "groupID": "string",     // 群聊时使用
        "recvMsgOpt": 0,         // 接收消息选项：0-接收并通知，1-接收但不通知，2-不接收
        "unreadCount": 0,        // 未读消息数
        "draftText": "string",   // 草稿
        "draftTextTime": 0,      // 草稿时间
        "isPinned": false,       // 是否置顶
        "isPrivateChat": false,  // 是否私聊
        "burnDuration": 0,       // 阅后即焚时长（秒）
        "groupAtType": 0,        // 群@类型
        "maxSeq": 0,             // 最大序列号
        "hasReadSeq": 0,         // 已读序列号
        "updateUnreadCountTime": 0
      }
    ]
  }
}
```

### 2. 获取排序后的会话列表

**接口地址**: `POST /conversation/get_sorted_conversation_list`

**请求参数**:
```json
{
  "ownerUserID": "string",  // 用户ID（必填）
  "pagination": {
    "pageNumber": 1,
    "showNumber": 20
  }
}
```

### 3. 获取指定会话

**接口地址**: `POST /conversation/get_conversation`

**请求参数**:
```json
{
  "ownerUserID": "string",     // 用户ID（必填）
  "conversationID": "string"   // 会话ID（必填）
}
```

### 4. 批量获取会话

**接口地址**: `POST /conversation/get_conversations`

**请求参数**:
```json
{
  "ownerUserID": "string",                    // 用户ID（必填）
  "conversationIDs": ["conv1", "conv2"]      // 会话ID列表（必填）
}
```

### 5. 设置会话

**接口地址**: `POST /conversation/set_conversations`

**请求参数**:
```json
{
  "conversations": [
    {
      "conversationID": "string",
      "recvMsgOpt": 0,
      "isPinned": false,
      "isPrivateChat": false,
      "groupAtType": 0,
      "draftText": "string",
      "draftTextTime": 0,
      "burnDuration": 0
    }
  ]
}
```

### 6. 获取增量会话

**接口地址**: `POST /conversation/get_incremental_conversations`

**请求参数**:
```json
{
  "ownerUserID": "string",     // 用户ID（必填）
  "seq": 100                   // 起始序列号（必填）
}
```

### 7. 获取置顶会话ID列表

**接口地址**: `POST /conversation/get_pinned_conversation_ids`

**请求参数**:
```json
{
  "ownerUserID": "string"  // 用户ID（必填）
}
```

### 8. 删除会话

**接口地址**: `POST /conversation/delete_conversations`

**请求参数**:
```json
{
  "ownerUserID": "string",                    // 用户ID（必填）
  "conversationIDs": ["conv1", "conv2"]     // 会话ID列表（必填）
}
```

---

## 第三方服务接口

### 1. 更新FCM Token

**接口地址**: `POST /third/fcm_update_token`

**请求参数**:
```json
{
  "platform": 1,        // 平台ID（必填）
  "fcmToken": "string", // FCM Token（必填）
  "userID": "string"    // 用户ID（必填）
}
```

### 2. 设置应用角标

**接口地址**: `POST /third/set_app_badge`

**请求参数**:
```json
{
  "userID": "string",    // 用户ID（必填）
  "unreadCount": 10     // 未读数（必填）
}
```

### 3. 上传日志

**接口地址**: `POST /third/logs/upload`

**请求参数**: 文件上传（multipart/form-data）

### 4. 对象存储 - 初始化分片上传

**接口地址**: `POST /object/initiate_multipart_upload`

**请求参数**:
```json
{
  "name": "string",      // 对象名称（必填）
  "contentType": "string"  // 内容类型（选填）
}
```

### 5. 对象存储 - 完成分片上传

**接口地址**: `POST /object/complete_multipart_upload`

**请求参数**:
```json
{
  "name": "string",      // 对象名称（必填）
  "uploadID": "string", // 上传ID（必填）
  "parts": [            // 分片列表（必填）
    {
      "partNumber": 1,
      "etag": "string"
    }
  ]
}
```

### 6. 对象存储 - 获取访问URL

**接口地址**: `POST /object/access_url`

**请求参数**:
```json
{
  "name": "string",     // 对象名称（必填）
  "expires": 3600       // 过期时间（秒，选填）
}
```

---

## 红包接口

详细文档请参考：[红包接口文档](./redpacket-api.md)

### 主要接口

1. **发送红包**: `POST /redpacket/send_redpacket`
2. **领取红包**: `POST /redpacket/receive`
3. **查询红包详情**: `POST /redpacket/get_detail`

---

## 会议接口

详细文档请参考：[会议接口文档](./meeting-api.md)

### 用户端接口

1. **获取会议信息**: `POST /meeting/get_meeting`
2. **获取会议列表**: `POST /meeting/get_meetings_public`

---

## 钱包接口

### 1. 获取钱包列表（管理接口）

**接口地址**: `POST /wallet/get_wallets`

**请求参数**:
```json
{
  "pagination": {
    "pageNumber": 1,
    "showNumber": 20
  }
}
```

### 2. 批量更新余额（管理接口）

**接口地址**: `POST /wallet/batch_update_balance`

**请求参数**:
```json
{
  "updates": [
    {
      "userID": "string",
      "amount": 10000,      // 金额（分）
      "changeType": 1       // 变更类型：1-增加，2-减少
    }
  ]
}
```

---

## 错误码说明

### 通用错误码

| 错误码 | 说明 |
|--------|------|
| 0 | 成功 |
| 500 | 服务器内部错误 |
| 1001 | 参数错误 |
| 1002 | 权限不足 |
| 1003 | 重复键错误 |
| 1004 | 记录不存在 |

### 用户相关错误码

| 错误码 | 说明 |
|--------|------|
| 1101 | 用户ID不存在或未注册 |
| 1102 | 用户已注册 |

### 群组相关错误码

| 错误码 | 说明 |
|--------|------|
| 1201 | 群ID不存在 |
| 1202 | 群ID已存在 |
| 1203 | 尚未加入群组 |
| 1204 | 群组已解散 |
| 1205 | 群组类型不支持 |
| 1206 | 群组申请已处理 |

### 好友相关错误码

| 错误码 | 说明 |
|--------|------|
| 1301 | 不能添加自己为好友 |
| 1302 | 被对方拉黑 |
| 1303 | 不是对方的好友 |
| 1304 | 已经是好友关系 |

### 消息相关错误码

| 错误码 | 说明 |
|--------|------|
| 1401 | 消息已读功能禁用 |
| 1402 | 群成员被禁言 |
| 1403 | 群组被禁言 |
| 1404 | 消息已撤回 |
| 1405 | 消息包含链接（不允许） |
| 1406 | 图片包含二维码（不允许） |

### Token相关错误码

| 错误码 | 说明 |
|--------|------|
| 1501 | Token已过期 |
| 1502 | Token无效 |
| 1503 | Token格式错误 |
| 1504 | Token尚未生效 |
| 1505 | Token未知错误 |
| 1506 | Token被踢出 |
| 1507 | Token不存在 |

### 红包相关错误码

| 错误码 | 说明 |
|--------|------|
| 1801 | 红包已被领完 |
| 1802 | 红包已过期 |
| 1803 | 用户已领取过该红包 |

---

## 注意事项

### 1. 认证

- 除白名单接口外，所有接口都需要在请求头中携带 `token`
- Token通过 `/auth/get_user_token` 接口获取
- Token过期后需要重新获取

### 2. 请求格式

- 所有接口使用 `POST` 方法（除特殊说明外）
- Content-Type: `application/json`
- 请求体为JSON格式

### 3. 响应格式

- 所有接口统一返回格式：`{errCode, errMsg, errDlt, data}`
- `errCode` 为 0 表示成功，非0表示失败
- 失败时查看 `errMsg` 和 `errDlt` 获取错误详情

### 4. 分页参数

- 分页参数统一格式：
  ```json
  {
    "pagination": {
      "pageNumber": 1,    // 页码，从1开始
      "showNumber": 20    // 每页数量
    }
  }
  ```

### 5. 时间戳

- 所有时间戳均为毫秒级Unix时间戳
- 例如：`1234567890000` 表示 2009-02-13 23:31:30

### 6. 平台ID

- 1: iOS
- 2: Android
- 3: Windows
- 4: OSX
- 5: Web
- 6: 小程序

### 7. 消息类型

- 101: 文本消息
- 102: 图片消息
- 103: 语音消息
- 104: 视频消息
- 105: 文件消息
- 106: @消息
- 107: 位置消息
- 108: 自定义消息
- 109: 引用消息
- 110: 自定义消息（红包等）

### 8. 会话类型

- 1: 单聊
- 2: 群聊

### 9. 群成员角色

- 1: 群主
- 2: 管理员
- 3: 普通成员

### 10. 接收消息选项

- 0: 接收并通知
- 1: 接收但不通知
- 2: 不接收

---

## 接口汇总表

| 模块 | 接口数量 | 主要功能 |
|------|---------|---------|
| 认证 | 3 | 获取token、解析token、强制登出 |
| 用户 | 19 | 注册、更新信息、查询、在线状态等 |
| 好友 | 16 | 添加、删除、查询、黑名单等 |
| 群组 | 17 | 创建、加入、退出、管理成员等 |
| 消息 | 13 | 发送、接收、搜索、撤回等 |
| 会话 | 8 | 获取、设置、删除会话等 |
| 第三方服务 | 6+ | 文件上传、对象存储等 |
| 红包 | 3 | 发送、领取、查询 |
| 会议 | 2 | 查询会议信息 |
| 钱包 | 2 | 查询钱包、更新余额 |

---

## 相关文档

- [红包接口详细文档](./redpacket-api.md)
- [会议接口详细文档](./meeting-api.md)
- [错误码标准](./contrib/error-code.md)
- [API标准](./contrib/api.md)

---

**最后更新时间**: 2025-01-23

