完整签名校验 + 心跳保活,生产级实现
.版本 2 .全局变量 SIGN_KEY, 文本型 .全局变量 TIMESTAMP_MAX_DIFF, 整数型 SIGN_KEY = "你的签名密钥" ' 从后台「修改签名密钥」获取 TIMESTAMP_MAX_DIFF = 120
.版本 2 .子程序 取MD5, 文本型 .参数 待加密文本, 文本型 .局部变量 脚本对象, 对象 .局部变量 结果, 文本型 脚本对象.创建 (“MSCE.ScriptControl”, ) 脚本对象.写属性 (“Language”, “JScript”) 结果 = 脚本对象.文本方法 (“Eval”, “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))
.版本 2 .子程序 取卡密开关, 文本型 .局部变量 url, 文本型 .局部变量 返回文本, 文本型 url = “https://www.keyt.cn/kami/你的用户名/check.php?act=get_switch&app=” + 应用名称 + “&t=” + 到文本 (取时间戳 (取现行时间 ())) 返回文本 = 到文本 (HTTP读文件 (url)) 如果 (寻找文本 (返回文本, “CARD_ON”, , 假) > 0) 返回 (“CARD_ON”) 否则 返回 (“CARD_OFF”)
.版本 2 .子程序 验证卡密, 文本型 .参数 卡密, 文本型 .参数 机器码, 文本型 .局部变量 url, 文本型 .局部变量 返回文本, 文本型 url = “https://www.keyt.cn/kami/你的用户名/check.php?card=” + 卡密 + “&mac=” + 机器码 + “&app=” + 应用名称 + “&heart=1&t=” + 到文本 (取时间戳 (取现行时间 ())) 返回文本 = 到文本 (HTTP读文件 (url)) 返回 (校验响应 (返回文本, “”))
.版本 2 .子程序 心跳线程 .局部变量 失败次数, 整数型 失败次数 = 0 判断循环首 (真) 延迟 (50000) ' 50秒 如果 (验证卡密 (当前卡密, 当前机器码) = “”) 失败次数 = 失败次数 + 1 如果 (失败次数 ≥ 5) 结束 () 否则 失败次数 = 0 判断循环尾 ()
.版本 2 .子程序 错误码转中文, 文本型 .参数 错误代码, 文本型 判断 (错误代码 = “activate”) 返回 (“激活成功”) 判断 (错误代码 = “valid”) 返回 (“验证通过”) 判断 (错误代码 = “expired”) 返回 (“卡密已过期”) 判断 (错误代码 = “banned”) 返回 (“卡密已被禁用”) 判断 (错误代码 = “device_mismatch”) 返回 (“设备不匹配”) 判断 (错误代码 = “online_limit_reached”) 返回 (“在线设备数已满”) 默认 返回 (错误代码)
取卡密开关,如关闭则直接进入验证卡密 提示: 实际使用时请替换 你的用户名、你的签名密钥 以及 应用名称 等自定义内容。完整对接流程可参考 文档首页。