# 多米论坛API文档
本文档提供多米论坛API的使用说明,包括各接口的功能、参数和返回值。
## 目录
- [基本信息](#基本信息)
- [版块相关](#版块相关)
- [帖子相关](#帖子相关)
- [用户相关](#用户相关)
- [互动相关](#互动相关)
- [系统信息](#系统信息)
## 基本信息
### 接口访问方式
API接口支持两种访问方式:
1. **直接路径方式**:直接访问API端点路径
```
https://您的网站/login
https://您的网站/register
https://您的网站/forums
```
2. **查询参数方式**:通过plugin.php访问
```
https://您的网站/plugin.php?id=domi_api&mod=login
https://您的网站/plugin.php?id=domi_api&mod=register
```
### 请求格式
所有API请求均使用HTTP协议,支持GET和POST方法。
- GET请求:参数直接附加在URL后面,如 `?param1=value1¶m2=value2`
- POST请求:参数使用JSON格式,放在请求体中,`Content-Type: application/json`
### 认证方式
大部分API需要用户认证,认证信息可通过以下两种方式提供:
1. HTTP头部的`Authorization`字段:
```
Authorization: Bearer {token}
```
2. 请求参数中的`token`字段:
```
?token={token}
```
### 返回格式
所有API返回均使用JSON格式,包含以下字段:
- `code`: 状态码,200表示成功,其他值表示错误
- `message`: 状态描述,成功为"success",失败为错误信息
- `data`: 返回的数据,可能是对象或数组
- `timestamp`: 服务器时间戳
## 版块相关
### 获取版块列表
获取所有版块信息,包括分区和子版块。
- **接口**:`/forums`
- **方法**:GET
- **参数**:无
- **需要登录**:否
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": [
{
"fid": 1,
"name": "默认分区",
"type": "group",
"forums": [
{
"fid": 2,
"name": "默认版块",
"threads": 10,
"posts": 20,
"todayposts": 5,
"lastpost": {
"tid": 100,
"subject": "最新帖子",
"author": "admin",
"dateline": 1649212345
}
}
]
}
],
"timestamp": 1744196685
}
```
### 获取版块详情
获取指定版块的详细信息。
- **接口**:`/forumsdetail`
- **方法**:GET
- **参数**:
- `fid`: 版块ID,必填,可单个ID或多个ID(逗号分隔)
- **需要登录**:否
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"fid": 2,
"type": "forum",
"name": "默认版块",
"status": 1,
"displayorder": 0,
"fup": 1,
"threads": 10,
"posts": 20,
"todayposts": 5,
"lastpost": {
"tid": 100,
"subject": "最新帖子",
"dateline": 1649212345,
"author": "admin"
},
"moderators": ["admin", "mod1"],
"icon": "https://example.com/icon.png",
"banner": "https://example.com/banner.jpg",
"description": "这是默认版块",
"rules": "版块规则",
"threadtypes": [],
"threadsorts": [],
"perms": {
"view": [],
"post": [],
"reply": [],
"getattach": [],
"postattach": []
},
"extra": {
"commentitem": [],
"redirect": "",
"supe_pushsetting": "",
"modrecommend": [],
"formulaperm": "",
"picstyle": "0",
"seotitle": "",
"keywords": "",
"seodescription": ""
}
},
"timestamp": 1744196685
}
```
## 帖子相关
### 获取帖子列表
获取指定版块下的帖子列表。
- **接口**:`/threads`
- **方法**:GET
- **参数**:
- `fid`: 版块ID,必填,支持多版块(如`3,10`)或JSON数组(如`[3,10]`)
- `tid`: 帖子ID,可选,支持多帖子(如`1,2,3`),用于筛选指定ID的帖子
- `page`: 页码,默认1
- `perpage`: 每页数量,默认20,最大100
- `orderby`: 排序字段,可选值:`dateline`(发布时间), `lastpost`(最后回复时间), `views`(浏览数), `replies`(回复数), 默认`lastpost`
- `ascdesc`: 排序方向,可选值:`asc`(升序), `desc`(降序),默认`desc`
- `digest`: 精华帖过滤,可选值:`0`(非精华), `1`(一级精华), `2`(二级精华), `3`(三级精华)
- `keyword`: 关键词搜索
- `displayorder`: > 0:置顶帖 = 0:普通帖 -1:回收站中的帖 -2:审核中的帖 -3:已删除的帖 -4:待审核的主题
- **需要登录**:否
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"total": 100,
"page": 1,
"perpage": 20,
"list": [
{
"tid": 1,
"fid": 2,
"forum_name": "默认版块",
"subject": "帖子标题",
"price": 0,
"author": {
"uid": 1,
"username": "admin",
"avatar": "http://example.com/avatar/000/00/00/01_avatar_small.jpg"
},
"replies": 5,
"views": 100,
"dateline": 1649212345,
"dateline_formatted": "2022-04-06 12:30",
"lastpost": 1649213456,
"lastpost_formatted": "2022-04-06 12:50",
"lastposter": {
"username": "user1"
},
"attachment": 0,
"recommend_add": 10,
"recommend_subtract": 1
}
]
},
"timestamp": 1744196685
}
```
### 获取帖子详情
获取指定帖子的详细信息,包括正文内容。
- **接口**:`/threadsdetail`
- **方法**:GET
- **参数**:
- `tid`: 帖子ID,必填
- **需要登录**:否(付费帖需要登录)
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"tid": 1,
"fid": 2,
"forum_name": "默认版块",
"subject": "帖子标题",
"price": 0,
"author": {
"uid": 1,
"username": "admin",
"avatar": "http://example.com/avatar/000/00/00/01_avatar_small.jpg",
"groupid": 1,
"credits": 100,
"posts": 50,
"regdate": 1600000000,
"regdate_formatted": "2020-09-13 12:26"
},
"message": "帖子原始BBCode内容",
"content": "帖子处理后的内容(处理了付费/免费部分的HTML)",
"bbcode_html": "将帖子原始BBCode完整转换为HTML的内容",
"dateline": 1649212345,
"dateline_formatted": "2022-04-06 12:30",
"lastpost": 1649213456,
"lastpost_formatted": "2022-04-06 12:50",
"views": 100,
"replies": 5,
"attachments": [
{
"aid": 1,
"tid": 1,
"pid": 1,
"uid": 1,
"filename": "文件名.jpg",
"filesize": 1024,
"attachment": "202204/06/attachment_123.jpg",
"url": "http://example.com/data/attachment/forum/202204/06/attachment_123.jpg",
"isimage": 1,
"width": 800,
"height": 600
}
]
},
"timestamp": 1744196685
}
```
### 获取回复列表
获取指定帖子的回复列表。
- **接口**:`/posts`
- **方法**:GET
- **参数**:
- `tid`: 帖子ID,必填
- `page`: 页码,默认1
- `perpage`: 每页数量,默认20,最大100
- `orderby`: 排序字段,可选值:`dateline`(发布时间), `position`(楼层),默认`position`
- `ascdesc`: 排序方向,可选值:`asc`(升序), `desc`(降序),默认`asc`
- **需要登录**:否
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"tid": 1,
"total": 5,
"page": 1,
"perpage": 20,
"posts": [
{
"pid": 2,
"tid": 1,
"position": 2,
"author": {
"uid": 2,
"username": "user1",
"avatar": "http://example.com/avatar/000/00/00/02_avatar_small.jpg",
"groupid": 2,
"credits": 50,
"posts": 20
},
"subject": "回复标题",
"message": "回复内容HTML",
"dateline": 1649213000,
"dateline_formatted": "2022-04-06 12:40",
"attachments": []
}
]
},
"timestamp": 1744196685
}
```
### 发布帖子
发布新帖子。
- **接口**:`/threads`
- **方法**:POST
- **参数**:
- `fid`: 版块ID,必填
- `subject`: 帖子标题,必填
- `message`: 帖子内容,必填
- `price`: 售价(付费帖),可选,默认0
- **需要登录**:是
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"tid": 101,
"subject": "新帖子标题"
},
"timestamp": 1744196685
}
```
### 发布回复
回复帖子。
- **接口**:`/posts`
- **方法**:POST
- **参数**:
- `tid`: 帖子ID,必填
- `message`: 回复内容,必填
- **需要登录**:是
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"pid": 201,
"tid": 101
},
"timestamp": 1744196685
}
```
## 用户相关
### 用户登录
用户登录并获取认证令牌。
- **接口**:`/login` 或 `/auth`
- **方法**:POST
- **参数**:
- `username`: 用户名,必填
- `password`: 密码,必填
- **需要登录**:否
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"uid": 1,
"username": "admin",
"email": "admin@example.com",
"groupid": 1,
"groupname": "管理员",
"credits": 100,
"regdate": 1600000000,
"lastlogin": 1649212345,
"stats": {
"posts": 50,
"threads": 20,
"digestposts": 5
}
}
},
"timestamp": 1744196685
}
```
### 用户注册
注册新用户。
- **接口**:`/register`
- **方法**:POST
- **参数**:
- `username`: 用户名,必填
- `password`: 密码,必填
- `email`: 邮箱,必填
- **需要登录**:否
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"uid": 10,
"username": "newuser",
"email": "newuser@example.com",
"groupid": 10
}
},
"timestamp": 1744196685
}
```
### 刷新令牌
刷新认证令牌。
- **接口**:`/refresh`
- **方法**:POST
- **参数**:无(需要在Authorization头中提供当前令牌)
- **需要登录**:是
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
},
"timestamp": 1744196685
}
```
### 获取用户信息
获取当前登录用户或指定用户的信息。
- **接口**:`/usersinfo`
- **方法**:GET
- **参数**:
- `uid`: 用户ID,可选,不填则返回当前登录用户信息
- **需要登录**:是(查看自己的信息),否(查看其他用户的信息)
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"uid": 1,
"username": "admin",
"email": "admin@example.com",
"groupid": 1,
"groupname": "管理员",
"credits": 100,
"posts": 50,
"threads": 20,
"regdate": 1600000000,
"regdate_formatted": "2020-09-13 12:26"
},
"timestamp": 1744196685
}
```
### 更新用户资料
更新当前登录用户的资料。
- **接口**:`/usersupdate`
- **方法**:POST
- **参数**:
- `oldpassword`: 旧密码,修改密码时必填
- `newpassword`: 新密码,可选
- `gender`: 性别,可选,0=保密, 1=男, 2=女
- `bio`: 个人简介,可选
- `realname`: 真实姓名,可选
- `birthday`: 生日,可选,格式:YYYY-MM-DD
- `address`: 地址,可选
- `mobile`: 手机号,可选
- `qq`: QQ号,可选
- `site`: 个人网站,可选
- **需要登录**:是
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"uid": 1,
"username": "admin",
"email": "admin@example.com",
"groupid": 1
},
"timestamp": 1744196685
}
```
### 获取用户发布的帖子
获取用户发布的帖子列表。
- **接口**:`/usersthreads`
- **方法**:GET
- **参数**:
- `uid`: 用户ID,可选,不填则返回当前登录用户的帖子
- `page`: 页码,默认1
- `perpage`: 每页数量,默认20,最大100
- **需要登录**:是(查看自己的帖子),否(查看其他用户的帖子)
- **返回示例**:与获取帖子列表相同
### 获取用户收藏的帖子
获取用户收藏的帖子列表。
- **接口**:`/usersfavorites`
- **方法**:GET
- **参数**:
- `page`: 页码,默认1
- `perpage`: 每页数量,默认20,最大100
- **需要登录**:是
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"total": 10,
"page": 1,
"perpage": 20,
"favorites": [
{
"favorite_id": 1,
"tid": 1,
"fid": 2,
"forum_name": "默认版块",
"subject": "帖子标题",
"price": 0,
"author": {
"uid": 2,
"username": "user1",
"avatar": "http://example.com/avatar/000/00/00/02_avatar_small.jpg"
},
"replies": 5,
"views": 100,
"dateline": 1649212345,
"dateline_formatted": "2022-04-06 12:30",
"lastpost": 1649213456,
"lastpost_formatted": "2022-04-06 12:50",
"lastposter": {
"username": "user2"
},
"attachment": 0,
"recommend_add": 10,
"recommend_subtract": 1,
"favorite_time": 1649214567
}
]
},
"timestamp": 1744196685
}
```
## 互动相关
### 点赞/踩帖子
对帖子进行点赞(支持)或踩(反对)。
- **接口**:`/recommend`
- **方法**:POST
- **参数**:
- `tid`: 帖子ID,必填
- `do`: 操作类型,`add`(点赞/支持), `subtract`(踩/反对)或`remove`(取消),必填
- **需要登录**:是
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"status": "success",
"is_recommended": 1,
"recommend_add": 11,
"recommend_subtract": 1
},
"timestamp": 1744196685
}
```
### 收藏帖子
收藏或取消收藏帖子。
- **接口**:`/favorite`
- **方法**:POST
- **参数**:
- `tid`: 帖子ID,必填
- `do`: 操作类型,`add`(收藏)或`remove`(取消收藏),必填
- **需要登录**:是
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"status": "success",
"is_favorite": true
},
"timestamp": 1744196685
}
```
## 系统信息
### 获取站点信息
获取Discuz!X站点的基本信息和统计数据。
- **接口**:`/siteinfo`
- **方法**:GET
- **参数**:无
- **需要登录**:否
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"site_name": "多米论坛",
"site_url": "https://demo.discuz.com",
"site_qq": "",
"site_icp": "",
"site_plugins": "",
"site_admin": "admin@example.com",
"discuz_version": "X3.5",
"timezone": "+8",
"server_time": 1649212345,
"server_time_formatted": "2022-04-06 12:30:45",
"stats": {
"users": 1000,
"threads": 5000,
"posts": 10000,
"online": 50
},
"api_version": "1.0.0"
},
"timestamp": 1744196685
}
```
### 获取插件设置
获取多米应用API插件的公开设置参数。
- **接口**:`/setting`
- **方法**:GET
- **参数**:无
- **需要登录**:否
- **返回示例**:
```json
{
"code": 200,
"message": "success",
"data": {
"app_name": "多米应用API",
"app_intro": "多米论坛API接口,用于移动应用和第三方应用对接",
"home_fids": "3,10",
"cat_fids": "4,3,10,9,6",
"app_share_cover": "https://demo.discuz.com/data/attachment/common/cover.jpg",
"app_logo": "https://demo.discuz.com/data/attachment/common/logo.png",
"allow_cors": 1,
"jwt_expire": 2592000,
"enable_register": 1,
"enable_captcha": 0,
"token_expiry": 86400,
"list_per_page": 20
},
"timestamp": 1744196685
}
```
## 错误码说明
- 200: 成功
- 400: 请求参数错误
- 401: 未授权(未登录或令牌过期)
- 403: 无权限访问
- 404: 资源不存在
- 500: 服务器内部错误