授权系统 API 对接文档
本文面向需要接入「超神授权系统」的软件程序。接入方只需实现授权校验、可选在线更新和安全上报,不需要访问授权服务器后台。
概览
| 项目 | 值 |
|---|---|
| 生产环境地址 | https://hncs.top |
| 数据格式 | JSON,UTF-8 |
| 校验方式 | 授权码 + 域名 + 安装指纹 |
| 返回格式 | {"code":0,"msg":"ok","data":{}} |
| 成功 | code = 0 |
| 业务失败 | code = 1,具体看 status / msg |
所有接口都应使用 HTTPS。授权接口不需要登录客户中心,客户端使用
license.key 即可。接入流程
- 客户购买授权后,下载安装包;服务端会把
license.key放入安装包的app/config/license.key。 - 程序启动时读取
license.key,取出授权码、授权服务器地址、产品编码和公钥。 - 首次调用
/api/verify,服务端绑定域名与安装指纹,并从绑定时间开始计算到期。 - 后续启动时继续校验;校验通过后用服务端返回的 token 与本地公钥验签。
- 需要在线更新时调用
/api/update/check,下载前校验 SHA256。
license.key
文件为纯文本 KEY=VALUE 格式:
LICENSE_KEY=YE3KBVNNA2YRYWSAFHDGAGTT
LICENSE_SERVER=https://hncs.top
PRODUCT=hhcx
LICENSE_PUBLIC_KEY_BASE64=LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0...
| 字段 | 说明 |
|---|---|
LICENSE_KEY | 授权码,服务端会去横线并转大写 |
LICENSE_SERVER | 授权服务器根地址,必须是 HTTPS |
PRODUCT | 产品编码,必须与授权产品一致 |
LICENSE_PUBLIC_KEY_BASE64 | RSA 公钥,base64 编码,用于验签 |
授权校验
POST /api/verify
https://hncs.top/api/verify
请求
{
"license_key": "YE3KBVNNA2YRYWSAFHDGAGTT",
"domain": "app.example.com",
"fingerprint": "cb2501937038d27b",
"version": "1.0.0"
}
| 字段 | 必填 | 说明 |
|---|---|---|
license_key | 是 | 授权码;旧域名模式可为空 |
domain | 是 | 当前站点域名,不带协议 |
fingerprint | 是 | 稳定的安装指纹,建议 16 位以上 |
version | 否 | 当前程序版本 |
成功响应
{
"code": 0,
"msg": "ok",
"data": {
"status": "active",
"expire_at": "2026-11-21 13:31:34",
"days_left": 30,
"grace_days": 7,
"issued_at": 1792562000,
"token": "RSA-SHA256 签名..."
}
}
常见失败
| status | 说明 |
|---|---|
not_found | 授权不存在或域名未绑定 |
domain_mismatch | 授权码已绑定其他域名 |
fingerprint_mismatch | 安装指纹与首次绑定不一致 |
expired | 授权已过期 |
rate_limited | 请求过于频繁 |
首次校验成功后,域名和指纹会永久绑定;重装站点、重装系统或换服务器导致指纹变化时,需要客户提交“重置指纹”申请,不是授权丢失。
在线更新
POST /api/update/check
https://hncs.top/api/update/check
{
"product": "hhcx",
"channel": "stable",
"current_version": "1.0.0",
"license_key": "YE3KBVNNA2YRYWSAFHDGAGTT",
"domain": "app.example.com",
"fingerprint": "cb2501937038d27b"
}
{
"code": 0,
"msg": "ok",
"data": {
"product": "hhcx",
"latest_version": "1.0.1",
"has_update": true,
"changelog": "更新说明",
"package_url": "https://hncs.top/api/update/download?token=...",
"sha256": "e8e1c921...",
"size": 362,
"is_force": false,
"license_expire_at": "2026-11-21 13:31:34"
}
}
下载后必须计算 SHA256 并与
sha256 比对;不一致时不得安装。更新包只覆盖程序代码,不会覆盖 license.key、config.php、storage/ 等文件。安全上报
POST /api/security/beacon
https://hncs.top/api/security/beacon
用于上报本地授权检查失败、token 无效、检测到绕过等安全事件。请求使用 HMAC-SHA256 签名。
{
"license_key": "YE3KBVNNA2YRYWSAFHDGAGTT",
"domain": "app.example.com",
"fingerprint": "cb2501937038d27b",
"event": "license_check_missing",
"detail": "license.key missing",
"version": "1.0.0",
"ts": 1792562000,
"sign": "hmac-sha256-hex"
}
签名串:
license_key|domain|fingerprint|event|detail|ts
HMAC 密钥为去横线、转大写后的授权码;domain 使用规范化后的小写域名。签名正确且未重复时返回 recorded: true。
错误码
| code | 说明 |
|---|---|
| 0 | 成功 |
| 1 | 业务错误,看 msg / status |
| 403 | 签名错误、无权限或页面令牌过期 |
| 404 | 授权/资源不存在 |
| 429 | 请求频率过高,按 Retry-After 重试 |
| 500 | 服务器内部错误,记录日志并联系授权方 |
PHP 校验示例
$keyFile = __DIR__ . '/config/license.key';
$cfg = parse_ini_file($keyFile, false, INI_SCANNER_RAW);
$payload = [
'license_key' => $cfg['LICENSE_KEY'],
'domain' => $_SERVER['HTTP_HOST'],
'fingerprint' => $fingerprint,
'version' => '1.0.0',
];
$ch = curl_init(rtrim($cfg['LICENSE_SERVER'], '/') . '/api/verify');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_TIMEOUT => 10,
CURLOPT_SSL_VERIFYPEER => true,
]);
$body = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$res = json_decode($body, true);
if ($http !== 200 || !$res || $res['code'] !== 0) {
// 授权失败:锁定后台或提示续费
}
注意事项
- 不要在客户端硬编码授权服务器地址,统一从
license.key读取。 - 不要删除、修改或伪造
LICENSE_PUBLIC_KEY_BASE64;公钥用于验签。 - 授权码丢失、泄露或换域名时,联系授权方处理;不要尝试绕过。
- 更新下载必须校验 SHA256,不要直接执行远程脚本。
- 接口有频率限制;启动校验失败时应有本地宽限/重试策略,避免频繁请求。
- 本文档仅包含客户端可公开使用的接口,不包含授权服务器后台地址和密钥。