Skip to content

快速开始

本页将帮助你在 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 秒。

下一步

面向脚本与插件开发者的网络验证系统