稳定、快速、高效的 数据接口服务
当前接口状态 · 正常
接口地址: httpss://dzzg.club/api.php?api=heartbeat
返回格式:
请求方式:
请求示例:
请求参数说明:
| 名称 | 变量 | 必填 | 类型 | 说明 |
|---|---|---|---|---|
| 接口名称 | api | 是 | GET | 填写:heartbeat |
| 应用ID | app | 是 | GET | 填写后台应用的APPID,例如:&app=10001 |
| 卡密(二选一) | kami | 条件必填 | GET/POST | 卡密登录时必填,与kmlogon登录提交的卡密保持一致 |
| 应用账号(二选一) | appuser | 条件必填 | GET/POST | 应用用户登录时必填,与userlogon的user保持一致 |
| 设备码 | markcode | 是 | GET/POST | 必填,与登录时提交的设备码一致,用于唯一标识会话 |
| 时间戳 | t | 否 | GET/POST | 如果开启了[时间差效验]需提交当前时间戳 |
| 数据签名 | sign | 否 | GET/POST | 如果开启了[数据签名]需提交签名,计算方式同其他接口 |
| 加密数据 | data | 否 | GET/POST | 当应用开启了RC4/BASE64/RSA加密时提交的加密数据 |
返回参数说明:
| 名称 | 类型 | 说明 |
|---|---|---|
| 字段名 | 类型 | 说明 |
| code | Int | 状态码,200=成功,其他=失败(详见错误码表) |
| msg | Object/String | 成功时为心跳返回数据对象,失败时为错误描述字符串 |
| time | Int | 服务器当前Unix时间戳(秒) |
| check | String | 二次校验值:MD5(time + appkey + value),客户端可校验防返回数据伪造 |
| 字段名 | 类型 | 说明 |
|---|---|---|
| interval | Int | 建议下次心跳间隔(秒),客户端请按此值设置定时器,默认60秒 |
| timeout | Int | 心跳超时时间(秒),超过此时间未收到心跳服务器视为离线,默认180秒 |
| server_time | Int | 服务器时间戳(秒),可用于客户端校时 |
| online_count | Int | 当前应用实时在线人数,客户端可显示在UI上 |
| next_heartbeat | Int | 建议下次心跳的绝对时间戳,server_time + interval |
返回示例:
重要提示
开始前请先完成:
1. 在站点根目录执行install_heartbeat.sql导入数据表和配置
2. 进入管理员后台 → 系统设置 → 心跳配置(set.php?mod=heartbeat)确认已启用
3. 在应用管理中确认应用的"心跳开关"已开启(默认开启)接口调用示例(易语言 / 火山 / Lua通用逻辑)
' ================================================ ' 步骤1:先正常登录(kmlogon 或 userlogon) ' ================================================ 登录结果 = 登录("kmlogon", 应用ID, 卡密, 机器码) 如果 登录结果.code ≠ 200 则 提示("登录失败:" + 登录结果.msg) 结束程序 结束如果 VIP时间 = 登录结果.msg.vip ' 保存卡密到期时间 ' ================================================ ' 步骤2:启动心跳定时器(建议首次登录后立即发一次心跳) ' ================================================ 子程序 心跳_执行() 变量 参数 = "api=heartbeat&app=" + 到文本(应用ID) 变量 提交 = "kami=" + 卡密 + "&markcode=" + 机器码 变量 返回值 = HTTP访问("https://你的域名/api.php?" + 参数, 提交, 方法_POST) 变量 结果 = JSON解析(返回值) 如果 结果.code = 200 则 ' 心跳成功:根据服务器返回值动态调整下次心跳间隔 下次间隔 = 结果.msg.interval ' 建议使用服务器返回的interval值 在线人数 = 结果.msg.online_count 下次心跳时间 = 结果.msg.next_heartbeat UI.显示("在线:" + 到文本(在线人数) + "人") 否则 ' 心跳失败:根据错误码处理 判断 结果.code 201: 提示("卡密已过期,程序即将退出"); 结束程序 151: 提示("卡密已被禁用"); 结束程序 169: 提示("IP不一致,已被踢出"); 结束程序 180: 提示("服务端未启用心跳"); 停止定时器 ' 不影响使用 默认: 日志("心跳失败 code=" + 到文本(结果.code) + " " + 结果.msg) 结束判断 结束如果 结束子程序 ' ================================================ ' 步骤3:定时器设置 ' ================================================ 首次调用(心跳_执行) ' 登录后立刻执行1次,确保进入在线列表 设置定时器(心跳_执行, 下次间隔 * 1000) ' 毫秒,默认60秒 ' ================================================ ' 步骤4(可选):程序退出时可以最后发送一个离线提示 ' ================================================ ' 实际无需调用登出接口,超过timeout服务器自动判离线, ' 但是你可以把定时器间隔在程序退出时取消,避免后台残留请求。
CURL命令行测试示例
curl -X POST "https://你的域名/api.php?api=heartbeat&app=10001" \ -d "kami=MoamXBeiChen&markcode=test-machine-code-001"
Python 调用示例
import time import requests import hashlib API_BASE = "https://你的域名/api.php" APPID = 10001 KAMI = "你的卡密" MARKCODE = "测试设备码001" def heartbeat(): """发送一次心跳,返回 (是否成功, 建议下次间隔秒数, 错误信息)""" params = {"api": "heartbeat", "app": APPID} data = {"kami": KAMI, "markcode": MARKCODE} try: r = requests.post(API_BASE, params=params, data=data, timeout=8) j = r.json() if j["code"] == 200: return True, j["msg"]["interval"], None, j["msg"]["online_count"] else: return False, 60, f"code={j['code']} {j['msg']}", 0 except Exception as e: return False, 60, f"网络异常:{str(e)}", 0 if __name__ == "__main__": print("[BC云验证] 心跳测试") while True: ok, interval, err, online = heartbeat() if ok: print(f"✅ 心跳OK | 下次{interval}s后 | 当前在线:{online}人") else: print(f"❌ 心跳失败: {err}") if "卡密已到期" in err or "禁用" in err: break # 致命错误退出 time.sleep(interval)
错误码格式说明:
| 名称 | 类型 | 说明 |
|---|---|---|
| 101 | String | 应用不存在 |
| 102 | String | 应用已关闭 |
| 171 | String | 接口维护中 |
| 172 | String | 接口未添加或不存在 |
| 错误码 | 类型 | 中文描述 / 处理建议 |
| 200 | 成功 | 心跳成功,按返回的 interval 值设置下次心跳时间 |
| 100 | 参数 | 应用配置未加载,请确保 GET 参数 app 和 api 正确传递 |
| 101 | 参数 | 应用不存在(appid错误),请检查&app=后面的数值 |
| 102 | 配置 | 应用已被关闭,请联系应用开启者开启 |
| 112 | 参数 | markcode 为空,心跳接口必须传设备码,用于唯一标识会话 |
| 180 | 配置 | 心跳验证机制未启用,请站长在 [后台→设置→心跳配置] 中开启总开关,或应用开启独立心跳 |
| 181 | 参数 | 缺少kami或appuser参数,必须传登录类型标识(二选一) |
| 148 | 卡密 | 卡密为空 |
| 149 | 卡密 | 卡密不存在(不属于当前应用),请核对kami |
| 150 | 卡密 | 卡密已绑定其他设备(如果开启了单设备登录) |
| 151 | 卡密 | 卡密已禁用,建议直接退出程序提示用户联系客服 |
| 169 | 网络 | IP不一致(若开启IP一致性校验),移动网络慎用此功能 |
| 122 | 账号 | 应用账号不存在(appuser登录时) |
| 114 | 账号 | 应用账号被禁用(appuser登录时) |
| 201 | 过期 | 卡密已到期 / 次数用尽,建议退出程序或跳到充值页 |
| 104 | 签名 | 签名为空,应用开启了数据签名请传sign |
| 105 | 时间 | 时间戳过期,请同步客户端时间 |
| 106 | 签名 | 签名有误,签名算法请参考文档首页的Sign计算示例 |
代码示例:
心跳成功返回示例 (code=200)
{ "code": 200, "msg": { "interval": 60, "timeout": 180, "server_time": 1756502400, "online_count": 128, "next_heartbeat": 1756502460 }, "time": 1756502400, "check": "9a9f8d6e3f1c2a4b5c7d8e9f0a1b2c3d" }
卡密已过期返回示例 (code=201)
{ "code": 201, "msg": "卡密已到期", "time": 1756502400, "check": "0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e" }
心跳机制未启用 (code=180)
{ "code": 180, "msg": "心跳验证机制未启用", "time": 1756502400, "check": "1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a" }