Skip to content

论坛发帖接口

用于用户在指定板块发布新帖子,支持动态身份验证(令牌启用时通过token验证,令牌未启用时通过user+pass验证),包含防频繁发帖机制,且根据板块配置决定帖子是否需要审核。

请求地址 GET / POST

http
https://nobase.cn/api/bbs/post_publish

请求参数

参数名位置类型必选说明
appidquerystring✅ 是应用唯一标识,从开发者中心获取
uidquerystring✅ 是板块ID,帖子发布的目标板块唯一标识
titlequerystring✅ 是帖子标题,不可为空
contentquerystring✅ 是帖子内容,不可为空
signaturequerystring✅ 是应用签名,与后台配置一致,用于验证请求合法性
otherquerystring❌ 否附加信息,可选参数(如扩展字段)
labelquerystring❌ 否帖子标签,可选参数
classquerystring❌ 否帖子分类,可选参数(需与板块分类配置匹配)
tokenquerystring条件必选用户令牌,仅令牌启用时需传递,需绑定当前应用和开发者
userquerystring条件必选用户账号,仅令牌未启用时需传递
passquerystring条件必选用户密码,仅令牌未启用时需传递

返回示例

成功响应(发布成功)

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": "该板块不存在!"
}

返回数据结构

参数名类型说明
codenumber状态码:200=发布成功;204=参数缺失/错误;400=应用配置错误;401=token无效;402=签名失败;404=资源不存在/状态异常(如板块不存在、账号状态异常);405=权限不足/业务限制(如禁止发帖、频繁发帖);407=板块不存在
msgstring状态描述:success=成功,fail=失败
datastring响应数据:操作结果提示或错误原因,如“发布成功”“该板块不允许发帖”

代码示例

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. 校验userpass存在性;
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,用于防频繁发帖校验;
  • 结果响应:数据库插入成功返回“发布成功”,失败返回“发布失败”。

注意事项

  1. 参数规范

    • titlecontent为核心必填参数,不可为空或仅含空白字符;
    • label(标签)和class(分类)需符合板块配置规则(如标签用逗号分隔);
    • 两种验证模式的参数不可混用(如令牌启用时无需传user+pass)。
  2. 防刷机制

    • 接口通过session记录用户最近发帖时间,60秒内禁止重复发帖,前端可添加倒计时提示;
    • 频繁触发限制可能导致临时封禁(需额外逻辑支持),建议前端添加操作间隔提示。
  3. 审核说明

    • 发布到“需审核”板块的帖子,需等待版主审核通过后才会公开可见;
    • 发布到“无需审核”板块的帖子,发布后实时可见。
  4. 安全建议

    • 令牌未启用时,pass以明文传递,生产环境必须使用HTTPS协议;
    • 优先使用“令牌启用”模式,减少账号密码暴露风险;
    • 前端需对titlecontent进行内容过滤(如敏感词检测),避免发布违规内容。
  5. 业务扩展

    • other字段可用于存储扩展信息(如附件ID、地理位置等),需根据实际业务定义格式;
    • 帖子发布成功后,可通过“帖子详情接口”获取完整信息(需单独实现)。