接入文档

从零完成一次授权接入,覆盖 PHP / C / Python 多语言 SDK 与在线验证接口协议

快速开始

只需四步即可完成接入:

1
注册并购买授权

在 用户中心 注册账号,前往 授权套餐 选择合适档位下单。

2
获取授权码与应用密钥

支付成功后,在 我的授权 查看授权码,在 开发者设置 复制该应用的 APP ID 与 APP SECRET。

3
绑定域名 / IP

在授权详情中绑定程序部署的域名或服务器 IP,只有绑定的目标才能通过验证。

4
集成 SDK 调用验证

将对应语言的 SDK 引入你的项目,填入 app_id、app_secret 与授权码,即可在程序启动时完成校验;还可调用更新接口检查新版本。

关于多应用:一套系统可承载多个应用,每个应用拥有独立的 app_id 与 app_secret,各自管理套餐、卡密、授权与版本。客户端只需使用对应应用的信息即可。
关于激活机制:授权购买/兑换后处于「未激活」状态,首次调用验证接口成功时才会激活,有效期自激活那一刻开始计算。这样可避免购买后尚未部署就浪费时长。

最小可运行示例(PHP)

<?php
require 'sdk/php/AuthClient.php';

// 参数:授权码, 应用密钥, 接口地址, 超时, 应用标识
$client = new AuthClient('你的授权码', '你的APP_SECRET', 'https://auth.chipzx.com/api/license.php', 10, 'app_xxxxxxxx');

$res = $client->verify([
    'domain'    => $_SERVER['HTTP_HOST'],   // 或填写服务器 IP
    'cache_ttl' => 300,                     // 5 分钟内复用结果
]);
if ($res['status'] !== 1) {
    exit('授权校验失败:' . $res['msg']);
}

// 可选:检查在线更新
$up = $client->checkUpdate('1.0.0');
if (!empty($up['data']['has_update'])) {
    // 提示用户升级……
}
// 校验通过,继续执行业务逻辑……

SDK 下载

我们为常见语言提供了开箱即用的接入 SDK,均已内置签名、时间戳与缓存逻辑,直接引入即可使用。

PHP SDK
适用于 PHP 5.6+ / 7.x / 8.x,基于 cURL,自带文件缓存与离线验签。
AuthClient.php · example.php · README.md
下载
C / C++ SDK
单文件实现,依赖 libcurl,内置 MD5 与轻量 JSON 解析,适配 GCC / MSVC。
auth_client.h · auth_client.c · main.c
下载
Python SDK
兼容 Python 2.7 / 3.x,优先使用 requests,缺失时自动回退 urllib。
auth_client.py · example.py · README.md
下载
SDK 为本地文件直链下载,请将 sdk/ 目录随系统一起部署到服务器根目录,或自行打包分发。每个语言的 README.md 内含完整用法与编译说明。

在线验证接口

请求地址

POST  https://auth.chipzx.com/api/license.phpContent-Type: application/x-www-form-urlencoded

请求参数

参数必填说明
app_id建议应用标识,形如 app_xxxxxxxx。多应用模式下建议传入;留空时按授权归属自动反查
license_key是授权码
domain见说明当前访问域名,与 ip 至少填写其一
ip见说明服务器公网 IP,与 domain 至少填写其一
timestamp是当前 Unix 时间戳(秒),服务端容差 ±300 秒
nonce是随机字符串,建议 16 位,防重放
sign是请求签名,算法见下节。验证接口签名参与字段:app_id、domain、ip、license_key、nonce、timestamp(APP SECRET 不参与签名原串的参数部分,仅作为末尾密钥)

响应格式

{
  "code": 1000,
  "status": 1,
  "msg": "授权有效",
  "data": {
    "license_key":  "CZX-XXXX-XXXX-XXXX",
    "app_id":       1,
    "app_name":     "示例应用",
    "product_id":   1,
    "bind_domain":  "example.com",
    "bind_ip":      "1.2.3.4",
    "status":       1,
    "active_at":    "2026-01-01 00:00:00",
    "expire_at":    "2026-12-31 23:59:59",
    "remain":       "剩余 364 天",
    "is_forever":   false,
    "server_time":  "2026-01-01 12:00:00",
    "sign":         "A1B2C3..."      // 数据签名,防篡改
  },
  "server_time": "2026-01-01 12:00:00",
  "timestamp": 1767225600
}
code 为 1000(首次验证返回 1001)时表示授权有效;其余值均为失败,详见「返回码」。

签名算法

签名用于防篡改,规则如下(与主流支付网关一致,便于各语言实现):

  1. 取除 sign 外的所有请求参数;
  2. 按下标(参数名)ASCII 升序排列;
  3. 剔除值为空的参数;
  4. 拼接成 k1=v1&k2=v2&… 的字符串;
  5. 末尾追加 &key=APP_SECRET(该应用的应用密钥);
  6. 对结果取 MD5,并转为大写即为 sign。
// 示例:app_id=app_demo0001、license_key=L1、domain=demo.com、ip=1.2.3.4、
//       timestamp=1700000000、nonce=n1
// 去空排序拼接后:
app_id=app_demo0001&domain=demo.com&ip=1.2.3.4&license_key=L1&nonce=n1&timestamp=1700000000&key=你的APP_SECRET
// 取 MD5 转大写:
sign = MD5(上面的字符串).toUpperCase()

多语言签名实现

PHPPythonC
// ---------- PHP ----------
$params = ['app_id'=>$aid,'license_key'=>$lic,'domain'=>$dom,'ip'=>$ip,'timestamp'=>time(),'nonce'=>$n];
ksort($params);
$params = array_filter($params, fn($v) => $v !== '' && $v !== null);
$sign = strtoupper(md5(http_build_query($params).'&key='.$appSecret));

