API Docs
授权端 API 文档
客户端软件 / 网站系统接入指南 · 全部接口 POST + JSON
一、接入准备
登录管理后台 →「应用管理」创建应用,获得 app_key 与 app_secret(64 位十六进制)。接口地址:
https://author.secke.cn/api/?action={接口名}
所有接口统一使用 POST 请求,Content-Type: application/json,响应统一为 JSON:
{ "code": 0, "msg": "验证成功", "time": 1784700000, "data": { … } }
code 为 0 表示成功,非 0 为错误码(见文末错误码表)。
二、签名算法(重要)
除 time 接口外,所有请求必须携带以下公共参数:
| 参数 | 说明 |
| app_key | 应用 AppKey |
| timestamp | 客户端 Unix 时间戳(秒),与服务器误差 ≤ 300 秒 |
| nonce | 8~64 位随机字符串,一次性使用,防重放 |
| sign | 签名值,计算方式如下 |
签名步骤
- 1. 取全部请求参数(不含 sign 本身,空值跳过),按参数名字典序排序
- 2. 拼成 k1=v1&k2=v2&k3=v3 形式
- 3. 以 app_secret 为密钥计算 HMAC-SHA256,取小写 hex
PHP 签名示例
// 计算签名
function sign(array $params, string $secret): string {
unset($params['sign']);
ksort($params);
$pairs = [];
foreach ($params as $k => $v) {
if ($v === '' || $v === null || is_array($v)) continue;
$pairs[] = $k . '=' . $v;
}
return hash_hmac('sha256', implode('&', $pairs), $secret);
}
Python 签名示例
# 计算签名
import hmac, hashlib
def sign(params: dict, secret: str) -> str:
params = {k: v for k, v in params.items() if k != 'sign' and v not in ('', None)}
s = '&'.join(f'{k}={params[k]}' for k in sorted(params))
return hmac.new(secret.encode(), s.encode(), hashlib.sha256).hexdigest()
三、接口列表
POST?action=time 服务器校时(免签名)
参数:app_key。客户端时间不准时先调它校准。
{ "code": 0, "msg": "success", "data": { "server_time": 1784700000, "server_date": "2026-07-22 12:00:00", "timezone": "Asia/Shanghai" } }
POST?action=verify 验证授权码(核心)
| 参数 | 必填 | 说明 |
| code | 是 | 授权码 |
| device_hash | 否 | 设备指纹;提供时自动绑定/校验设备数 |
{ "code": 0, "msg": "验证成功", "data": {
"license": { "type": "time", "expire_at": "2027-07-22 00:00:00", "remain_count": null, "max_devices": 2 },
"variables": { "latest_version": "1.0.0", "vip_download_url": "…" },
"notice": "欢迎使用 AuthSite 授权系统",
"server_time": 1784700000
} }
POST?action=heartbeat 心跳保活
参数:code、device_hash。建议每 3~5 分钟一次,校验授权有效性与在线状态。
POST?action=unbind 解绑设备
参数:code、device_hash。解除该设备与授权码的绑定关系。
POST?action=vars 获取公开云变量
仅需公共签名参数。返回 is_public=1 的变量(公告、版本号等),无需授权码。
POST?action=domain 域名授权验证
参数:domain。网站系统服务端调用,校验域名授权有效性(自动剥掉协议头与路径)。
四、错误码表
| code | 含义 |
| 0 | 成功 |
| 400 / 40001 / 40002 | 缺少参数 / app_key 格式错误 / nonce 长度错误 |
| 40100 | 签名校验失败 |
| 40101 / 40102 | 请求过期(时间戳超差)/ nonce 重复 |
| 40300 | 应用已禁用 |
| 40302 | 授权码已封禁 |
| 40303 | 授权已到期 |
| 40304 | 授权次数已用尽 |
| 40305 / 40306 | 授权已失效 / 设备未绑定(心跳) |
| 40307 | 域名授权已封禁 |
| 40308 | 设备绑定数已达上限 |
| 40401 / 40402 / 40403 / 40404 | 应用不存在 / 授权码不存在 / 域名未授权 / 绑定关系不存在 |
| 40301 / 42901 | IP 已被封禁 / 请求频率超限 |
| 50000+ | 服务器内部错误 |
五、完整调用示例(PHP)
$API = 'https://author.secke.cn/api/';
$appKey = '你的app_key';
$appSecret = '你的app_secret';
$params = [
'app_key' => $appKey,
'timestamp' => time(),
'nonce' => bin2hex(random_bytes(16)),
'code' => 'XXXX-XXXX-XXXX-XXXX',
'device_hash' => md5(php_uname()),
];
$params['sign'] = sign($params, $appSecret); // 签名函数见第二节
$resp = http_post_json($API . '?action=verify', $params);
// $resp['code'] === 0 即验证通过,$resp['data']['variables'] 为云变量