一、基础信息
| 项目 | 说明 |
| 接口地址 | https://dji.hxos7.xyz/api.php |
| 请求方式 | GET |
| 数据格式 | JSON (UTF-8) |
| 有效 KEY | 3298166885 304442802 (其他一律无效) |
| 签名算法 | X-Sign = HMAC_SHA256( action + "|" + timestamp + "|" + nonce , api_key ) |
每次请求必须在 Header 中携带三个参数:X-Api-Key(固定KEY)、X-Timestamp(秒级时间戳,5分钟内有效)、X-Sign(HMAC-SHA256 签名,hex 小写)。
nonce 为随机字符串(建议 8-16 位),放在 URL 参数中,参与签名计算。
二、搜索接口
GET /api.php?action=search&q={关键词}&limit={数量}&nonce={随机串}
请求参数
| 参数 | 类型 | 必填 | 说明 |
| action | string | 必填 | 固定值:search |
| q | string | 必填 | 搜索关键词,支持中文 / 英文 / 模糊大意,如"御3"、"Mavic 3 Pro"、"农业"、"植保"、"249克"、"穿越机",最长 60 字符 |
| limit | int | 可选 | 返回数量,默认 20,最大 50 |
| nonce | string | 必填 | 随机字符串,参与签名,每次请求必须不同 |
请求示例
GET /api.php?action=search&q=御3&limit=5&nonce=a1b2c3d4
Host: dji.hxos7.xyz
X-Api-Key: 3298166885
X-Timestamp: 1762953600
X-Sign: 8f3a2b...(HMAC_SHA256("search|1762953600|a1b2c3d4", "3298166885"))
成功响应示例 (code:0)
{
"code": 0,
"msg": "ok",
"data": [
{
"id": "mavic3pro",
"name_cn": "DJI Mavic 3 Pro",
"name_en": "DJI Mavic 3 Pro",
"category": "航拍旗舰",
"release": "2023-04-25",
"icon": "icons/mavic3pro.jpg"
},
{
"id": "mavic3classic",
"name_cn": "DJI Mavic 3 Classic",
"name_en": "DJI Mavic 3 Classic",
"category": "航拍旗舰",
"release": "2022-11-02",
"icon": "icons/mavic3classic.jpg"
},
{
"id": "mavic3",
"name_cn": "DJI Mavic 3",
"name_en": "DJI Mavic 3",
"category": "航拍旗舰",
"release": "2021-11-05",
"icon": "icons/mavic3.jpg"
},
{
"id": "mavic3e",
"name_cn": "DJI Mavic 3E 行业版",
"name_en": "DJI Mavic 3 Enterprise",
"category": "行业",
"release": "2022-09-27",
"icon": "icons/mavic3e.jpg"
},
{
"id": "mavic3t",
"name_cn": "DJI Mavic 3T 行业版",
"name_en": "DJI Mavic 3 Thermal",
"category": "行业",
"release": "2022-09-27",
"icon": "icons/mavic3t.jpg"
}
]
}
字段说明
| 字段 | 类型 | 说明 |
| code | int | 0 = 成功,其他 = 失败 |
| msg | string | 状态描述,缓存命中时返回 "ok (cached)" |
| data | array | 匹配的机型列表,按数据库顺序排列 |
| data[].id | string | 机型唯一标识,用于详情接口 |
| data[].name_cn | string | 中文名称 |
| data[].name_en | string | 英文名称 |
| data[].category | string | 类别:消费级 / 航拍旗舰 / 穿越机 / 影视 / 行业 / 农业 |
| data[].release | string | 发布时间,格式 YYYY-MM-DD |
| data[].icon | string | 产品图相对路径 |
更多搜索示例
q=农业 → 大疆 T50 / T25 / T40 农业无人飞机 (4条)
q=植保 → T50 / T25 / MG-1S (3条)
q=穿越机 → DJI FPV / Avata 2 (2条)
q=249克 → DJI Mini 4 Pro (1条)
q=精灵 → Phantom 4 / 4 Pro / 3 (4条)
q=哈苏 → Mavic 3 / Mavic 2 Pro (2条)
q=mini → Mini 4 Pro / 3 Pro / 3 / 2 SE / 2 / 4K / Mavic Mini (7条)
q=mavic → Mavic 全系 13 条
三、机型详情接口
GET /api.php?action=detail&id={机型id}&nonce={随机串}
请求参数
| 参数 | 类型 | 必填 | 说明 |
| action | string | 必填 | 固定值:detail |
| id | string | 必填 | 机型 id,从搜索接口的 data[].id 获取,如 mini4pro、mavic3pro、agras-t50 |
| nonce | string | 必填 | 随机字符串,参与签名 |
请求示例
GET /api.php?action=detail&id=mini4pro&nonce=x9y8z7w6
X-Api-Key: 3298166885
X-Timestamp: 1762953600
X-Sign: ...(HMAC_SHA256("detail|1762953600|x9y8z7w6", "3298166885"))
成功响应示例 (code:0)
{
"code": 0,
"msg": "ok",
"data": {
"id": "mini4pro",
"name_cn": "DJI Mini 4 Pro",
"name_en": "DJI Mini 4 Pro",
"category": "消费级",
"release": "2023-09-25",
"icon": "icons/mini4pro.jpg",
"params": {
"重量": "249 g",
"最大飞行时间": "34 分钟(普通电池)/ 45 分钟(长续航电池)",
"最大图传距离": "20 km",
"相机传感器": "1/1.3 英寸 CMOS,4800 万像素",
"视频规格": "4K/60fps HDR、4K/100fps 慢动作",
"避障系统": "全向主动避障(前/后/左/右/上/下)",
"图传": "DJI O4",
"最大抗风": "10.7 m/s(5 级风)",
"最大飞行速度": "16 m/s(运动挡)",
"存储": "支持 microSD 卡(最大 512GB)"
},
"accessories": [
"智能飞行电池",
"长续航智能飞行电池",
"双向充电管家",
"DJI RC 2 带屏遥控器",
"DJI RC-N2 遥控器",
"ND 镜套装(ND8/16/32/64)",
"螺旋桨",
"收纳包",
"充电头 30W"
]
}
}
字段说明
| 字段 | 类型 | 说明 |
| data.params | object | 详细参数,键为参数名(重量/续航/相机/避障等),值为具体描述,不同机型参数项不同,农业机有药箱容量/喷幅,行业机有防护等级/RTK 等 |
| data.accessories | string[] | 配件清单数组 |
错误响应示例 (机型不存在)
{
"code": 404,
"msg": "model not found",
"data": []
}
四、全机型列表接口
GET /api.php?action=models&nonce={随机串}
请求示例
GET /api.php?action=models&nonce=m5n4b3v2
X-Api-Key: 3298166885
X-Timestamp: 1762953600
X-Sign: ...(HMAC_SHA256("models|1762953600|m5n4b3v2", "3298166885"))
成功响应示例 (共 88 条,此处截取 3 条)
{
"code": 0,
"msg": "ok",
"data": [
{ "id": "mavic4pro", "name_cn": "DJI Mavic 4 Pro", "release": "2025-05-13", "category": "航拍旗舰" },
{ "id": "flip", "name_cn": "DJI Flip", "release": "2025-01-14", "category": "消费级" },
{ "id": "air3s", "name_cn": "DJI Air 3S", "release": "2024-10-15", "category": "消费级" }
// ... 共 88 款,按发布时间倒序
]
}
五、错误码一览
| HTTP 状态码 | code | msg | 原因 |
| 401 | 401 | invalid api key | KEY 无效(不是 3298166885 / 304442802) |
| 401 | 401 | timestamp expired | 时间戳超过 5 分钟有效期 |
| 401 | 401 | invalid signature | 签名错误,检查拼接顺序 action|ts|nonce |
| 429 | 429 | server busy / too many requests / rate limit | 触发限流:全站 200次/秒、单IP 30次/秒、单KEY 60次/秒 |
| 403 | 403 | forbidden | UA 被识别为爬虫,或触发蜜罐参数被封 IP |
| 403 | 403 | request blocked by waf | 请求含 SQL注入 / XSS / 路径穿越特征 |
| 403 | 403 | origin not allowed | 跨域来源不被允许 |
| 400 | 400 | bad query / bad request / bad host | 参数缺失或超长 |
| 404 | 404 | model not found | 机型 id 不存在 |
六、完整调用流程(Python 实测示例)
import time, hmac, hashlib, urllib.parse, urllib.request, json
API_KEY = '3298166885'
API_URL = 'https://dji.hxos7.xyz/api.php'
def call_api(action, **params):
ts = int(time.time())
nonce = 'n' + str(int(time.time()*1000))[-8:] # 随机串,每次不同
sign = hmac.new(API_KEY.encode(),
f'{action}|{ts}|{nonce}'.encode(),
hashlib.sha256).hexdigest()
params.update({'action': action, 'nonce': nonce})
url = API_URL + '?' + urllib.parse.urlencode(params)
req = urllib.request.Request(url, headers={
'X-Api-Key': API_KEY,
'X-Timestamp': str(ts),
'X-Sign': sign,
'User-Agent': 'Mozilla/5.0',
})
with urllib.request.urlopen(req, timeout=10) as r:
return json.loads(r.read().decode())
# 1. 搜索
r = call_api('search', q='御3', limit=5)
print(r['code'], r['msg']) # 0 ok
print(len(r['data'])) # 5
print(r['data'][0]['name_cn']) # DJI Mavic 3 Pro
# 2. 取第一条的 id 查详情
first_id = r['data'][0]['id']
d = call_api('detail', id=first_id)
print(d['data']['params']['重量']) # 958 g
print(d['data']['accessories']) # 配件清单数组
# 3. 全列表
m = call_api('models')
print(len(m['data'])) # 88
实测输出:
0 ok → 5 → DJI Mavic 3 Pro
958 g → ['智能飞行电池', '充电管家 100W', 'DJI RC Pro 带屏遥控器', ...]
43
注意事项:
1. nonce 每次请求必须不同,相同 nonce + 相同时间戳的重放请求会被签名机制拦截
2. 服务器时间必须准确,时间戳偏差超过 300 秒直接 401
3. 不要在前端公开页面暴露 KEY(本页仅供测试),生产环境建议由后端代理转发