API 接口文档

DJI 全系列无人机信息查询接口 · 完整请求 / 响应示例

返回查询主页

一、基础信息

项目说明
接口地址https://dji.hxos7.xyz/api.php
请求方式GET
数据格式JSON (UTF-8)
有效 KEY3298166885 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={随机串}

请求参数

参数类型必填说明
actionstring必填固定值:search
qstring必填搜索关键词,支持中文 / 英文 / 模糊大意,如"御3"、"Mavic 3 Pro"、"农业"、"植保"、"249克"、"穿越机",最长 60 字符
limitint可选返回数量,默认 20,最大 50
noncestring必填随机字符串,参与签名,每次请求必须不同

请求示例

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"
    }
  ]
}

字段说明

字段类型说明
codeint0 = 成功,其他 = 失败
msgstring状态描述,缓存命中时返回 "ok (cached)"
dataarray匹配的机型列表,按数据库顺序排列
data[].idstring机型唯一标识,用于详情接口
data[].name_cnstring中文名称
data[].name_enstring英文名称
data[].categorystring类别:消费级 / 航拍旗舰 / 穿越机 / 影视 / 行业 / 农业
data[].releasestring发布时间,格式 YYYY-MM-DD
data[].iconstring产品图相对路径

更多搜索示例

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={随机串}

请求参数

参数类型必填说明
actionstring必填固定值:detail
idstring必填机型 id,从搜索接口的 data[].id 获取,如 mini4pro、mavic3pro、agras-t50
noncestring必填随机字符串,参与签名

请求示例

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.paramsobject详细参数,键为参数名(重量/续航/相机/避障等),值为具体描述,不同机型参数项不同,农业机有药箱容量/喷幅,行业机有防护等级/RTK 等
data.accessoriesstring[]配件清单数组

错误响应示例 (机型不存在)

{
  "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 状态码codemsg原因
401401invalid api keyKEY 无效(不是 3298166885 / 304442802)
401401timestamp expired时间戳超过 5 分钟有效期
401401invalid signature签名错误,检查拼接顺序 action|ts|nonce
429429server busy / too many requests / rate limit触发限流:全站 200次/秒、单IP 30次/秒、单KEY 60次/秒
403403forbiddenUA 被识别为爬虫,或触发蜜罐参数被封 IP
403403request blocked by waf请求含 SQL注入 / XSS / 路径穿越特征
403403origin not allowed跨域来源不被允许
400400bad query / bad request / bad host参数缺失或超长
404404model 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(本页仅供测试),生产环境建议由后端代理转发