← 返回文档首页

🐍 Python 对接示例

使用 requests + hashlib 实现完整的登录、心跳、解绑流程。

import hashlib
import time
import requests

API_BASE = "https://你的域名"
USERNAME = "你的用户名"     # 后台用户名
APP_NAME = "a"             # 应用名
APP_KEY  = "32位程序密钥"   # 在后台「应用详情」查看


def md5_sign(act: str, card: str, mac: str, app: str, ts: int, app_key: str) -> str:
    raw = f"{act}|{card}|{mac}|{app}|{ts}|{app_key}"
    return hashlib.md5(raw.encode("utf-8")).hexdigest()


def call(act: str, card: str = "", mac: str = "") -> dict:
    ts = int(time.time())
    sign = md5_sign(act, card, mac, APP_NAME, ts, APP_KEY)
    url = f"{API_BASE}/kami/{USERNAME}/check.php"
    params = {"act": act, "app": APP_NAME,
              "card": card, "mac": mac, "sign": sign, "ts": ts}
    r = requests.get(url, params=params, timeout=10)
    return r.json()


def get_info() -> dict:
    url = f"{API_BASE}/kami/{USERNAME}/check.php"
    r = requests.get(url, params={"act": "get_info", "app": APP_NAME}, timeout=10)
    return r.json()["data"]


def get_machine_code() -> str:
    """获取机器码(跨平台示例)"""
    import platform, uuid
    raw = f"{platform.node()}-{uuid.getnode()}"
    return hashlib.md5(raw.encode()).hexdigest().upper()


if __name__ == "__main__":
    info = get_info()
    print("公告:", info["notice"])
    print("最新版本:", info["version"])

    card = "ABCD-EFGH-JKLM-NPQR"     # 用户输入的卡密
    mac  = get_machine_code()
    resp = call("login", card, mac)
    if resp["code"] == 0:
        d = resp["data"]
        print(f"登录成功!剩余 {d['remaining_seconds']} 秒")
        # 进入主循环:每 55 秒一次心跳
        while True:
            time.sleep(55)
            r = call("heartbeat", card, mac)
            if r["code"] != 0:
                print("心跳失败:", r["msg"])
                break
    else:
        print("登录失败:", resp["msg"])