一、核心流程

您的软件(任何语言) → 发送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=xxxMD5签名(防篡改)

四、返回码说明

返回码含义
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 + MessageDigest
JavaScript fetch() + md5()
Go http.Get() + crypto/md5
VB WinHttp + MD5

七、通用对接步骤

所有语言通用,按照以下 5 步完成对接:

1 发送 card + mac + app 到API
2 接收返回字符串
3 提取 sign 并验签
4 验签通过后解析结果
5 成功→放行,失败→拒绝

八、一句话总结

🎯 客户端发卡密 + 设备码 → 服务端查数据库 → 返回验证结果 + 签名 → 客户端验签后决定是否放行

💡 开发者提示: 所有语言的对接代码,本质上都是 发HTTP请求验签解析结果 三个步骤。
不同语言只是语法不同,原理完全一样。