Skip to content

卡密相关

卡密是 NullVerify 的核心授权方式。卡密具有完整的生命周期:激活 → 登录 → 心跳保活 → 退出/过期。

卡密登录

卡密首次登录,获取会话 Token。

POST /api/client/v1/card/login

请求参数

参数名类型必填说明
app_keystring应用标识
cardstring卡密
device_idstring设备唯一标识
timestampint当前时间戳(秒)
noncestring随机字符串(≤36 位)
signstring请求签名

成功响应

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
  }
}
字段类型说明
card_typestring卡密类型名称
tokenstring会话令牌,后续接口需携带
expiresstring到期时间
expires_tsint到期时间戳
configstring卡密配置信息
server_timeint服务器当前时间戳
hgint建议心跳间隔(秒)

相关错误码

错误码说明
10218卡密不可用(不存在)
10210卡密已过期
10212卡密已被冻结
10213卡密超过多开上限
10217超出可绑定设备上限
10230软件不存在,检查 app_key

卡密心跳

保持卡密会话活跃,需要定时调用。

POST /api/client/v1/card/heartbeat

请求参数

参数名类型必填说明
app_keystring应用标识
cardstring卡密
tokenstring登录返回的会话令牌
timestampint当前时间戳(秒)
noncestring随机字符串
signstring请求签名

成功响应

json
{
  "code": 0,
  "message": "ok",
  "result": {
    "expires": "2024-12-31 23:59:59",
    "expires_ts": 1735689599,
    "server_time": 1703001600
  }
}

相关错误码

错误码说明
10214登录状态已失效(超时/被踢/冻结)
10210卡密已过期

提示

建议使用登录返回的 hg 值作为心跳间隔。服务端实际超时时间由应用的 heartbeat_timeout_sec 配置决定,默认值为 1800 秒。


卡密退出

主动退出卡密会话。

POST /api/client/v1/card/logout

请求参数

参数名类型必填说明
app_keystring应用标识
cardstring卡密
tokenstring会话令牌
timestampint当前时间戳(秒)
noncestring随机字符串
signstring请求签名

成功响应

json
{
  "code": 0,
  "message": "ok"
}

注意

退出接口非幂等,对已失效的 token 重复调用会返回 10214


解绑设备

将卡密从指定设备上解绑。

POST /api/client/v1/card/unbind-device

请求参数

参数名类型必填说明
app_keystring应用标识
cardstring卡密
device_idstring要解绑的设备标识
tokenstring会话令牌
timestampint当前时间戳(秒)
noncestring随机字符串
signstring请求签名

成功响应

json
{
  "code": 0,
  "message": "ok"
}

解绑策略

开发者可在管理后台为每个应用配置解绑策略,解绑时除了清除设备绑定外,还会根据策略执行额外操作:

策略行为
仅解除绑定 (默认)仅清除设备绑定,不影响卡密状态和有效期
重置为未使用解绑后卡密恢复为未使用状态,可重新激活
扣减有效期解绑后扣减指定小时数的有效期
增加有效期解绑后增加指定小时数的有效期(鼓励解绑)

注意

当策略为"扣减有效期"且卡密剩余时间不足以扣除时,接口返回错误码 10257(卡密剩余时间不足以解绑扣除)。此时解绑不会执行,需先充值续费再解绑。

相关错误码

错误码说明
10218卡密不可用
10255该卡密不可解绑设备(解绑次数耗尽)
10257卡密剩余时间不足以解绑扣除

设置解绑密码

为卡密设置解绑密码,设置后可通过密码解绑设备。

POST /api/client/v1/card/unbind-password

请求参数

参数名类型必填说明
app_keystring应用标识
cardstring卡密
passwordstring解绑密码(6-10 位)
tokenstring会话令牌
timestampint当前时间戳(秒)
noncestring随机字符串
signstring请求签名

密码解绑

使用解绑密码解绑设备,无需登录状态。

POST /api/client/v1/card/unbind-by-password

请求参数

参数名类型必填说明
app_keystring应用标识
cardstring卡密
passwordstring解绑密码(6-10 位)
timestampint当前时间戳(秒)
noncestring随机字符串
signstring请求签名

相关错误码

错误码说明
10254解绑密码不正确
10255该卡密不可解绑设备
10257卡密剩余时间不足以解绑扣除

卡密充值

使用未激活的卡密为已激活的卡密充值续费。

POST /api/client/v1/card/recharge

请求参数

参数名类型必填说明
app_keystring应用标识
cardstring目标卡密(已激活)
use_cardstring充值卡密(未使用)
timestampint当前时间戳(秒)
noncestring随机字符串
signstring请求签名

相关错误码

错误码说明
10244不能对未使用的卡密进行充值
10240充值卡密不存在或已被使用
10241充值卡密已被使用
10256卡密多开配置不相等,不能充值

获取卡密配置

获取卡密的自定义配置信息。

GET /api/client/v1/card/config

请求参数

参数名类型必填说明
app_keystring应用标识
cardstring卡密
timestampint当前时间戳(秒)
noncestring随机字符串
signstring请求签名

成功响应

json
{
  "code": 0,
  "message": "ok",
  "result": {
    "config": "{\"vip_level\": 1}"
  }
}

修改卡密配置

修改卡密的自定义配置信息。

POST /api/client/v1/card/config

请求参数

参数名类型必填说明
app_keystring应用标识
cardstring卡密
configstring配置内容(JSON 字符串)
timestampint当前时间戳(秒)
noncestring随机字符串
signstring请求签名

对应实现
  • Handler: internal/module/card/handler_client.go
  • DTO: internal/module/card/dto_client.go

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