一、核心流程
您的软件(任何语言) → 发送HTTP请求到卡密通API → 云端验证 → 返回结果 → 软件根据结果放行或拒绝
你的软件
═══ ① 发送卡密 + 设备码 ═══
卡密通 API
你的软件
═══ ② 返回验证结果(成功/失败+剩余时间) ═══
卡密通 API
一次HTTP请求,返回一个字符串
二、请求格式
// 请求地址
https://www.keyt.cn/kami/qq345205377/check.php?card=RV5FCL4DPN&mac=2CF05DDC86C8MAC&app=a&heart=1&t=2026711101245
| 参数 | 含义 | 示例 |
|---|---|---|
card | 用户输入的卡密 | A1B2C3D4E5 |
mac | 当前设备的唯一标识 | web_a1b2c3d4e5f6MAC |
app | 应用名称 | a |
heart | 心跳保活(可选) | 1 |
t | 时间戳(防重放) | 2026711101245 |
三、返回格式
// ✅ 成功示例
ok|valid|30|43200|1741680000|sign=abc123def456
// ❌ 失败示例
error|expired|1741680000|sign=abc123def456
| 字段 | 含义 |
|---|---|
ok | 验证通过 |
valid | 卡密有效(非首次激活) |
activate | 首次激活成功 |
permanent | 终身卡,永久有效 |
error|xxx | 验证失败,xxx为错误码 |
30 | 剩余天数 |
43200 | 剩余分钟数 |
1741680000 | 时间戳(防重放) |
sign=xxx | MD5签名(防篡改) |
四、返回码说明
| 返回码 | 含义 |
|---|---|
ok|valid|30|43200 | ✅ 验证通过,剩余30天 |
ok|permanent | ✅ 终身卡,永久有效 |
ok|activate|30|43200 | ✅ 首次激活成功 |
error|invalid_card | ❌ 卡密不存在 |
error|expired | ❌ 卡密已过期 |
error|banned | ❌ 卡密已被禁用 |
error|device_mismatch | ❌ 设备不匹配(已绑定其他设备) |
error|online_limit_reached | ❌ 在线设备数已满 |
error|too_frequent | ❌ 请求太频繁(50秒内重复验证) |
error|system_locked | ❌ 系统已被管理员锁死 |
五、签名机制 防篡改
返回结果带MD5签名,防止中间人篡改数据。客户端必须验签通过才认可结果。
服务端签名
// 原始数据
data = "ok|valid|30|43200|1741680000"
// 待签名字符串 = 原始数据 + 密钥
str = data + "222222"
// 签名 = MD5
sign = md5(str) // abc123def456
// 返回 = 原始数据 + "|sign=" + 签名
返回 = data + "|sign=" + sign
客户端验签
// 收到数据
raw = "ok|valid|30|43200|1741680000|sign=abc123"
// 提取原始数据(去掉 |sign= 后面部分)
body = "ok|valid|30|43200|1741680000"
sign = "abc123"
// 本地计算签名
local = md5(body + "222222")
// 比对
if local == sign:
// ✅ 验签通过,数据未被篡改
时间戳防重放
// 收到时间戳
ts = 1741680000
now = 当前UTC时间戳
if (now - ts) > 120:
// ❌ 请求过期(>120秒)
拒绝
双重保护
✅ 签名校验 → 防止数据被篡改
✅ 时间戳校验 → 防止重放攻击
两者都通过,才认可验证结果
六、不同语言实现对比
所有语言的对接代码,本质上都是 发HTTP请求 → 验签 → 解析结果 三个步骤。
PHP curl_init() + md5()Python requests.get() + hashlib.md5()易语言 HTTP读文件() + 取数据摘要()按键精灵 Url.Get() + Plugin.Encrypt.Md5String()C++ libcurl + MD5算法C# WebClient.DownloadString() + MD5.Create()Java HttpURLConnection + MessageDigestJavaScript fetch() + md5()Go http.Get() + crypto/md5VB WinHttp + MD5七、通用对接步骤
所有语言通用,按照以下 5 步完成对接:
八、一句话总结
🎯 客户端发卡密 + 设备码 → 服务端查数据库 → 返回验证结果 + 签名 → 客户端验签后决定是否放行
💡 开发者提示: 所有语言的对接代码,本质上都是
不同语言只是语法不同,原理完全一样。
发HTTP请求 → 验签 → 解析结果 三个步骤。不同语言只是语法不同,原理完全一样。