Appearance
论坛发帖接口
用于用户在指定板块发布新帖子,支持动态身份验证(令牌启用时通过token验证,令牌未启用时通过user+pass验证),包含防频繁发帖机制,且根据板块配置决定帖子是否需要审核。
请求地址 GET / POST
http
https://nobase.cn/api/bbs/post_publish请求参数
| 参数名 | 位置 | 类型 | 必选 | 说明 |
|---|---|---|---|---|
| appid | query | string | ✅ 是 | 应用唯一标识,从开发者中心获取 |
| uid | query | string | ✅ 是 | 板块ID,帖子发布的目标板块唯一标识 |
| title | query | string | ✅ 是 | 帖子标题,不可为空 |
| content | query | string | ✅ 是 | 帖子内容,不可为空 |
| signature | query | string | ✅ 是 | 应用签名,与后台配置一致,用于验证请求合法性 |
| other | query | string | ❌ 否 | 附加信息,可选参数(如扩展字段) |
| label | query | string | ❌ 否 | 帖子标签,可选参数 |
| class | query | string | ❌ 否 | 帖子分类,可选参数(需与板块分类配置匹配) |
| token | query | string | 条件必选 | 用户令牌,仅令牌启用时需传递,需绑定当前应用和开发者 |
| user | query | string | 条件必选 | 用户账号,仅令牌未启用时需传递 |
| pass | query | string | 条件必选 | 用户密码,仅令牌未启用时需传递 |
返回示例
成功响应(发布成功)
json
{
"code": 200,
"msg": "success",
"data": "发布成功"
}失败响应(参数问题)
json
{
"code": 204,
"msg": "fail",
"data": "接口参数错误:缺少title"
}json
{
"code": 204,
"msg": "fail",
"data": "接口参数错误:令牌启用需传token!"
}失败响应(身份验证异常)
json
{
"code": 401,
"msg": "fail",
"data": "token无效或已过期(非当前应用/开发者)!"
}json
{
"code": 404,
"msg": "fail",
"data": "用户账号密码错误!"
}失败响应(权限/业务限制)
json
{
"code": 404,
"msg": "fail",
"data": "该板块不允许发帖"
}json
{
"code": 405,
"msg": "fail",
"data": "发帖频繁:请稍后再发帖!"
}json
{
"code": 405,
"msg": "fail",
"data": "账号长度需在6-18字符之间"
}失败响应(状态/配置异常)
json
{
"code": 404,
"msg": "fail",
"data": "应用审核中!"
}json
{
"code": 404,
"msg": "fail",
"data": "开发者账号已逾期(1小时),请缴费后重试!"
}json
{
"code": 407,
"msg": "fail",
"data": "该板块不存在!"
}返回数据结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | number | 状态码:200=发布成功;204=参数缺失/错误;400=应用配置错误;401=token无效;402=签名失败;404=资源不存在/状态异常(如板块不存在、账号状态异常);405=权限不足/业务限制(如禁止发帖、频繁发帖);407=板块不存在 |
| msg | string | 状态描述:success=成功,fail=失败 |
| data | string | 响应数据:操作结果提示或错误原因,如“发布成功”“该板块不允许发帖” |
代码示例
javascript
// 令牌启用时发布帖子
const params = new URLSearchParams({
appid: "your_app_id",
uid: "目标板块ID",
title: "帖子标题",
content: "帖子内容...",
label: "技术,分享", // 可选标签
class: "教程", // 可选分类
token: "valid_user_token", // 用户有效令牌
signature: "your_signature"
});
fetch("https://nobase.cn/api/bbs/post_publish", {
method: "POST",
body: params,
headers: { "Content-Type": "application/x-www-form-urlencoded" }
})
.then(res => res.json())
.then(res => {
if (res.code === 200) {
console.log("发布结果:", res.data);
// 跳转到帖子详情页等后续操作
} else {
console.error("发布失败:", res.data);
}
});javascript
// 令牌未启用时发布帖子
const url = new URL("https://nobase.cn/api/bbs/post_publish");
url.searchParams.set("appid", "your_app_id");
url.searchParams.set("uid", "目标板块ID");
url.searchParams.set("title", "新帖子标题");
url.searchParams.set("content", "帖子内容详情...");
url.searchParams.set("other", "附加信息"); // 可选
url.searchParams.set("user", "用户账号");
url.searchParams.set("pass", "用户密码");
url.searchParams.set("signature", "your_signature");
fetch(url.toString())
.then(res => res.json())
.then(res => {
res.code === 200
? console.log("发布成功:", res.data)
: console.error("错误:", res.data);
});python
import requests
# 令牌启用时发布帖子
params = {
"appid": "your_app_id",
"uid": "板块ID",
"title": "Python教程分享",
"content": "这是一篇关于Python基础的教程...",
"label": "Python,教程",
"token": "valid_user_token",
"signature": "your_signature"
}
response = requests.post(
"https://nobase.cn/api/bbs/post_publish",
data=params,
timeout=8
)
res_data = response.json()
print("发布结果:", res_data["data"])python
import requests
# 令牌未启用时发布帖子
params = {
"appid": "your_app_id",
"uid": "板块ID",
"title": "日常分享",
"content": "今天天气不错...",
"class": "生活",
"user": "用户账号",
"pass": "用户密码",
"signature": "your_signature"
}
response = requests.get(
"https://nobase.cn/api/bbs/post_publish",
params=params,
timeout=8
)
print(response.json())核心逻辑说明
1. 身份验证模式
| 模式 | 验证流程 | 关键限制 |
|---|---|---|
| 令牌启用 | 1. 校验token存在性;2. 验证 token归属当前应用和开发者;3. 获取用户信息。 | token无效/过期/不匹配当前应用,返回401错误。 |
| 令牌未启用 | 1. 校验user和pass存在性;2. 验证用户存在性及密码正确性; 3. 获取用户信息。 | 用户未注册返回404,密码错误返回404。 |
2. 业务校验规则
- 资源存在性:
- 板块(uid)必须存在,否则返回“该板块不存在!”;
- 应用配置、开发者账号、用户账号、用户配置必须存在且匹配,否则返回对应错误; - 发帖权限:
- 板块需允许发帖(exampost=1),否则返回“该板块不允许发帖”;
- 应用不可处于“停用”或“审核中”状态,否则返回对应提示;
- 开发者账号、用户账号需正常启用(状态为“正常”),否则返回“状态异常”; - 内容限制:
-title(标题)和content(内容)不可为空,否则返回参数缺失错误;
- 用户账号长度需在配置范围内(最短-最长字符),否则返回长度校验失败; - 防频繁操作:60秒内同一用户不可重复发帖,否则返回“发帖频繁:请稍后再发帖!”;
- VIP校验:开发者VIP未逾期,否则返回逾期提示(如“已逾期(1小时),请缴费后重试!”)。
3. 发帖逻辑
- 帖子状态:根据板块配置的审核要求(
examine)决定:
- 若板块需审核(examine=1),帖子状态设为“待审核”(state=3);
- 若板块无需审核(examine≠1),帖子状态设为“直接发布”(state=4); - 数据存储:插入帖子数据包括:板块ID、用户信息(用户名、头像、昵称)、标题、内容、标签、分类、附加信息、发布时间、IP地址、状态等;
- 操作记录:发布成功后记录当前时间到session,用于防频繁发帖校验;
- 结果响应:数据库插入成功返回“发布成功”,失败返回“发布失败”。
注意事项
参数规范
title和content为核心必填参数,不可为空或仅含空白字符;label(标签)和class(分类)需符合板块配置规则(如标签用逗号分隔);- 两种验证模式的参数不可混用(如令牌启用时无需传
user+pass)。
防刷机制
- 接口通过session记录用户最近发帖时间,60秒内禁止重复发帖,前端可添加倒计时提示;
- 频繁触发限制可能导致临时封禁(需额外逻辑支持),建议前端添加操作间隔提示。
审核说明
- 发布到“需审核”板块的帖子,需等待版主审核通过后才会公开可见;
- 发布到“无需审核”板块的帖子,发布后实时可见。
安全建议
- 令牌未启用时,
pass以明文传递,生产环境必须使用HTTPS协议; - 优先使用“令牌启用”模式,减少账号密码暴露风险;
- 前端需对
title和content进行内容过滤(如敏感词检测),避免发布违规内容。
- 令牌未启用时,
业务扩展
other字段可用于存储扩展信息(如附件ID、地理位置等),需根据实际业务定义格式;- 帖子发布成功后,可通过“帖子详情接口”获取完整信息(需单独实现)。

