按键精灵调用 HTTP 接口 + MD5 签名的完整代码。
// === 按键精灵卡密验证示例 ===
// 配置区
Dim API_BASE, USERNAME, APP_NAME, APP_KEY
API_BASE = "https://你的域名"
USERNAME = "你的用户名"
APP_NAME = "a"
APP_KEY = "32位程序密钥"
// MD5 函数(按键精灵自带或自行实现)
// 此处假设已导入 MD5 模块:Plugin md5.MD5
Function GetSign(act, card, mac, app, ts, appKey)
Dim raw
raw = act & "|" & card & "|" & mac & "|" & app & "|" & ts & "|" & appKey
GetSign = LCase(Plugin.md5.MD5(raw))
End Function
Function GetMachineCode()
// 简单示例:用磁盘序列号做机器码
Dim disk, wmi
Set wmi = GetObject("winmgmts:")
Set disk = wmi.InstancesOf("Win32_DiskDrive")
For Each d In disk
GetMachineCode = d.SerialNumber
Exit Function
Next
End Function
Function CheckCard(act, card, mac)
Dim ts, sign, url, http
ts = DateDiff("s", "1970-01-01 00:00:00", Now)
sign = GetSign(act, card, mac, APP_NAME, ts, APP_KEY)
url = API_BASE & "/kami/" & USERNAME & "/check.php" & _
"?act=" & act & "&app=" & APP_NAME & _
"&card=" & card & "&mac=" & mac & _
"&sign=" & sign & "&ts=" & ts
// 用 http.GetURL 抓 JSON
Set http = CreateObject("MSXML2.XMLHTTP")
http.open "GET", url, False
http.send
CheckCard = http.responseText
End Function
// === 主流程 ===
Dim card, mac, resp
card = ReadUIConfig("卡密输入框")
mac = GetMachineCode()
// 登录
resp = CheckCard("login", card, mac)
If InStr(resp, """code"":0") > 0 Then
TracePrint "登录成功"
// 心跳循环
Do While True
Delay 55 * 1000
resp = CheckCard("heartbeat", card, mac)
If InStr(resp, """code"":0") = 0 Then
TracePrint "心跳失败,退出"
Exit Do
End If
Loop
Else
MessageBox "卡密无效:" & resp
End If