2.6 KiB
2.6 KiB
2026-03-13 - 文章详情预览规则统一(小程序 + 后端)
场景
- 文章详情页采用「部分内容预览 + 付费解锁全文」的收费模式。
- 历史实现中,预览比例由小程序本地按 20% 行数截取,后端可能同时返回预览与全文两个 content 字段,存在:
- 三端对「预览长度」的理解不一致;
- 前端误用
data.content导致未付费用户拿到全文的潜在风险。
- 本次目标:将「预览长度 + 安全边界」下沉到后端统一控制,小程序只按「是否已解锁」选择展示预览或全文。
团队级决策
- 预览长度统一由 soul-api 控制:
- 当前规则:对付费章节,未解锁用户默认看到正文前 50%,且不少于 100 个字符,末尾追加「购买后阅读完整内容」提示;
- 未来如需改为 40% / 30% 等,只需调整后端
previewContent,前端逻辑保持不变。
- 接口约定统一:
- 章节详情接口(含
/api/miniprogram/book/chapter/:id、/api/miniprogram/book/chapter/by-mid/:mid)返回的:- 外层
content字段, - 内层
data.content(Chapter.Content)字段, - 在同一次响应中必须保持一致:
- 免费或已解锁:两处都是全文;
- 未解锁:两处都是预览(50%)。
- 外层
- 不允许出现「外层是预览、
data.content是全文」这类混合返回,避免前端误用泄露付费内容。
- 章节详情接口(含
- 小程序阅读页约定:
- 只根据
accessState判断是否有权看全文; - 有权限时使用
data.content/content渲染全文; - 无权限时仅使用后端返回的预览内容,不再在前端重新按 20% 行数切割。
- 只根据
影响角色
- 后端工程师(soul-api):
- 负责实现和维护
previewContent预览算法及权限判断逻辑; - 在新增/修改与付费内容相关的接口时,必须遵守「外层 content 与 data.content 一致」的安全约定。
- 负责实现和维护
- 小程序开发工程师:
- 阅读页不自行决定预览比例,只展示后端返回的预览内容;
- 通过
accessManager与章节详情响应判断权限,严格按照accessState切换「预览 / 全文」视图。
对后续迭代的提示
- 若未来引入「增值版内容」「章节试读长度差异化」等新收费形态,优先在后端扩展
previewContent与权限判断逻辑,对前端暴露统一、稳定的字段语义。 - 若管理端需要控制预览比例或提示文案,可在配置中心增加相关配置项,由后端读取后影响
previewContent行为,保持三端一致。