XIUNOX 应用市场上架指南

开发者入驻 · 应用发布 · 审核规范 · 版本更新
版本2.1 适用xnx_appcenter 1.15.0+ / XIUNOX 1.1 更新2026-08-05

1开发者入驻流程

访问 /appcenter-developer-edit.htm 提交资料,管理员审核通过后才能发布应用。校验入口 AppCenterService::checkPublishPrerequisite()

1.1 必填字段

字段校验规则说明
intro必填,≤1000 字开发者简介
contact_qq必填主联系方式
contact_email / contact_wechat / contact_phone3 选 1 必填备用联系方式
brand_prefix正则 ^[a-zA-Z]{5,}_[a-zA-Z]*$5+ 字母开头 + 下划线;禁用 xn/xnx/xiuno/xiunox
official_domainURL,自动补 https://开发者主页
portfolio_tid_1/2/3必须是本人发布在作品版块(后台可配置 fid)且审核通过的帖子3 个不同的作品帖子
agreement_agree必须为 1协议需滚动到底 + 10 秒倒计时后才能勾选

1.2 审核流程

2应用发布字段规范

发布入口 /appcenter-publish.htm,POST 到 route/appcenter.php publish action。

2.1 字段全表

字段必填校验规则
name≤9 字符
slug3–50 字符,必须以 brand_prefix 开头,全局唯一,发布后不可改
brief≤50 字
category后台预设分类(plugin/template/extension)
tag_keys[]1–2 个功能标签
descriptionAIEditor 富文本,纯文本 ≥100 字
icon_tmp_key应用图标
screenshot_tmp_keys[]至少 1 张截图
applicable_version1.0 或 1.1
price_modev1.15.29 起三选一:free=免费 / credits=积分兑换 / cash=现金付费
price_type底层字段,由 price_mode 自动映射(free=0 / credits=1 / cash=1)
download_type底层字段,由 price_mode 自动绑定(free/credits=1 官方市场 / cash=2 自托管),不可手动切换
price_credits_typecredits 时必填credits/golds(不含 rmbs,rmbs 已由 cash 模式专属)
price_amountcredits/cash 时必填max_price 上限限制;cash 模式另要求 ≥1 元
external_urlcash 时必填≤255 字符,站外下载地址,域名需与开发者「官方网站」一致
version首版本号
version_download_tmp_key首版本下载包(dt=1 时必填)
guide_read / scan_passed两个声明,必须为 1

2.2 上架前自检

3应用状态机与审核流程

应用 status 字段共 4 个状态。

3.1 状态定义

含义可见性
0待审核仅作者 + 管理员
1已发布所有人可见可下载
2审核未通过仅作者,reject_reason 必填
3已下架仅作者,reject_reason 必填

3.2 状态转换

当前可转到触发入口
0 待审1 通过 / 2 拒绝后台 audit_app
1 已发布3 下架后台 audit_app(reason 必填)
3 已下架1 重新上架 / 0 退回审核后台 republish_app / return_audit
任意0 待审编辑提交(need_audit=true 或上传新版本强制回审)

3.3 审核通过自动发帖

forum_fid > 0 且 status 变为 1 时,updateAppStatus() 自动发帖:

发帖人固定为应用作者 $app['uid'],走 thread_create() 并传 skip_attach_assoc=true

4版本更新与自动发帖

v1.15.0 起两个入口逻辑统一:上传新版本安装包后版本号和更新日志必填,提交后强制回审,审核通过后自动发"更新帖"。

4.1 入口对比

入口必填字段回审发帖
编辑页"上传新版本"上传包后:version_new + version_changelog审核通过后发更新帖
详情页"添加新版本"version + changelog + 下载包审核通过后发更新帖
编辑页"单纯编辑(不上传包)"无新版本字段取决于 need_audit不发帖
审核驳回修改无新版本字段取决于 need_audit 或 status=3不发帖

