Z-Blog 官方搭建的Z-Blog 应用中心为广大 Z-Blog 使用者和开发者提供了主题和插件的集中地,用户可以免费或付费下载 Z-Blog & Z-BlogPHP 的主题、模板和插件。任何愿意为 Z-Blog 贡献的开发者都可以免费加入应用中心,并发布自己的创作供所有用户使用。为了确保应用质量,Z-Blog 设立了一些上架要求,只要应用符合相应标准,就可以发布到应用中心。
一、成为开发者
请登录Z-Blog全新打造的「Z-Blog 开发者入驻平台」完成入驻操作:
- 成为开发者 – Z-Blog 开发者入驻平台:https://join.zdevo.com/
- 审核通过后给予开发者权限,之后可上传应用到「应用中心(https://app.zblogcn.com/)」。
注意:后续应用实行上传后审核发布。
开发者申请流程:
Z-Blog 全新的应用中心,为众多开发者提供一个展示自己作品的平台。
1、前置要求
依据《中华人民共和国网络安全法》的要求,及为尽快通知到,必须:
- 绑定手机号,以完成实名认证要求;
- 绑定微信号,以及时获取审核消息;
- 提交身份证号,完成实名认证;
- 「可选」开启“两步验证”;
- 如果需要销售收费应用,则需要绑定支付宝,以获取收款。
2、申请流程
- 请登录 Z-Blog 开发者入驻平台 ,按照步骤进行入驻。
- 为节省时间,请先参照「注意事项速查表」进行自查;
- 「可选」基本的 README.md 说明,如需附图可放在 docs/ 目录内或者使用外链;
- 作为博客用户,附带一篇博客文章,介绍你的应用;附带的文章地址及对应网站将作为额外的评估依据;网站本身如为 Z-Blog,须保留带链接的 Powerd By 声明;其他程序请在首页添加指向www.zblogcn.com的友情链接
- 按审核意见逐条修改并上传至入驻平台,告一段落后汇总 Changelog 至发布者意见内。
3、审核流程
在「开发者入驻平台」提交应用后,会有审核员进行审核,并及时反馈审核意见;
二、发布标准
1、通用
- 开启 debug 模式后不得报错;
- 不得含有木马等有害代码;
- 不得含有任何被加密的 PHP(含 Z5 加密),只能由应用中心服务器端加密;
- PHP 文件应保存为 UTF-8 no BOM 编码;
- 不得有安全漏洞(包括 SQL 注入、跨站脚本攻击、跨站请求伪造等);
- 不得引用外站资源(尤其是小站资源);
- 自动审核内容里不得有黄色提示(使用较老旧版本的 js 等);
- 不得以免费为饵跳过“应用中心支付系统”搞“内置收费”(微博、微信、支付宝等支付社交系统或其它功能 API 必须要收费除外);
- 不得有免费或低价诱导后续高消费或是明显高于市场定价等不良意图或是违反公序良俗;
- 不得修改保存系统源码或是系统默认语言包。
2、主题
- 主题里没有 zblog 版权;
- 自动审核后的截图,出现错位等不正常的;
- 标题等长度过长不会导致变形;
- 摘要的空格被移除的;
- ul,ol,li,blockquote 等 Html 元素样式错误的;
- 需要提供配置的地方没的可配置的页面;
- 评论层级不对。
3、插件
- 数据库表和 Class 没有使用 zbp 的标准数据库创建操作规范的;
- 数据库操作没有使用链式对象等系统自带操作而使用自行拼接 sql 代码的;
- 在应该用$zbp→CheckRights 判断权限的地方用最简单的 $zbp→User→Level 去判断的。
4、上传后的应用发布内容
- 缺少前台展示截图(如有前台展示的话);
- 缺少后台截图(如有后台配置的话);
- 缺少基本的(或详细)使用说明和功能介绍。
5、禁止条款
- 禁止抄袭复制有版权保护的主题模板;
- 禁止多次提交无意义的应用去刷新排行。
三、完善简介
四、提交发布
五、应用审核
六、应用加密说明
Z5加密是由 Z-Blog 应用中心推出的 PHP 加密方案,也是 「Z-Blog 应用中心」 唯一支持的加密方案。为确保用户权益,只有 Z5 加密后的加密文件被允许上架到应用中心,非使用 Z5 加密的应用代码必须以明文形式提交到应用中心上架。
七、应用验证
为保证开发者利益,应用中心提供应用购买验证系统用于验证用户使用应用的合法性。应用验证系统与应用中心独立,即使应用中心网站无法访问,也不影响应用验证系统的正常运行。
1、开发者应用验证调用
应用验证系统与应用中心独立,即使应用中心网站无法访问,也不影响应用验证系统的正常运行。
2、新版本 V2 验证
仅提供 PHP 版本代码,请在应用中心网站后台 → 开发者工具 → 验证代码处获得。
3、添加指南
- 添加在 InstallPlugin 函数中,实现启用插件时自动验证;
- 需要运行某些速度慢的功能时,如批量发邮件等,可在这之前进行验证;
- 建议配合 Z5 加密使用。
4、不正确行为
- 验证因需要连接服务器,会严重影响页面访问速度。因此,不允许在模板的浏览页等地方插入这部分代码;
- 即使验证不通过,也不允许对用户的数据进行任何意义上的破坏。
八、应用验证回调
1、验证服务端
验证系统会对验证结果加密后,通知到开发者设置的回调地址。
- HTTP 方法为 POST,Content-Type 为 application/zblogverify;
- Body 的加密方式为:RSA(base64(AES_KEY) + ‘.’ + base64(AES_IV) + ‘.’ + HS256(realData) + ‘.’ + timestamp) + ‘.’ + AES(realData);
- RSA 公钥和 HMAC-SHA256 密钥见示例代码。
2、明文数据格式
{ "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": "授权文件生成时间戳" } }
3、示例代码(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 '验证通过';<br /> } var_dump($object);
4、测试数据
PpBHLt70jUUpA1TdP38tm68bVWxRKDA69GqR04PA6on3lcGAwz2s8Dj4qMvCuMosI6 7b1JNFVELfMmxt1RfKQsSS2vLtIVdblDbmZCBptNd5IYNx2qFZFQQ5Hju3bhwR9VDW 8fcy63bEOpWVYxAEhQXT3ztaLZn63gJhpDemA06Emxv6VJgxfe9uLTX31FCDfg6yd
5、服务端插件
可以直接使用如上代码自行搭建服务端系统,也可以直接使用插件,并在应用中心后台填写回调地址即可。