27 KiB
OpenIM 客户端接口文档
本文档用于前端开发人员对接 OpenIM 服务器 API 接口。
目录
基础说明
请求格式
- 请求方法: 所有接口均使用
POST方法(除特殊说明外) - Content-Type:
application/json - 请求头: 需要在请求头中携带
token进行身份验证(除白名单接口外)
POST /api/user/get_users_info
Content-Type: application/json
token: your_token_here
响应格式
所有接口统一返回以下格式:
{
"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
请求参数:
{
"secret": "string", // 密钥(必填)
"userID": "string", // 用户ID(必填)
"platform": 1 // 平台ID(必填):1-iOS, 2-Android, 3-Windows, 4-OSX, 5-Web, 6-小程序
}
响应参数:
{
"errCode": 0,
"errMsg": "",
"errDlt": "",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expireTimeSeconds": 604800
}
}
2. 解析Token
接口地址: POST /auth/parse_token
接口描述: 解析token,验证token有效性(白名单接口,无需token)
请求参数:
{
"token": "string" // token字符串(必填)
}
响应参数:
{
"errCode": 0,
"errMsg": "",
"errDlt": "",
"data": {
"userID": "string",
"platform": 1,
"expireTimeSeconds": 604800
}
}
3. 强制登出
接口地址: POST /auth/force_logout
接口描述: 强制用户登出,使token失效
请求参数:
{
"userID": "string", // 用户ID(必填)
"platform": 1 // 平台ID(必填)
}
用户接口
1. 用户注册
接口地址: POST /user/user_register
请求参数:
{
"secret": "string", // 密钥(必填)
"users": [ // 用户列表(必填)
{
"userID": "string", // 用户ID(必填)
"nickname": "string", // 昵称(必填)
"faceURL": "string", // 头像URL(选填)
"ex": "string" // 扩展字段(选填)
}
]
}
2. 更新用户信息
接口地址: POST /user/update_user_info_ex
请求参数:
{
"userID": "string", // 用户ID(必填)
"nickname": "string", // 昵称(选填)
"faceURL": "string", // 头像URL(选填)
"ex": "string" // 扩展字段(选填)
}
3. 获取用户信息
接口地址: POST /user/get_users_info
请求参数:
{
"userIDs": ["user1", "user2"] // 用户ID列表(必填)
}
响应参数:
{
"errCode": 0,
"errMsg": "",
"errDlt": "",
"data": {
"users": [
{
"userID": "string",
"nickname": "string",
"faceURL": "string",
"ex": "string",
"createTime": 1234567890000
}
]
}
}
4. 获取用户在线状态
接口地址: POST /user/get_users_online_status
请求参数:
{
"userIDs": ["user1", "user2"] // 用户ID列表(必填)
}
响应参数:
{
"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
请求参数:
{
"userIDs": ["user1", "user2"] // 要订阅的用户ID列表(必填)
}
6. 获取订阅的用户状态
接口地址: POST /user/get_subscribe_users_status
响应参数:
{
"errCode": 0,
"errMsg": "",
"errDlt": "",
"data": {
"statusList": [
{
"userID": "string",
"status": "online",
"platformIDs": [1, 2]
}
]
}
}
7. 设置全局消息接收选项
接口地址: POST /user/set_global_msg_recv_opt
请求参数:
{
"globalRecvMsgOpt": 0 // 0-接收并通知,1-接收但不通知,2-不接收
}
好友接口
1. 申请添加好友
接口地址: POST /friend/add_friend
请求参数:
{
"toUserID": "string", // 目标用户ID(必填)
"reqMsg": "string", // 申请消息(选填)
"ex": "string" // 扩展字段(选填)
}
2. 处理好友申请
接口地址: POST /friend/add_friend_response
请求参数:
{
"fromUserID": "string", // 申请者用户ID(必填)
"handleResult": 1, // 处理结果(必填):0-拒绝,1-同意
"handleMsg": "string" // 处理消息(选填)
}
3. 删除好友
接口地址: POST /friend/delete_friend
请求参数:
{
"friendUserID": "string" // 好友用户ID(必填)
}
4. 获取好友列表
接口地址: POST /friend/get_friend_list
请求参数:
{
"pagination": { // 分页参数(选填)
"pageNumber": 1,
"showNumber": 20
}
}
响应参数:
{
"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
请求参数:
{
"friendUserIDs": ["user1", "user2"] // 好友用户ID列表(必填)
}
6. 设置好友备注
接口地址: POST /friend/set_friend_remark
请求参数:
{
"toUserID": "string", // 好友用户ID(必填)
"remark": "string" // 备注(必填)
}
7. 获取好友申请列表
接口地址: POST /friend/get_friend_apply_list
请求参数:
{
"pagination": {
"pageNumber": 1,
"showNumber": 20
}
}
8. 获取自己的申请列表
接口地址: POST /friend/get_self_friend_apply_list
请求参数: 同上
9. 添加黑名单
接口地址: POST /friend/add_black
请求参数:
{
"toUserID": "string" // 目标用户ID(必填)
}
10. 获取黑名单列表
接口地址: POST /friend/get_black_list
请求参数:
{
"pagination": {
"pageNumber": 1,
"showNumber": 20
}
}
11. 移除黑名单
接口地址: POST /friend/remove_black
请求参数:
{
"toUserID": "string" // 目标用户ID(必填)
}
12. 检查是否为好友
接口地址: POST /friend/is_friend
请求参数:
{
"toUserIDs": ["user1", "user2"] // 用户ID列表(必填)
}
响应参数:
{
"errCode": 0,
"errMsg": "",
"errDlt": "",
"data": {
"results": [
{
"userID": "string",
"isFriend": true
}
]
}
}
群组接口
1. 创建群组
接口地址: POST /group/create_group
请求参数:
{
"groupInfo": {
"groupName": "string", // 群名称(必填)
"introduction": "string", // 群介绍(选填)
"faceURL": "string", // 群头像(选填)
"ex": "string" // 扩展字段(选填)
},
"memberUserIDs": ["user1", "user2"] // 初始成员列表(选填)
}
响应参数:
{
"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
请求参数:
{
"groupID": "string", // 群ID(必填)
"groupName": "string", // 群名称(选填)
"introduction": "string", // 群介绍(选填)
"faceURL": "string", // 群头像(选填)
"ex": "string" // 扩展字段(选填)
}
3. 加入群组
接口地址: POST /group/join_group
请求参数:
{
"groupID": "string", // 群ID(必填)
"reqMessage": "string", // 申请消息(选填)
"ex": "string" // 扩展字段(选填)
}
4. 退出群组
接口地址: POST /group/quit_group
请求参数:
{
"groupID": "string" // 群ID(必填)
}
5. 处理群组申请
接口地址: POST /group/group_application_response
请求参数:
{
"groupID": "string", // 群ID(必填)
"fromUserID": "string", // 申请者用户ID(必填)
"handleResult": 1, // 处理结果(必填):0-拒绝,1-同意
"handledMsg": "string" // 处理消息(选填)
}
6. 转让群主
接口地址: POST /group/transfer_group
请求参数:
{
"groupID": "string", // 群ID(必填)
"newOwnerUserID": "string" // 新群主用户ID(必填)
}
7. 获取群组信息
接口地址: POST /group/get_groups_info
请求参数:
{
"groupIDs": ["group1", "group2"] // 群ID列表(必填)
}
响应参数:
{
"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
请求参数:
{
"pagination": {
"pageNumber": 1,
"showNumber": 20
}
}
9. 获取群成员列表
接口地址: POST /group/get_group_member_list
请求参数:
{
"groupID": "string", // 群ID(必填)
"pagination": {
"pageNumber": 1,
"showNumber": 20
}
}
响应参数:
{
"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
请求参数:
{
"groupID": "string", // 群ID(必填)
"invitedUserIDs": ["user1", "user2"], // 被邀请用户ID列表(必填)
"reason": "string" // 邀请理由(选填)
}
11. 踢出群成员
接口地址: POST /group/kick_group
请求参数:
{
"groupID": "string", // 群ID(必填)
"kickedUserIDs": ["user1"] // 被踢出用户ID列表(必填)
}
12. 解散群组
接口地址: POST /group/dismiss_group
请求参数:
{
"groupID": "string" // 群ID(必填)
}
13. 设置群成员信息
接口地址: POST /group/set_group_member_info
请求参数:
{
"groupID": "string", // 群ID(必填)
"userID": "string", // 用户ID(必填)
"nickname": "string", // 群内昵称(选填)
"faceURL": "string", // 头像(选填)
"roleLevel": 2, // 角色等级(选填):1-群主,2-管理员,3-普通成员
"ex": "string" // 扩展字段(选填)
}
14. 禁言群成员
接口地址: POST /group/mute_group_member
请求参数:
{
"groupID": "string", // 群ID(必填)
"userID": "string", // 用户ID(必填)
"mutedSeconds": 3600 // 禁言时长(秒,必填)
}
15. 取消禁言群成员
接口地址: POST /group/cancel_mute_group_member
请求参数:
{
"groupID": "string", // 群ID(必填)
"userID": "string" // 用户ID(必填)
}
16. 禁言群组
接口地址: POST /group/mute_group
请求参数:
{
"groupID": "string" // 群ID(必填)
}
17. 取消禁言群组
接口地址: POST /group/cancel_mute_group
请求参数:
{
"groupID": "string" // 群ID(必填)
}
消息接口
1. 发送消息
接口地址: POST /msg/send_msg
请求参数:
{
"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"
}
}
响应参数:
{
"errCode": 0,
"errMsg": "",
"errDlt": "",
"data": {
"serverMsgID": "string",
"clientMsgID": "string",
"sendTime": 1234567890000
}
}
2. 发送简单消息
接口地址: POST /msg/send_simple_msg
请求参数: 同上,但参数更简化
3. 批量发送消息
接口地址: POST /msg/batch_send_msg
请求参数:
{
"sendID": "string",
"groupID": "string",
"recvIDs": ["user1", "user2"], // 接收者ID列表
"contentType": 101,
"content": "string",
"clientMsgID": "string"
}
4. 获取最新序列号
接口地址: POST /msg/newest_seq
请求参数:
{
"userID": "string" // 用户ID(必填)
}
响应参数:
{
"errCode": 0,
"errMsg": "",
"errDlt": "",
"data": {
"seq": 1000 // 最新序列号
}
}
5. 根据序列号拉取消息
接口地址: POST /msg/pull_msg_by_seq
请求参数:
{
"userID": "string", // 用户ID(必填)
"seqRanges": [ // 序列号范围列表(必填)
{
"start": 1,
"end": 100
}
]
}
响应参数:
{
"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
请求参数:
{
"sendID": "string", // 发送者ID(选填)
"recvID": "string", // 接收者ID(选填)
"groupID": "string", // 群ID(选填)
"contentType": 101, // 消息类型(选填)
"keyword": "string", // 关键词(选填)
"pagination": {
"pageNumber": 1,
"showNumber": 20
}
}
7. 撤回消息
接口地址: POST /msg/revoke_msg
请求参数:
{
"conversationID": "string", // 会话ID(必填)
"seq": 100, // 消息序列号(必填)
"userID": "string" // 用户ID(必填)
}
8. 标记消息已读
接口地址: POST /msg/mark_msgs_as_read
请求参数:
{
"conversationID": "string", // 会话ID(必填)
"seqs": [100, 101, 102], // 消息序列号列表(必填)
"userID": "string" // 用户ID(必填)
}
9. 标记会话已读
接口地址: POST /msg/mark_conversation_as_read
请求参数:
{
"conversationID": "string", // 会话ID(必填)
"hasReadSeq": 100, // 已读序列号(必填)
"userID": "string" // 用户ID(必填)
}
10. 获取会话已读序列号
接口地址: POST /msg/get_conversations_has_read_and_max_seq
请求参数:
{
"userID": "string", // 用户ID(必填)
"conversationIDs": ["conv1", "conv2"] // 会话ID列表(必填)
}
11. 删除消息
接口地址: POST /msg/delete_msgs
请求参数:
{
"userID": "string", // 用户ID(必填)
"conversationID": "string", // 会话ID(必填)
"seqs": [100, 101, 102] // 消息序列号列表(必填)
}
12. 清空会话消息
接口地址: POST /msg/clear_conversation_msg
请求参数:
{
"userID": "string", // 用户ID(必填)
"conversationID": "string" // 会话ID(必填)
}
13. 获取服务器时间
接口地址: POST /msg/get_server_time
响应参数:
{
"errCode": 0,
"errMsg": "",
"errDlt": "",
"data": {
"serverTime": 1234567890000 // 服务器时间戳(毫秒)
}
}
会话接口
1. 获取所有会话
接口地址: POST /conversation/get_all_conversations
请求参数:
{
"ownerUserID": "string" // 用户ID(必填)
}
响应参数:
{
"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
请求参数:
{
"ownerUserID": "string", // 用户ID(必填)
"pagination": {
"pageNumber": 1,
"showNumber": 20
}
}
3. 获取指定会话
接口地址: POST /conversation/get_conversation
请求参数:
{
"ownerUserID": "string", // 用户ID(必填)
"conversationID": "string" // 会话ID(必填)
}
4. 批量获取会话
接口地址: POST /conversation/get_conversations
请求参数:
{
"ownerUserID": "string", // 用户ID(必填)
"conversationIDs": ["conv1", "conv2"] // 会话ID列表(必填)
}
5. 设置会话
接口地址: POST /conversation/set_conversations
请求参数:
{
"conversations": [
{
"conversationID": "string",
"recvMsgOpt": 0,
"isPinned": false,
"isPrivateChat": false,
"groupAtType": 0,
"draftText": "string",
"draftTextTime": 0,
"burnDuration": 0
}
]
}
6. 获取增量会话
接口地址: POST /conversation/get_incremental_conversations
请求参数:
{
"ownerUserID": "string", // 用户ID(必填)
"seq": 100 // 起始序列号(必填)
}
7. 获取置顶会话ID列表
接口地址: POST /conversation/get_pinned_conversation_ids
请求参数:
{
"ownerUserID": "string" // 用户ID(必填)
}
8. 删除会话
接口地址: POST /conversation/delete_conversations
请求参数:
{
"ownerUserID": "string", // 用户ID(必填)
"conversationIDs": ["conv1", "conv2"] // 会话ID列表(必填)
}
第三方服务接口
1. 更新FCM Token
接口地址: POST /third/fcm_update_token
请求参数:
{
"platform": 1, // 平台ID(必填)
"fcmToken": "string", // FCM Token(必填)
"userID": "string" // 用户ID(必填)
}
2. 设置应用角标
接口地址: POST /third/set_app_badge
请求参数:
{
"userID": "string", // 用户ID(必填)
"unreadCount": 10 // 未读数(必填)
}
3. 上传日志
接口地址: POST /third/logs/upload
请求参数: 文件上传(multipart/form-data)
4. 对象存储 - 初始化分片上传
接口地址: POST /object/initiate_multipart_upload
请求参数:
{
"name": "string", // 对象名称(必填)
"contentType": "string" // 内容类型(选填)
}
5. 对象存储 - 完成分片上传
接口地址: POST /object/complete_multipart_upload
请求参数:
{
"name": "string", // 对象名称(必填)
"uploadID": "string", // 上传ID(必填)
"parts": [ // 分片列表(必填)
{
"partNumber": 1,
"etag": "string"
}
]
}
6. 对象存储 - 获取访问URL
接口地址: POST /object/access_url
请求参数:
{
"name": "string", // 对象名称(必填)
"expires": 3600 // 过期时间(秒,选填)
}
红包接口
详细文档请参考:红包接口文档
主要接口
- 发送红包:
POST /redpacket/send_redpacket - 领取红包:
POST /redpacket/receive - 查询红包详情:
POST /redpacket/get_detail
会议接口
详细文档请参考:会议接口文档
用户端接口
- 获取会议信息:
POST /meeting/get_meeting - 获取会议列表:
POST /meeting/get_meetings_public
钱包接口
1. 获取钱包列表(管理接口)
接口地址: POST /wallet/get_wallets
请求参数:
{
"pagination": {
"pageNumber": 1,
"showNumber": 20
}
}
2. 批量更新余额(管理接口)
接口地址: POST /wallet/batch_update_balance
请求参数:
{
"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. 分页参数
- 分页参数统一格式:
{ "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 | 查询钱包、更新余额 |
相关文档
最后更新时间: 2025-01-23