/third/product/online — 设备在线状态查询
基本信息
| 项目 |
说明 |
| 路径 |
/third/product/online |
| 方法 |
GET / POST |
| 鉴权 |
Third 鉴权(token + t,详见下方签名算法) |
鉴权参数(Query 必带)
| 参数 |
类型 |
必填 |
说明 |
t |
int64 |
是 |
当前 Unix 时间戳(秒),与服务器时间差不超过 2 小时,否则返回 {"code":400,"msg":"请求已过期"} |
token |
string |
是 |
请求签名,由 secret + 所有 Query 参数计算得出(见下方签名算法),校验失败返回 {"code":401,"msg":"非法请求"} |
签名算法
计算步骤:
- 将所有 Query 参数(含
productId、t 等)加上 secret 组成键值对集合
- 按 字母序 排列所有 key
- 拼接为
key1=value1&key2=value2&... 格式的字符串(注:不进行 URL encode,直接取原始值)
- 对该字符串做 MD5,结果即为
token
⚠️ secret 仅参与签名计算,不可直接出现在请求参数中。
1. 单个产品状态查询
请求
GET /third/product/online?productId=SN001&t=1750262400&token=abc123def456
| 参数 |
位置 |
类型 |
必填 |
说明 |
productId |
Query |
string |
是 |
产品序列号 |
t |
Query |
int64 |
是 |
当前 Unix 秒级时间戳 |
token |
Query |
string |
是 |
签名 |
响应
{ "status": 1 }
| 字段 |
类型 |
说明 |
status |
int32 |
1 = 在线,0 = 离线 |
2. 批量产品状态查询
当 productId 为空时,读取 Body 内容进行批量查询。需使用 POST 方法,签名参数仍需放在 Query 中。
请求
POST /third/product/online?t=1750262400&token=abc123def456
Body: SN001,SN002,SN003
| 参数 |
位置 |
类型 |
必填 |
说明 |
t |
Query |
int64 |
是 |
当前 Unix 秒级时间戳 |
token |
Query |
string |
是 |
签名(基于所有 Query 参数计算) |
| — |
Body |
string |
是 |
逗号分隔的序列号列表 |
响应
{
"SN001": 1,
"SN002": 0,
"SN003": 1
}
| 字段 |
类型 |
说明 |
{key} |
int32 |
键为序列号,1 = 在线,0 = 离线 |
边界情况
| 场景 |
响应 |
| Body 为空 |
{} |
| 序列号含前后空格 |
自动 TrimSpace |
| 连续逗号产生的空串 |
跳过 |
签名计算示例(伪代码)
// 假设 secret = "e10adc3949ba59abbe56e057f20f883e"
// 请求参数: productId=SN001, t=1750262400
params := url.Values{
"productId": {"SN001"},
"t": {"1750262400"},
"secret": {"e10adc3949ba59abbe56e057f20f883e"}, // 仅参与计算,不发送
}
// 按 key 字母序拼接: productId=SN001&secret=e10ad...&t=1750262400
str := "productId=SN001&secret=e10adc3949ba59abbe56e057f20f883e&t=1750262400"
token = MD5(str) // → 签名结果
调用示例(curl)
单个查询:
# 1. 计算 token(需自行实现签名逻辑)
TIMESTAMP=$(date +%s)
# token = MD5("productId=SN001&secret=${SECRET}&t=${TIMESTAMP}")
curl "http://host:port/third/product/online?productId=SN001&t=${TIMESTAMP}&token=${TOKEN}"
批量查询:
curl -X POST \
"http://host:port/third/product/online?t=${TIMESTAMP}&token=${TOKEN}" \
-d "SN001,SN002,SN003"