Skip to content

论坛评论回复接口

用于用户在指定帖子下回复某条评论,支持动态身份验证(令牌启用时通过token验证,令牌未启用时通过user+pass验证),包含防频繁回复机制,且根据板块配置决定回复是否需要审核,同时记录回复与被回复用户的关联信息。

请求地址 GET / POST

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

请求参数

参数名位置类型必选说明
appidquerystring✅ 是应用唯一标识,从开发者中心获取
uidquerystring✅ 是板块ID,帖子所属板块的唯一标识
pidquerystring✅ 是帖子ID,被回复评论所属的帖子唯一标识
idquerystring✅ 是评论ID,被回复的目标评论唯一标识
usersquerystring✅ 是被回复用户名,需回复的用户账号
contentquerystring✅ 是回复内容,不可为空
signaturequerystring✅ 是应用签名,与后台配置一致,用于验证请求合法性
tokenquerystring条件必选用户令牌,仅令牌启用时需传递,需绑定当前应用和开发者
userquerystring条件必选用户账号,仅令牌未启用时需传递
passquerystring条件必选用户密码,仅令牌未启用时需传递

返回示例

成功响应(回复成功)

json
{
  "code": 200,
  "msg": "success",
  "data": "回复成功"
}

失败响应(参数问题)

json
{
  "code": 204,
  "msg": "fail",
  "data": "接口参数错误:缺少pid"
}
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": 404,
  "msg": "fail",
  "data": "请勿回复自己的评论!"
}
json
{
  "code": 405,
  "msg": "fail",
  "data": "评论频繁:请于15秒后再评论!"
}
json
{
  "code": 405,
  "msg": "fail",
  "data": "账号长度需在5-20字符之间"
}

失败响应(状态/资源异常)

json
{
  "code": 407,
  "msg": "fail",
  "data": "被回复的评论不存在!"
}
json
{
  "code": 404,
  "msg": "fail",
  "data": "帖子审核中!"
}
json
{
  "code": 404,
  "msg": "fail",
  "data": "开发者账号已逾期(1天),请缴费后重试!"
}

返回数据结构

参数名类型说明
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",
  pid: "帖子ID",
  id: "被回复的评论ID",
  users: "被回复的用户名",
  content: "针对你的观点,我补充一点...", // 回复内容
  token: "valid_user_token", // 当前用户有效令牌
  signature: "your_signature"
});

fetch("https://nobase.cn/api/bbs/comment_reply", {
  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/comment_reply");
url.searchParams.set("appid", "your_app_id");
url.searchParams.set("uid", "板块ID");
url.searchParams.set("pid", "帖子ID");
url.searchParams.set("id", "被回复的评论ID");
url.searchParams.set("users", "被回复的用户名");
url.searchParams.set("content", "我也遇到过类似问题,解决方案是...");
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",
    "pid": "帖子ID",
    "id": "被回复的评论ID",
    "users": "被回复的用户名",
    "content": "同意你的看法,补充一点细节...",
    "token": "valid_user_token",
    "signature": "your_signature"
}

response = requests.post(
    "https://nobase.cn/api/bbs/comment_reply",
    data=params,
    timeout=8
)
res_data = response.json()
print("回复结果:", res_data["data"])
python
import requests

# 令牌未启用时回复评论
params = {
    "appid": "your_app_id",
    "uid": "板块ID",
    "pid": "帖子ID",
    "id": "被回复的评论ID",
    "users": "被回复的用户名",
    "content": "请问这个问题你后来解决了吗?",
    "user": "当前用户账号",
    "pass": "当前用户密码",
    "signature": "your_signature"
}

response = requests.get(
    "https://nobase.cn/api/bbs/comment_reply",
    params=params,
    timeout=8
)
print(response.json())

核心逻辑说明

1. 身份验证模式

模式验证流程关键限制
令牌启用1. 校验token存在性;
2. 验证token归属当前应用和开发者;
3. 获取当前用户信息。
token无效/过期/不匹配当前应用,返回401错误。
令牌未启用1. 校验userpass存在性;
2. 验证当前用户存在性及密码正确性;
3. 获取用户信息。
当前用户未注册返回404,密码错误返回404。

2. 业务校验规则

  • 资源存在性
    - 板块(uid)、帖子(pid)、被回复评论(id)、被回复用户(users)必须存在,否则返回对应“不存在”错误;
    - 应用配置、开发者账号、当前用户账号、用户配置必须存在且匹配,否则返回对应错误;
  • 操作权限
    - 板块需允许评论(commentpost=1),否则返回“该板块不允许帖子评论”;
    - 应用不可处于“停用”或“审核中”状态,帖子不可处于“审核中”或“审核失败”状态,否则返回对应提示;
    - 开发者账号、当前用户账号、被回复用户账号需正常启用(状态为“正常”),否则返回“状态异常”;
    - 禁止回复自己的评论(被回复用户名=当前用户名时返回“请勿回复自己的评论!”);
  • 内容限制
    - content(回复内容)不可为空,否则返回参数缺失错误;
    - 当前用户账号长度需在配置范围内(最短-最长字符),否则返回长度校验失败;
  • 防频繁操作:60秒内同一用户不可重复回复(含评论),否则返回“评论频繁:请于XX秒后再评论!”(XX为剩余限制时间);
  • VIP校验:开发者VIP未逾期,否则返回逾期提示(如“已逾期(1天),请缴费后重试!”)。

3. 回复逻辑

  • 回复状态:根据板块配置的审核要求(comment=1)决定:
    - 若板块评论需审核,回复状态设为“待审核”(state=3);
    - 若板块评论无需审核,回复状态设为“直接发布”(state=4);
  • 数据关联:回复数据同时记录当前用户与被回复用户的关联信息:
    - 当前用户信息:头像(icon)、用户名(username)、昵称(nickname)、IP(ip);
    - 被回复用户信息:头像(icons)、用户名(usernames)、昵称(nicknames)、被回复评论的IP(ips);
    - 其他信息:所属帖子ID(sid=pid)、回复内容、回复时间、开发者标识等;
  • 操作记录:回复成功后记录当前时间到session,用于防频繁操作校验;
  • 结果响应:数据库插入成功返回“回复成功”,失败返回“回复失败”。

注意事项

  1. 参数规范

    • 核心参数需严格匹配:pid(帖子ID)需属于uid(板块ID),id(被回复评论ID)需属于pid(帖子ID),users(被回复用户名)需为id对应评论的作者,否则会触发“不存在”错误;
    • content不可为空或仅含空白字符,建议前端限制最小长度(如5字符),避免无效回复;
    • 两种验证模式的参数不可混用(如令牌启用时无需传user+pass)。
  2. 防刷机制

    • 接口通过session统一限制“评论”和“回复”操作(60秒间隔),即评论后60秒内不可回复,回复后60秒内不可再评论/回复;
    • 前端可根据返回的“请于XX秒后再评论!”提示,显示倒计时(XX为剩余秒数),提升用户体验。
  3. 关联展示

    • 回复数据中包含被回复用户的头像、昵称等信息,前端可通过这些字段实现“@用户名”样式的关联展示(如“回复 @被回复昵称:内容”);
    • 若需区分“评论”和“回复”,可通过是否存在usernames(被回复用户名)字段判断(非空为回复,空为评论)。
  4. 安全建议

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

    • 回复成功后,可调用“帖子评论列表接口”刷新数据,实时展示最新回复;
    • 若需实现“回复通知”功能,可在回复插入成功后,额外调用消息推送接口(需单独实现)。