快速入门
5分钟完成集成,开始验证授权
授权管理
查看授权、绑定域名、到期续期
一键授权打包
上传 ZIP,自动注入 SDK 并加密
API 参考
完整的 REST API 接口文档
代码加密
AES-256-GCM 加密方案
客户端 SDK 多平台
WP / 通用适配,手动集成指南
加密配额
月加密次数与 VIP 权益说明
完整安装指南
从零开始的部署教程
常见问题
授权验证常见问题解答
快速入门
1. 获取授权码
在 产品页面 购买授权,或在控制台中获取已购授权的授权码。
2. 验证授权
使用 HTTP GET 请求验证授权:
curl "https://你的域名/api/verify?license_key=ZFS-XXXX-XXXX&domain=example.com&product_code=my-product"
3. 处理响应
验证成功返回 JWT Token 格式的响应:
{
"verified": true,
"license_id": "LIC-XXXX",
"product_code": "my-product",
"expires_at": "2026-12-31",
"token": "eyJhbGciOiJSUzI1NiIs..."
}
授权管理
购买授权后,你可以在控制台查看与管理自己的所有授权。
查看授权
进入「我的授权」页面,可看到全部授权及其状态:有效 / 试用中 / 已过期 / 无效,以及到期时间与最大绑定域名数。
域名管理
进入「域名管理」页面,按产品分组查看每个授权已绑定的域名,支持添加与删除绑定域名(删除需输入域名二次确认)。可绑定数量受产品设置与系统配置约束(默认 3 个)。
到期与续期
授权到期后将无法通过验证。到期前可在对应授权中查看剩余天数,并按提示续期或升级。
一键授权打包
上传项目 ZIP -> 自动注入 SDK -> 加密 -> 下载,无需写一行代码
1. 上传项目 ZIP
在管理后台选择产品,上传你的 PHP 项目 ZIP 文件。
2. 自动注入 + 加密
系统自动检测开发平台,注入授权配置和 Guard 保护调用,可选开启 AES-256-GCM 加密。
3. 下载分发
打包产物包含加密代码 + License 文件 + Loader 安装说明,交给客户部署即可。
API 参考
GET /api/verify
验证授权(主要端点)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
license_key | string | 是 | 授权码 |
domain | string | 否 | 绑定域名 |
ip | string | 否 | 客户端 IP |
product_code | string | 是 | 产品代码 |
返回: verified, token (JWT), expires_at, domain
POST /api/refresh
刷新 JWT Token(需 Authorization: Bearer header)
返回: token (新 JWT)
GET /api/key/{kid}
获取公钥(客户端验签用)
路径参数: kid — 密钥 ID,返回 PEM 格式公钥
GET /api/check-revoked
查询授权是否被吊销(需有效 token)
GET /api/health
健康检查(监控用)
代码加密
AES-256-GCM 认证加密 + C 扩展运行时解密。使用「一键授权打包」时自动加密,无需任何手动操作;本节仅简述加密特性,供了解原理。
| 特性 | 说明 |
|---|---|
| 加密算法 | AES-256-GCM 认证加密(防篡改) |
| 运行时解密 | C 扩展 Hook 编译流程,内存中解密,磁盘永为密文 |
| License 保护 | RSA-SHA256 签名,支持域名绑定和过期控制 |
客户端 SDK 与多平台支持
绝大多数用户使用「一键授权打包」即可,系统自动注入适配器并加密,无需手动集成。本节面向需要手动集成 SDK的场景。
| 适配器 | 适用场景 |
|---|---|
WpAdapter | WordPress 主题 / 插件,自动 Hook WP 生命周期 |
GenericAdapter | Laravel、ThinkPHP、原生 PHP 及其他框架 / standalone(需 ext-curl) |
手动集成步骤
# 1. 安装 SDK(Composer)
composer require zfshang/license-client
# 2. 在入口引入并初始化 Guard
require_once __DIR__ . '/vendor/autoload.php';
use ZfLicense\Guard;
Guard::protect('/path/to/zf-license.dat');
# 3. 激活(CLI,首次部署到客户站点时执行一次)
php zf-activate.php --license-key=ZFS-XXXX-XXXX --license-id=LIC-XXXX [--domain=example.com]
完整接入与 API 详见 SDK 包内 sdk/zfshang-license-client/README.md。
加密配额
非 VIP 用户每月可加密次数有限(默认 5 次 / 月),配额按自然月(YYYYMM)重置。在加密页面可查看本月已用 / 剩余次数。
| 账户类型 | 月加密次数 | 可上传格式 | 单文件上限 |
|---|---|---|---|
| 普通用户 | 5 次 / 月 | .php | 500 KB |
| VIP | 不限 | .php / .zip | .php 5 MB / .zip 100 MB |
常见问题
授权验证失败怎么办?
检查授权码是否正确、是否已过期、域名是否匹配。可在控制台查看授权状态。
如何更换绑定域名?
登录控制台,在对应授权中点击"域名管理",输入新域名即可。
API 调用频率限制是多少?
默认每 IP 每分钟 30 次验证请求。可在控制台绑定 IP 获得更高频率。
加密后的代码能破解吗?
AES-256-GCM 是目前最安全的对称加密算法之一,配合每文件独立密钥,破解一个文件不影响其他文件。
Loader 扩展需要额外付费吗?
ZFShang Loader 扩展完全免费,支持 PHP 7.4 ~ 8.3。
如何更换加密密钥?
在管理后台「代码加密」页面点击「轮换加密密钥」。注意:轮换后已加密的旧文件需重新打包。
管理员专区
完整安装部署指南
从宝塔面板配置、系统安装、Loader 编译到代码加密的全流程,新手友好。系统安装、定时任务(统一调度器 scheduler.php)、Nginx 部署、Loader 下载限流等运维细节见仓库 README.md 与 install/nginx.conf.example。
运维要点
- 定时任务:宝塔只需 1 条 crontab 指向
cron/scheduler.php(系统统一调度),安装时向导会自动尝试接入;所有任务在后台「事件计划 → 计划任务」管理。 - 错误处理:生产环境不暴露错误详情(仅记日志,返回通用 500 页);排查时可临时设置
APP_DEBUG=true,用完务必改回。 - 文件保护:Web 根目录指向
public/,/config、/storage、/app在 public 之外并已做 deny 拦截;config/database.php的密码独立存放于config/.db_password。 - Loader 下载限流:需在 Nginx 中把
/downloads/loaders/交由 PHP 处理(见install/nginx.conf.example),否则后台「下载设置」限额不生效。 - 安装完成:建议删除整个
install/目录(config/installed.lock已锁定安装状态,删除不影响运行)。