快速入门

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 个)。

绑定的域名会参与客户端运行时校验:你的代码在被部署的站点上运行时,SDK 上报当前域名并与绑定列表比对,不在列表内将拒绝服务——这是防止授权被盗用的一道关键防线。

到期与续期

授权到期后将无法通过验证。到期前可在对应授权中查看剩余天数,并按提示续期或升级。

一键授权打包

上传项目 ZIP -> 自动注入 SDK -> 加密 -> 下载,无需写一行代码

1. 上传项目 ZIP

在管理后台选择产品,上传你的 PHP 项目 ZIP 文件。

2. 自动注入 + 加密

系统自动检测开发平台,注入授权配置和 Guard 保护调用,可选开启 AES-256-GCM 加密。

3. 下载分发

打包产物包含加密代码 + License 文件 + Loader 安装说明,交给客户部署即可。

无需 composer require、无需编写验证代码、无需手动配置 —— 系统自动完成所有注入工作。

API 参考

GET /api/verify

验证授权(主要端点)

参数类型必填说明
license_keystring授权码
domainstring绑定域名
ipstring客户端 IP
product_codestring产品代码

返回: 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的场景。

适配器适用场景
WpAdapterWordPress 主题 / 插件,自动 Hook WP 生命周期
GenericAdapterLaravel、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 次 / 月.php500 KB
VIP不限.php / .zip.php 5 MB / .zip 100 MB
当月次数用尽后再提交加密会提示「本月加密次数已用完,请升级 VIP」。升级 VIP 后可解除限制并支持 ZIP 批量加密与更大文件。

常见问题

授权验证失败怎么办?

检查授权码是否正确、是否已过期、域名是否匹配。可在控制台查看授权状态。

如何更换绑定域名?

登录控制台,在对应授权中点击"域名管理",输入新域名即可。

API 调用频率限制是多少?

默认每 IP 每分钟 30 次验证请求。可在控制台绑定 IP 获得更高频率。

加密后的代码能破解吗?

AES-256-GCM 是目前最安全的对称加密算法之一,配合每文件独立密钥,破解一个文件不影响其他文件。

Loader 扩展需要额外付费吗?

ZFShang Loader 扩展完全免费,支持 PHP 7.4 ~ 8.3。

如何更换加密密钥?

在管理后台「代码加密」页面点击「轮换加密密钥」。注意:轮换后已加密的旧文件需重新打包。

管理员专区

完整安装部署指南

从宝塔面板配置、系统安装、Loader 编译到代码加密的全流程,新手友好。系统安装、定时任务(统一调度器 scheduler.php)、Nginx 部署、Loader 下载限流等运维细节见仓库 README.mdinstall/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 已锁定安装状态,删除不影响运行)。