// ---------- Python ----------
params = {'app_id':aid,'license_key':lic,'domain':dom,'ip':ip,'timestamp':int(time.time()),'nonce':n}
params = {k: v for k, v in params.items() if v not in ('', None)}
raw = '&'.join('%s=%s' % (k, params[k]) for k in sorted(params))
sign = hashlib.md5((raw + '&key=' + app_secret).encode()).hexdigest().upper()

// ---------- C ----------
// 依次拼接 app_id、domain、ip、license_key、nonce、timestamp(空值省略),
// 末尾追加 "&key=APP_SECRET",调用 czx_md5_upper 转大写

离线授权码

对于无法联网(内网/隔离环境)部署的场景,可使用基于 RSA-SHA256 数字签名 的离线授权码,在本地完成验签,无需联网。

  1. 在 我的授权 页面点击「生成离线授权码」,得到一个 Base64 字符串;
  2. 将离线授权码与平台公钥一并内置到你的程序中;
  3. 程序启动时,用公钥对离线授权码验签,通过后即可放行,同时校验其中的域名/IP 与到期时间。
离线授权码内含有效期,到期后需重新生成。公钥可在 开发者设置 中查看。

返回码对照表

Code含义处理建议
1000 授权有效 验证成功,可正常放行程序
1001 授权已激活 首次激活成功,有效期自此刻起算
2001 参数缺失/格式错误 请检查请求参数是否完整、类型正确
2002 签名校验失败 请核对 APP SECRET 与签名拼接顺序(含大小写)
2003 请求过于频繁 达到频率限制,请降低调用频率或稍后重试
2004 应用不存在或已停用 请核对 app_id,或到后台启用该应用
3001 授权码不存在 授权码(卡密/订单号)有误或已被删除
3002 授权已封禁 请联系售后核查封禁原因
3003 授权已过期 请续费或更换新的授权
3004 授权未激活 授权尚未首次激活(一般不会直接返回)
3005 授权不属于该应用 请使用该授权所属应用的 app_id 与密钥
3006 列入盗版黑名单 该授权/域名/IP 命中风控黑名单,请联系售后
4001 域名未绑定 请在用户控制台为该授权添加此域名
4002 IP 未绑定 请在用户控制台为该授权添加此 IP
4003 域名数量超限 已达套餐允许的域名绑定上限
4004 修改次数超限 已达套餐允许的域名修改次数上限
5001 系统内部错误 服务端异常,请稍后重试或联系技术支持

常见问题

验证接口调用失败返回 2002(签名校验失败)怎么办?

请依次核对:① APP SECRET 是否与开发者设置中该应用的密钥完全一致(区分大小写);② 参数排序是否为 ASCII 升序;③ 是否剔除了空值参数;④ 末尾是否追加了 &key=APP_SECRET;⑤ MD5 结果是否转为大写。建议直接使用官方 SDK,避免手写签名出错。

返回 2004 / 3005(应用不存在或授权不属于该应用)怎么办?

说明请求携带的 app_id 有误,或该授权属于另一个应用。请到「开发者设置」复制该授权所属应用的 APP ID 与 APP SECRET 再发起请求;若未传 app_id,系统会按授权归属自动识别,一般不会出现该错误。

返回 3006(列入盗版黑名单)是什么情况?

该授权、域名或 IP 命中了风控黑名单。常见原因:域名/IP 与绑定严重不符、签名反复校验失败(疑似篡改)、接口被高频滥用。可到用户中心查看,或提交工单由管理员核实后移出。

返回 4001/4002(域名或 IP 未绑定)如何解决?

登录用户中心,在「我的授权」中为该授权添加程序实际部署/访问时的域名或服务器公网 IP。注意域名不要带 http:// 前缀与端口号。

同一份授权可以绑定几个域名?

可绑定数量与修改次数由你购买的套餐决定,超出后需升级套餐或另购授权。具体额度见 授权套餐 页。

授权什么时候开始计时?

授权自首次验证成功(激活)之日起算,而非购买之日。因此你可以提前囤卡,部署上线时再激活,不浪费时长。

验证接口有频率限制吗?

有。为防止滥用,系统对单授权/IP 的调用频率做了限制(默认约每分钟 60 次)。正常业务通常应本地缓存验证结果(如缓存 6~24 小时)后再调用,SDK 已内置缓存逻辑。

如何防止授权文件被破解绕过?

建议:① 使用离线授权码进行本地 RSA 验签,避免关键逻辑暴露;② 对验证结果做完整性校验;③ 代码混淆/加壳;④ 不要把 APP SECRET 以明文硬编码在可被轻易读取的位置。系统内置盗版入库与盗版跟踪,会记录域名不符、IP 不符、签名篡改、暴力枚举、接口滥用等异常行为供管理员处置。详见各 SDK 的 README「防破解建议」。

如何让程序提示用户升级到新版本?

管理员在后台「应用与授权 → 版本与更新」为应用发布版本记录后,客户端调用更新接口(SDK 中的 checkUpdate() / check_update() / czx_check_update())即可获得最新版本号、更新说明、下载地址与 SHA256。版本比较按段数值进行(1.2.0 < 1.10.0),并支持「强制更新」标记。

支付成功但授权未到账?

易支付异步回调存在极少数延迟或丢包可能。若超过 5 分钟仍未到账,可在「我的订单」中查看订单状态,或 提交工单 并附上订单号,我们会在核实后手动补单。