技术文档

易语言对接卡密验证

完整签名校验 + 心跳保活,生产级实现

本文档提供易语言完整对接卡密通的实现方案,包含 MD5 签名、X-Sign2 响应头校验、时间戳防重放、开关检测、心跳线程、错误码转换,可直接用于生产环境,不简化、不省略。

1. 签名密钥配置

.版本 2
.全局变量 SIGN_KEY, 文本型
.全局变量 TIMESTAMP_MAX_DIFF, 整数型

SIGN_KEY = "你的签名密钥"   ' 从后台「修改签名密钥」获取
TIMESTAMP_MAX_DIFF = 120

2. MD5 计算函数

.版本 2
.子程序 取MD5, 文本型
.参数 待加密文本, 文本型
.局部变量 脚本对象, 对象
.局部变量 结果, 文本型

脚本对象.创建 (“MSCE.ScriptControl”, )
脚本对象.写属性 (“Language”, “JScript”)
结果 = 脚本对象.文本方法 (“Eval”, “md5(‘” + 待加密文本 + “‘)”)
返回 (结果)

3. 签名校验(MD5 + 时间戳)

.版本 2
.子程序 校验响应, 文本型
.参数 返回数据, 文本型
.参数 响应头签名, 文本型
.局部变量 body, 文本型
.局部变量 sign, 文本型
.局部变量 本地签名, 文本型
.局部变量 时间戳, 文本型
.局部变量 当前UTC, 长整数型

如果 (寻找文本 (返回数据, “|sign=”, , 假) = -1)
    返回 (“”)
body = 取文本左边 (返回数据, 寻找文本 (返回数据, “|sign=”, , 假) - 1)
sign = 取文本右边 (返回数据, 取文本长度 (返回数据) - 寻找文本 (返回数据, “|sign=”, , 假) - 5)
本地签名 = 取MD5 (body + SIGN_KEY)
如果真 (响应头签名 ≠ “” 且 到大写 (本地签名) = 到大写 (响应头签名))
    ' X-Sign2 头校验通过
如果真 (到大写 (本地签名) ≠ 到大写 (sign) 且 响应头签名 = “”)
    返回 (“”)
' 时间戳校验
时间戳 = 取文本右边 (body, 取文本长度 (body) - 倒找文本 (body, “|”, , 假))
当前UTC = 取时间戳 (取现行时间 ())
如果真 (取绝对值 (当前UTC - 到长整数 (时间戳)) > TIMESTAMP_MAX_DIFF)
    返回 (“”)
返回 (取文本左边 (body, 倒找文本 (body, “|”, , 假) - 1))

4. 获取卡密开关

.版本 2
.子程序 取卡密开关, 文本型
.局部变量 url, 文本型
.局部变量 返回文本, 文本型

url = “https://www.keyt.cn/kami/你的用户名/check.php?act=get_switch&app=” + 应用名称 + “&t=” + 到文本 (取时间戳 (取现行时间 ()))
返回文本 = 到文本 (HTTP读文件 (url))
如果 (寻找文本 (返回文本, “CARD_ON”, , 假) > 0)
    返回 (“CARD_ON”)
否则
    返回 (“CARD_OFF”)

5. 验证卡密(核心)

.版本 2
.子程序 验证卡密, 文本型
.参数 卡密, 文本型
.参数 机器码, 文本型

.局部变量 url, 文本型
.局部变量 返回文本, 文本型

url = “https://www.keyt.cn/kami/你的用户名/check.php?card=” + 卡密 + “&mac=” + 机器码 + “&app=” + 应用名称 + “&heart=1&t=” + 到文本 (取时间戳 (取现行时间 ()))
返回文本 = 到文本 (HTTP读文件 (url))
返回 (校验响应 (返回文本, “”))

6. 心跳线程

.版本 2
.子程序 心跳线程
.局部变量 失败次数, 整数型

失败次数 = 0
判断循环首 (真)
    延迟 (50000)  ' 50秒
    如果 (验证卡密 (当前卡密, 当前机器码) = “”)
        失败次数 = 失败次数 + 1
        如果 (失败次数 ≥ 5)
            结束 ()
        否则
        失败次数 = 0
    判断循环尾 ()

7. 错误码中文对照

.版本 2
.子程序 错误码转中文, 文本型
.参数 错误代码, 文本型

判断 (错误代码 = “activate”)
    返回 (“激活成功”)
判断 (错误代码 = “valid”)
    返回 (“验证通过”)
判断 (错误代码 = “expired”)
    返回 (“卡密已过期”)
判断 (错误代码 = “banned”)
    返回 (“卡密已被禁用”)
判断 (错误代码 = “device_mismatch”)
    返回 (“设备不匹配”)
判断 (错误代码 = “online_limit_reached”)
    返回 (“在线设备数已满”)
默认
    返回 (错误代码)

8. 完整调用流程(建议)

  • ✅ 获取机器码
  • ✅ 调用 取卡密开关,如关闭则直接进入
  • ✅ 输入卡密,调用 验证卡密
  • ✅ 验证成功 → 启动心跳线程(50–59 秒)
  • ✅ 失败 5 次 → 自动退出

提示: 实际使用时请替换 你的用户名你的签名密钥 以及 应用名称 等自定义内容。完整对接流程可参考 文档首页