/v3/single_login/{appid}| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| card_code | string | 是 | 卡密(激活码) |
| device_code | string | 条件必填 | 设备标识(机器码) 程序开启设备验证时必填 |
| timestamp | int | 条件必填 | Unix时间戳(秒) 开启TimeCheck时必填 |
| sign | string | 条件必填 | 请求签名 开启SignMode时必填 |
{
"card_code": "ABC123DEF456",
"device_code": "DEVICE_12345678",
"timestamp": 1699999999,
"sign": "abc123def456789..."
}// 上述JSON经过RSA加密和Base64编码后的数据
aGVsbG8gd29ybGQgaGVsbG8gd29ybGQgaGVsbG8gd29ybGQ=...{
"code": 200,
"message": "登录成功",
"data": {
"card_id": 12345,
"expire_time": "2025-12-31 23:59:59",
"time_length": "30天",
"remaining_seconds": 2592000,
"device_code": "DEVICE_12345678",
"unbind_count": 0,
"extra_data": "",
"heartbeat_code": "abc123def456789abcdef123456789abc"
},
"timestamp": 1699999999,
"nonce": "4614eccbee8f10a8f3854032c86a2ba8",
"sign": "decc09615d384fb6b630b788e1623b28"
}| 字段名 | 类型 | 说明 |
|---|---|---|
| card_id | int | 卡密ID |
| expire_time | string | 到期时间 格式:YYYY-MM-DD HH:mm:ss |
| time_length | string | 时长描述 如:30天、1个月、永久 |
| remaining_seconds | int | 剩余秒数 次数卡返回剩余次数 |
| device_code | string | 设备标识 |
| unbind_count | int | 已解绑次数 |
| extra_data | string | 额外数据(hex编码) |
| heartbeat_code | string | 心跳状态码 重要:必须保存,用于后续心跳验证 |
| 错误码 | 错误消息 | 说明 |
|---|---|---|
| 404 | 卡密不存在 | 输入的卡密不存在或已被删除 |
| 405 | 卡密已禁用 | 卡密已被封禁,无法使用 |
| 406 | 卡密已过期 | 卡密使用时长已到期 |
| 408 | 卡密次数已用完 | 次数卡的次数已用完 |
| 409 | 设备不匹配 | 当前设备与绑定设备不一致 |
| 410 | 需要设备标识 | 程序开启了设备验证,必须传入device_code |
| 422 | 参数错误 | 缺少必要参数或参数格式错误 |
| 427 | IP不匹配 | IP验证失败 |
| 430 | 卡密登录被禁止 | 禁止空机器码登录 |
{
"code": 404,
"message": "卡密不存在",
"data": null,
"timestamp": 1699999999,
"nonce": "abc123..."
}重要提示 1.首次使用卡密时会自动激活并绑定设备 2.heartbeat_code必须保存,用于后续心跳验证3.如果程序开启了设备验证, device_code必填4.登录成功后建议立即启动心跳验证: api.startHeartbeat(30, 5)5.SDK会自动保存登录状态,可通过 api.isLoggedIn()检查
ro.serialno - 序列号ro.boot.serialno - 启动序列号ro.build.id - Build ID' 字符