发布应用
Z-Blog 官方搭建的 Z-Blog 应用中心 为广大 Z-Blog 使用者和开发者提供了主题和插件的大本营,提供免费与收费的 Z-Blog 主题、模板和插件的下载。
任何希望为 Z-Blog 做贡献的开发者都可以免费加入应用中心,发布自己的应用供所有用户使用。为了保持应用中心应用质量,我们制定了一些应用上架的基本要求,在您的应用符合相应标准后即可发布到应用中心。
成为开发者
请在「Z-Blog 开发者社区」发帖申请,完成入驻操作。
审核通过后给予开发者权限,之后可上传应用到「应用中心」。
注:后续应用实行上传后审核发布。
开发者申请流程(点击展开)
Z-Blog 全新的应用中心,为众多开发者提供一个展示自己作品的平台。
前置要求
依据《中华人民共和国网络安全法》的要求,同时为了能尽快通知到您,您必须:
- 绑定手机号,以完成实名认证要求:https://user.zblogcn.com/user/security/phone
- 绑定微信号,以及时获取审核消息:https://user.zblogcn.com/user/open/wechat_mp
- 提交您的身份证号,完成实名认证:https://user.zblogcn.com/user/identity
- 「可选」开启"两步验证",https://user.zblogcn.com/user/security/tfa/google
如果您需要销售收费应用,则需要:
- 绑定您的支付宝,以获取收款:https://user.zblogcn.com/user/open/alipay
申请流程
按照以下步骤进行申请:
- 为节省时间,请先参照「注意事项速查表」进行自查;
- 「可选」基本的
README.md说明,如需附图可放在docs/目录内或者使用外链;① - 在 Z-Blog 开发者社区发布一篇介绍文章,并附上代码仓库地址(推荐使用国内平台,如 CNB);
- 根据审核员的反馈意见逐条修改,并在社区帖子中更新;每次更新后附上修改记录(Changelog),方便审核员跟踪进度。「会写更新记录很重要」
- 加 QQ 群,积极询问进度;「QQ 群:983356584」
①:还是建议外链,docs/ 感觉打包进 .zba 不是很必要,虽然可以用 zbignore.txt 排除;
审核流程
- 在 Z-Blog 开发者社区提交应用后,会有审核员进行审核,并及时反馈审核意见,如有疑问可在 QQ 群沟通。
发布标准
推荐阅读:注意事项速查表
发布标准详情(点击展开)
A.通用
- 开启 debug 模式后不得报错
- 不得含有木马等有害代码
- 不得含有任何被加密的 PHP(含 Z5 加密),只能由应用中心服务器端加密
- PHP 文件应保存为 UTF-8 no BOM 编码;
- 不得有安全漏洞(包括 SQL 注入、跨站脚本攻击、跨站请求伪造等)
- 不得引用外站资源(尤其是小站资源)
- 自动审核内容里不得有黄色提示(使用较老旧版本的 js 等)
- 不得以免费为饵跳过"应用中心支付系统"搞"内置收费"(微博、微信、支付宝等支付/社交系统或其它功能 API 必须收费的除外)
- 不得有免费或低价诱导后续高消费、明显高于市场定价等不良意图,或违反公序良俗
- 不得修改保存系统源码或是系统默认语言包
B.主题
- 主题里没有 zblog 版权
- 自动审核后的截图出现错位等异常情况
- 标题等长度过长不会导致变形
- 摘要中的空格被错误移除
- ul,ol,li,blockquote 等 HTML 元素样式有误
- 需要提供配置的地方没有可配置的页面
- 评论层级不对
C.插件
- 数据库表和 Class 未使用 zbp 标准数据库创建操作规范
- 数据库操作未使用链式对象等系统自带操作,而自行拼接 SQL 代码
- 在应该用 $zbp→CheckRights 判断权限的地方,用简单的 $zbp→User→Level 去判断
D.上传后的应用发布内容
- 缺少前台展示截图(如有前台展示的话)
- 缺少后台截图(如有后台配置的话)
- 缺少基本的(或详细)使用说明和功能介绍
E.禁止条款
- 禁止抄袭复制有版权保护的主题模板
- 禁止多次提交无意义的应用去刷新排行
应用加密说明
Z5加密 是由 Z-Blog 应用中心推出的 PHP 加密方案,也是 「Z-Blog 应用中心」 唯一支持的加密方案。为确保用户权益,仅 Z5 加密后的文件可上架到应用中心,非 Z5 加密的应用代码必须以明文形式提交上架。
Z5加密 相关介绍内容详见:https://z5encrypt.com/docs/
使用说明见:https://z5encrypt.com/docs/usage/
应用验证
为保证开发者利益,应用中心提供应用购买验证系统用于验证用户使用应用的合法性。应用验证系统与应用中心独立,即使应用中心网站无法访问,也不影响应用验证系统的正常运行。
开发者应用验证调用
新版本 V2 验证
仅提供 PHP 版本代码,请在应用中心网站后台 → 开发者工具 → 验证代码处获得。
添加指南
- 添加在
InstallPlugin函数中,实现启用插件时自动验证。 - 需要运行某些速度慢的功能时,如批量发邮件等,可在这之前进行验证。
建议配合 Z5 加密使用。
不正确行为
- 验证因需要连接服务器,会严重影响页面访问速度。因此,不允许在模板的浏览页等地方插入这部分代码。
- 即使验证不通过,也不允许对用户的数据进行任何意义上的破坏。
应用验证回调
验证服务端
验证系统会对验证结果加密后,通知到开发者设置的回调地址。HTTP 方法为 POST,Content-Type 为 application/zblogverify。
Body 的加密方式为:RSA(base64(AES_KEY) + '.' + base64(AES_IV) + '.' + HS256(realData) + '.' + timestamp) + '.' + AES(realData)
RSA 公钥和 HMAC-SHA256 密钥见示例代码。
明文数据格式
{
"id": "65fbe736-aa01-4d60-946a-64da5e1bccd7", /* 本次校验的唯一ID,每一次校验返回值都不同 */
"from": "initiative", /* 校验来源 */
"error": {
"number": 0, /* 错误编号 */
"message": "OK", /* 错误信息 */
"verified": true, /* 是否验证成功 */
"cracking": false, /* 疑似破解 */
"user": {
"message": "面向用户的错误信息"
}
},
"appId": "应用ID",
"host": "网站",
"user": {
"id": "应用中心ID",
"username": "用户账号"
},
"modified": "应用最后修改日期(时间戳)",
"license": {
"appId": "授权文件保存的应用ID",
"userId": "授权文件保存的用户ID",
"timestamp": "授权文件生成时间戳"
}
}示例代码(PHP)
以下代码仅能运行于 PHP 5.3+。请注意,以下代码不对重放攻击做出保证,在入库前请先确认 ID 是否唯一。
<?php
function getVerifyData($data) {
$publicKey = openssl_pkey_get_public('-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoH4uiMZYWy1sOXuq4YAA
MtyrAtUcWHOXalSAmtDs1FA2H8fTBbEF+gnvg83Byp/mIvHMIaXc7RPIniwoMgDo
Xo3H0GquBEOH4YoufIqfRFGFwnBw7V1KNv9Iw4XpmBYEboD5HT4PLuoUvSP78iWK
7kMMsYsYOVi7EPn8DbPZbvxnrDXkJmkj3l8YhGWtAjbFU7XgyEKEKBTes9fcxWSW
GCdd1jV9oXcV9EQRkRr50wMvydgIWAAWvcVZ5zzK4sZelZDaGz7yEXG/Q1F1Xp3e
GcC057CQoaEzuTQILUCypiNeQpKdzGXxwyp+Q6DAYITjyFBjQ5WbQiSaZtCPV5D9
lwIDAQAB
-----END PUBLIC KEY-----');
$rsaDecrypted = '';
$explodeData = explode('.', $data);
$rsaEncrypted = $explodeData[0];
$aesEncrypted = $explodeData[1];
openssl_public_decrypt(base64_decode($rsaEncrypted), $rsaDecrypted, $publicKey);
$aesInfo = explode('.', $rsaDecrypted);
$aesKey = base64_decode($aesInfo[0]);
$aesIv = base64_decode($aesInfo[1]);
$hash = $aesInfo[2];
$data = openssl_decrypt(
base64_decode($aesEncrypted),
'aes-256-cbc',
$aesKey,
OPENSSL_RAW_DATA,
$aesIv
);
if (hash_hmac('sha256', $data, 'zblogverification') === $hash) {
return json_decode($data, false);
} else {
throw new Exception('Hash error!');
}
}
$object = getVerifyData(file_get_contents('php://input'));
if ($object->error->verified) {
echo '验证通过';
}
var_dump($object);测试数据
PpBHLt70jUUpA1TdP38tm68bVWxRKDA69GqR04PA6on3lcGAwz2s8Dj4qMvCuMosI6
7b1JNFVELfMmxt1RfKQsSS2vLtIVdblDbmZCBptNd5IYNx2qFZFQQ5Hju3bhwR9VDW
8fcy63bEOpWVYxAEhQXT3ztaLZn63gJhpDemA06Emxv6VJgxfe9uLTX31FCDfg6yd服务端插件
你可以直接使用如上代码自行搭建服务端系统,也可以直接使用插件,在应用中心后台填写回调地址即可。