4.2 数据存储

设计原则:触发"上传新版本"流程的唯一标志是 version_download_tmp_key 非空(上传了安装包),不是 version_new 非空。只填版本号不上传包,会走"单纯编辑"分支被静默忽略。

5现金付费模式(自托管 download_type=2)

v1.15.29 起,自托管模式专用于「现金付费」:用户在开发者自己站点用人民币购买下载,平台不参与收款。下载时直接 302 跳转开发者提供的 external_url,不走站内购买流程。

5.1 约束

5.2 下载按钮确认弹窗

场景对应价格模式弹窗颜色标题关键条款
免费应用下载免费 (free)蓝色⛑️ 安装前友情提示个人维护、无深度安全检测、引导反馈
站内积分购买积分兑换 (credits)黄色💰 虚拟商品购买确认积分即扣、概不退回、3 秒倒计时锁定按钮
跳转外站下载现金付费 (cash)红色🚨 即将离开本站在开发者站点用现金购买,平台不参与收款、不抽成、概不退费,风险自担

6价格、抽成与下载权限

6.1 价格模式三选一(v1.15.29)

详细填写指南见 plugin/xnx_appcenter/docs/price_guide.md

价格模式下载方式扣费渠道谁收款适用场景
免费 (free)官方应用市场完全免费分享
积分兑换 (credits)官方应用市场站内积分(金币/经验等)平台积分体系站内积分购买,平台内闭环
现金付费 (cash)开发者自托管人民币(元)开发者自己站点开发者站点收款,用户去开发者站点购买下载

6.2 价格字段(底层映射)

6.3 后台配置

6.4 收益流水

bbs_xnx_appcenter_earnings 表记录每笔购买:order_amount / developer_income / system_fee / commission_rate仅积分兑换模式产生流水(站内积分扣费抽成),现金付费不在此表记录(开发者自行收款)。

6.5 下载权限

6.6 存量数据迁移

v1.15.29 前存量应用编辑时映射规则:

旧组合新模式映射处理方式
免费 + 官方市场免费自动映射
付费 + 官方市场 + 积分类型积分兑换自动映射
付费 + 官方市场 + 人民币(rmbs)⚠️ 需手动选择编辑时显示迁移提示,开发者手动选「积分兑换」或「现金付费」
付费 + 自托管 + 人民币(rmbs)现金付费自动映射

7代码规范与踩坑速查

所有上架插件必须遵守。详细规则见 .trae/rules/project_rules.mdbugfix_rules.md

7.1 插件结构

7.2 Hook 规范(高频踩坑)

禁止在 hook 文件中使用 return;:会从宿主函数/路由/模板返回,跳过后续逻辑。违规 5 次导致严重 bug。终止性 exit 需用 if 包裹并加 ponytail: 注释。闭包内 return 合法。
hook 注释禁止 // hook xxx 格式:编译器正则误匹配为 hook 占位符,多趟编译重复拼接导致 ParseError。改用 // hook: xxx// xxx。违规 2 次。

7.3 安全 API

7.4 缓存与编译

修改 _include() 文件后必须清 tmp/ 编译缓存:route/model/view/htm/lang 都通过 _include() 加载,编译缓存命名规则为完整路径的 / 替换为 __include() 只检查 tmpfile 是否存在,不比较源文件修改时间。违规 3 次。
PHP 8+ 中 @ 错误抑制符不捕获 Error:被 disable_functions 禁用的内置函数(chmod/mkdir/touch 等)调用会抛 Error 终止脚本,nginx 返回 502。必须用 function_exists('xxx') 守卫包裹。

7.5 数据与 SQL

7.6 前端与 htmx

7.7 其他常见陷阱

8上架前自检清单

提交应用前逐项核对,"必检"项不通过直接拒绝上架。

8.1 文件结构

8.2 安全

8.3 Hook

8.4 缓存与编译

8.5 前端

8.6 数据