外观
快速开始
本页将帮助你在 5 分钟内完成首次 API 调用。
1. 获取凭证
登录管理后台,在「应用管理」中创建应用,获取以下信息:
| 字段 | 说明 |
|---|---|
app_key | 应用唯一标识,公开参数 |
app_secret | 应用密钥,用于签名计算,请勿泄露 |
2. 构造签名
所有客户端 API 请求都需要携带签名参数 sign,详细算法见 签名算法。
签名计算公式(MD5 模式):
sign = md5(http_method + host + path + sorted_params + app_secret)3. 发起首次请求
以卡密登录为例:
python
import hashlib
import time
import uuid
import requests
app_key = "your_app_key"
app_secret = "your_app_secret"
card = "your_card_no"
device_id = "device_001"
# 构造公共参数
timestamp = str(int(time.time()))
nonce = str(uuid.uuid4())
# 按 key 字典序排列参数
params = {
"app_key": app_key,
"card": card,
"device_id": device_id,
"nonce": nonce,
"timestamp": timestamp,
}
sorted_params = "&".join(f"{k}={v}" for k, v in sorted(params.items()))
# 计算签名
raw = "POST" + "api.nullverify.com" + "/api/client/v1/card/login" + sorted_params + app_secret
sign = hashlib.md5(raw.encode()).hexdigest()
params["sign"] = sign
# 发送请求
resp = requests.post("http://api.nullverify.com/api/client/v1/card/login", data=params)
print(resp.json())javascript
let appKey = "your_app_key"
let appSecret = "your_app_secret"
let card = "your_card_no"
let deviceId = device.getAndroidId()
let timestamp = Math.floor(Date.now() / 1000).toString()
let nonce = java.util.UUID.randomUUID().toString()
// 按 key 字典序排列参数
let params = {
app_key: appKey,
card: card,
device_id: deviceId,
nonce: nonce,
timestamp: timestamp,
}
let sortedParams = Object.keys(params).sort()
.map(k => k + "=" + params[k]).join("&")
// 计算签名
let raw = "POST" + "api.nullverify.com" + "/api/client/v1/card/login" + sortedParams + appSecret
let sign = java.security.MessageDigest.getInstance("MD5")
sign.update(new java.lang.String(raw).getBytes())
let signHex = Array.from(sign.digest())
.map(b => ('0' + ((b & 0xff).toString(16))).slice(-2)).join('')
params.sign = signHex
let resp = http.post("http://api.nullverify.com/api/client/v1/card/login", params)
log(resp.body.json())4. 解析响应
成功响应示例:
json
{
"code": 0,
"message": "ok",
"result": {
"card_type": "月卡",
"token": "abc123...",
"expires": "2024-12-31 23:59:59",
"expires_ts": 1735689599,
"config": "{}",
"server_time": 1703001600,
"hg": 30
}
}| 字段 | 说明 |
|---|---|
code | 返回码,0 表示成功 |
message | 返回消息 |
result | 业务数据 |
token | 会话令牌,后续心跳和退出接口需要携带 |
hg | 建议的心跳间隔(秒) |
5. 保持心跳
登录成功后,需要定时发送心跳包以保持会话活跃:
python
import time
while True:
time.sleep(30) # 按 hg 字段建议的间隔
# 构造签名(同上)...
resp = requests.post(
"http://api.nullverify.com/api/client/v1/card/heartbeat",
data={"app_key": app_key, "card": card, "token": token,
"nonce": nonce, "timestamp": timestamp, "sign": sign}
)
if resp.json()["code"] != 0:
print("心跳失败:", resp.json()["message"])
break提示
心跳间隔建议使用登录响应中的 hg 字段值。服务端实际超时时间由应用的 heartbeat_timeout_sec 配置决定,默认值为 1800 秒。