Pro 功能主题实现指南

本章是独立 Pro 安装包的适配参考,不能用于向免费市场版注入 Pro 服务。主题只消费当前站点实际已启用的能力,授权与业务校验由插件完成。

版本识别

<th:block th:with="info=${knowSphereFinder.getPluginInfo()}">
  <section th:if="${info.pro}">
    <p>这里挂载当前站点已配置的 Pro 模块。</p>
  </section>
</th:block>

pro 不等于每个模块启用。版本切换、授权到期、管理员关闭功能以及空数据都要有兜底。Base 兼容 Finder 可能返回 empty、false 或零值对象;HTTP 端点可能不存在或返回 403,不能一概假定 empty。

高级专栏

基础专栏本身属于 Base。Pro 的学习进度和滴灌状态使用 getUserProgress(columnName) 与 getDripStatus(columnName)。详情为 ColumnDetailVo,章节是 chapters;不要使用未定义的 column.articles 或 chapter.locked。

章节状态、试读和用户已购权益是不同维度。公开列表继续过滤未公开文章;不要自行读文章快照来预告草稿内容。

任务与分销

场景Finder
可用任务 / 我的任务getAvailableTasks() / getMyTasks()
单任务详情getTask(taskName)
当前分销员getDistributorProfile() / isDistributor()
分销统计与设置getDistributorStatistics() / getDistributionSettings()
推广链接 / 二维码getPromotionUrl(productType, productId) / getPromotionQrCode(productType, productId)
佣金 / 团队列表getRecentCommissions(limit) / getTeamMembers(limit)

二维码字段遵循返回合同;不要默认所有 Base64 字符串已经包含 data:image/... 前缀。用户未开通分销时不生成伪造推广码。

评分、评论打赏及其他独立业务

评分使用 getRatingStatistics(contentType, contentName)、getTopRatedContent(limit);评论打赏统计使用 getCommentRewardStatistics(commentName)、batchGetCommentRewardStatistics(commentNames)。零值统计不能用演示收入填充。

商城、多作者、问答和开放 API 的具体接口参照目标 Pro 安装包的 API 合同;本技能附带 main 合同用于对照,不能证明所有端点已在 release 的具体制品启用。不要把后台管理接口直接开放给读者,也不要将 API 管理令牌嵌入前端。

发布前验证

分别测试 Base、Pro 功能关闭、Pro 功能开启、匿名与普通登录用户。保留试读和支付中的状态,支付完成以服务端确认、重新检查权益为准;前端事件本身不能放行内容。

Finder 合同 · HTTP 合同 · 外部服务与授权披露