社区私信功能共创邀请——by 南月


Lv.3 优质创作者
大家好,我是南月。
by我自己只是为了说明这个是“非官方”的邀请。
最近在考虑做私信的功能,所以用灵犀搓了个后台服务用于中转消息,不过这样也仅限于使用了我开发的扩展的用户才能使用。
现在社区扩展使用量本就不高,扩展也分散,所以我感觉私信功能开放一个API,大家都接入,相互也能发,这样才能最大化的体现私信的作用。
以下为接口信息:
- 前置说明
执行顺序:
发送消息,调用message_send接口;
获取消息,调用message_receive接口;
扩展获取消息并处理完成后,调用message_receive_confirm接口标记已读,否则下次还会重复获取这些消息。
需要登记客户端名和一段验证用的密钥,32位字母和数字,相符服务端才进行相应处理(不建议公布出来,防止接口被恶意调用)。
消息内容建议限制9999个字符(实际长度65535字节),仅支持纯文本。
服务器带宽有限,消息内容太多可能上传下载的时间会长。
发送POST请求,Params无内容,所有请求都在Body中,使用json格式。
不要在聊天中透漏自己的隐私信息。
- 通用约定
接口地址:https://wpsbbsplus.sthmoon.com/api/
2.1 鉴权
除鉴权失败外,每个请求必须携带以下两个字段:
字段 | 类型 | 必填 | 说明 |
client_name | string | 是 | 客户端名,最长 50 字符,须与数据库 clients.client 一致 |
secret_key | string | 是 | 密钥,固定 32 位,须与数据库 clients.secret_key 一致 |
服务端在进入任何业务逻辑前先校验客户端名与密钥,不匹配直接返回:
{ "server_time": "2026-09-04 12:00:00", "result": "01", "message": "密钥验证不通过" }缺少任一字段返回 "message": "缺少客户端名或密钥"。
2.2 统一响应结构
字段 | 类型 | 说明 |
server_time | string | 服务器时间,固定 19 字符,格式 yyyy-MM-dd HH:mm:ss |
result | string | 固定 2 位,00 成功,其他为失败 |
message | string | 成功时为空字符串,失败时为具体错误信息 |
消息、活动查询接口在统一结构上额外附带业务字段(见各接口说明)。
2.3 通用校验规则
规则 | 说明 |
UID 类字段 | 非空,最长 10 字符 |
日期时间字段 | 格式固定 yyyy-MM-dd HH:mm:ss(如 2026-09-04 12:00:00),解析失败即拒绝 |
文本长度 | 「消息内容」「奖品奖项」按 UTF-8 字节数校验,最长 65535 字节;其余按字符数校验 |
失败处理 | 校验失败时不进行任何数据库操作,直接返回 result=01 与错误信息 |
3.私信聊天
3.1 message_send — 私信发送
服务端接收并保存私信,内容为纯文本,明文入库,已接收 置 0。
请求
字段 | 类型 | 必填 | 说明 |
client_name | string | 是 | 见通用约定 |
secret_key | string | 是 | 见通用约定 |
sender_uid | string | 是 | 发送者UID,最长 10 字符 |
receiver_uid | string | 是 | 接收者UID,最长 10 字符 |
message_time | string | 是 | 消息日期,yyyy-MM-dd HH:mm:ss |
content | string | 是 | 消息内容,UTF-8 最长 65535 字节 |
请求示例
{
"client_name": "wpsbbs-extension",
"secret_key": "0123456789abcdef0123456789abcdef",
"sender_uid": "10001",
"receiver_uid": "10002",
"message_time": "2026-09-04 12:00:00",
"content": "你好,这是一条测试消息"
}响应:统一结构。成功示例:
{ "server_time": "2026-09-04 12:00:01", "result": "00", "message": "" }错误分支
message | 触发条件 |
发送者UID不能为空 / 接收者UID不能为空 | UID 缺失 |
发送者UID最长10位 / 接收者UID最长10位 | UID 超长 |
消息日期格式应为 yyyy-MM-dd HH:mm:ss | 日期不合法 |
消息内容超过65535字节限制 | 内容超长 |
3.2 message_receive — 私信接收
查询指定接收者的未接收消息(已接收=0),此操作只读,不改变消息状态。
请求
字段 | 类型 | 必填 | 说明 |
client_name | string | 是 | 见通用约定 |
secret_key | string | 是 | 见通用约定 |
receiver_uid | string | 是 | 接收者UID,最长 10 字符 |
响应:统一结构 + messages 数组。
字段 | 类型 | 说明 |
messages | array | 消息列表,无未读消息时为空数组 |
messages[].message_id | int | 数据库消息 ID,确认已读时回传 |
messages[].sender_uid | string | 发送者UID |
messages[].message_time | string | 消息日期,yyyy-MM-dd HH:mm:ss |
messages[].content | string | 消息内容 |
响应示例
{
"server_time": "2026-09-04 12:00:02",
"result": "00",
"message": "",
"messages": [
{ "message_id": 1, "sender_uid": "10001", "message_time": "2026-09-04 12:00:00", "content": "你好" }
]
}3.3 message_receive_confirm — 已读确认
将消息标记为已接收。服务端先对整批消息做全量校验,任何一条不匹配则整批拒绝、一条都不标记;全部通过后在单个事务中标记。
请求
字段 | 类型 | 必填 | 说明 |
client_name | string | 是 | 见通用约定 |
secret_key | string | 是 | 见通用约定 |
messages | array | 是 | 已读的消息列表,不能为空 |
messages[].message_id | int | 是 | 消息 ID |
messages[].receiver_uid | string | 是 | 接收者UID,必须与该消息实际接收者一致 |
请求示例
{
"client_name": "wpsbbs-extension",
"secret_key": "0123456789abcdef0123456789abcdef",
"messages": [
{ "message_id": 1, "receiver_uid": "10002" },
{ "message_id": 2, "receiver_uid": "10002" }
]
}响应:统一结构。
错误分支
message | 触发条件 |
已读的消息不能为空 | messages 为空或缺失 |
消息ID x 不存在 | 任一消息 ID 不存在(整批拒绝) |
消息ID x 与接收者UID不匹配 | 任一 receiver_uid 与消息实际接收者不一致(整批拒绝) |
@金山办公
Lv.1 新人创作者
Lv.3 优质创作者
Lv.3 优质创作者
Lv.3 优质创作者
Lv.4 核心创作者
Lv.3 优质创作者
Lv.3 优质创作者
Lv.3 优质创作者
Lv.3 优质创作者
Lv.2潜力创作者
Lv.3 优质创作者
Lv.3 优质创作者
Lv.3 优质创作者