授权中心通过「插件授权守护 + 交付时加密 + 水印追踪」三道机制保障付费应用的版权与运行可控。本节面向应用开发者,说明如何在自己的插件 / 模板里正确接入授权守护,以及交付后的基础运行表现。
付费应用(插件 / 模板)必须在主文件最上方调用授权守护,未通过授权时主动 return,避免业务代码继续执行。
<?php
/*
Plugin Name: 我的付费插件
Version: 1.0.0
Description: 示例
Ui: Layui
*/
defined('DC_ROOT') || exit('access denied!');
$__slug = 'my_plugin';
// 防止改目录名绕过授权
if (basename(__DIR__) !== $__slug) {
return;
}
require_once DC_ROOT . '/include/lib/plugin_license.php';
if (!PluginLicense::verify($__slug)) {
return; // 未授权、过期、封禁、被篡改时不加载任何业务逻辑
}
// 以下为业务代码……
function my_plugin_init() { /* ... */ }
addAction('init', 'my_plugin_init');
| 返回 | 含义 | 建议处理 |
|---|---|---|
true | 授权有效(含 valid / trial / preinstall / local 状态) | 正常加载业务 |
false | 未授权、月付/试用过期、封禁或被检测篡改 | 主文件 return,不要 die,避免影响其它模块加载 |
PluginLicense::verify(),不要复制、替换或改写授权库。内部缓存、远程刷新和异常处理由系统统一完成。独立支付模板、首页模板等可通过统一接口验证域名授权。
// 在模板的设置入口 / 关键页面加入:
$resp = @file_get_contents(
'https://dcshop.xzsc.cc/api.php?action=verify_pay_template'
. '&template=' . urlencode('my_pay_template')
. '&domain=' . urlencode($_SERVER['HTTP_HOST'])
);
$data = json_decode($resp, true);
if (!$data || empty($data['data']['authorized'])) {
// 未授权:建议提示用户去授权中心购买,不要直接 die
}
authorized:是否授权(布尔)。template:模板 slug。expire_time:到期时间(月付 / 试用)。cache_ttl:建议的客户端缓存秒数,请遵守,避免高频请求触发频率限制。当应用开启加密或水印交付时,授权中心会在下载时按授权信息处理压缩包,再交付给客户端。
| 字段 | 说明 | 建议 |
|---|---|---|
| 水印追踪 | 写入授权相关追踪信息,不影响正常运行 | 付费应用建议开启 |
| 源码保护 | 对 PHP 源码做保护处理 | 大型业务插件可选;调试阶段不要开 |
加密后 __FILE__ / __DIR__ 行为:加密器会在解密阶段把魔术常量改写为原始路径,所以 basename(__DIR__) !== $slug 这类授权守护写法依然有效,开发者不需要特殊处理。
水印 / 加密不修改插件头注释:Plugin Name / Version / Description 等头注释会被保留,后台依然能正确识别应用。
| 现象 | 可能原因 | 处理 |
|---|---|---|
插件加载后立刻 return | 未购买 / 月付过期 / 试用结束 / 目录被改名 | 检查后台「我的已购」和插件目录名是否与 slug 一致 |
| 本地开发也提示未授权 | 本地域名未绑定到任何授权码 | 用本地域名先到授权中心绑定一个测试授权或申请试用 |