设备指纹查询接口用于查询设备指纹与其他设备信息，以及设备的风险检测结果。

## 接口说明

### 鉴权说明
为了保障接口调用安全，每一次请求都需要包含签名信息（signature参数），以验证用户身份。目前支持MD5加密算法。具体签名方法见 [接口鉴权](https://support.dun.163.com/documents/609099986339037184?docId=624010514876456960)。

## 请求

### 请求地址
|名称|值|
|----|----|
|HTTP URL|https://fp-query.dun.163.com/v1/device/query|
|HTTP Method|POST|

### 请求头

|名称|类型|必填|描述|
|----|----|----|----|
|Content-Type|String|是|固定值："**application/json**"|

### 请求参数

请求参数由公共参数和业务参数两部分组成，公共参数见 [请求公共参数](https://support.dun.163.com/documents/609099986339037184?docId=632312387038056448)

#### 业务参数

|名称|类型|必填|描述|
|----|----|----|----|
|token|String|是|上传设备数据时，设备指纹SDK返回的token|

注：客户端超时场景下，token会很长。详见 [客户端说明文档](https://support.dun.163.com/documents/609099986339037184?docId=609101009640161280)

### 请求体示例
注意：请求体为 **json** 格式！
```json
{
  "businessId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "token": "veWSpVfLVgRAHxVEUBN7teeWD0jxwDSv",
  "version": "v1",
  "nonce": "556cdf9ef6ed4ae68e7639c537cac548",
  "timestamp": 1636363470000,
  "secretId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "signature": "59000d09865b046c0735b7079c2ed2e6"
}
```

## 响应

### 响应结果
响应字段如下（响应公共字段已省略，详见 [响应公共字段](https://support.dun.163.com/documents/609099986339037184?docId=624010423698718720)）：

<md-attention>
注意：当checkResult方法返回风险字段为空时，表示未检测到异常。请注意空指针异常。
</md-attention>



|名称|类型|必须返回|描述|
|----|----|----|----|
|taskId|String|是|此次查询操作的唯一标识|
|tokenCreationTime|Number|否|token生成时间。UNIX时间戳，单位：毫秒|
|device|Object|否|设备相关信息|
|&emsp;∟deviceId|String|是|设备指纹ID|
|&emsp;∟sdkType|Number|是|客户端平台类型。1-Web，2-Android，3-iOS，4-小程序|
|&emsp;∟checkResult|Object|否|设备风险检测结果|
|&emsp;&emsp;∟isTampered|Number|否|设备数据上传请求是否被篡改。0或null-否，其它值表示被篡改|
|&emsp;&emsp;∟isSimulator|Number|否|是否为模拟器。0或null-否，其它值表示模拟器|
|&emsp;&emsp;∟isRooted|Number|否|设备是否被Root或越狱。0或null-否，其它值表示被Root或越狱|
|&emsp;&emsp;∟isMultiRun|Number|否|是否为多开。0或null-否，其它值表示为多开|
|&emsp;&emsp;∟isVpn|Number|否|是否使用VPN。0或null-否，其它值表示使用VPN|
|&emsp;&emsp;∟isProxy|Number|否|是否使用代理。0或null-否，其它值表示使用代理|
|&emsp;&emsp;∟isHooked|Number|否|是否存在hook。0或null-否，其它值表示存在hook|
|&emsp;&emsp;∟isInjected|Number|否|是否存在注入。0或null-否，其它值表示存在注入|
|&emsp;&emsp;∟isDebugged|Number|否|是否在调试。0或null-否，其它值表示在调试|
|&emsp;&emsp;∟isXposed|Number|否|是否安装了xposed。0或null-否，其它值表示安装了xposed|
|&emsp;&emsp;∟isCloud|Number|否|是否为云手机。0或null-否，其它值表示云手机|
|&emsp;&emsp;∟isSuspectCloud|Number|否|是否疑似云手机。0或null-否，其它值表示疑似云手机|
|&emsp;&emsp;∟isRiskRom|Number|否|是否为改机ROM。0或null-否，其它值表示为改机ROM|
|&emsp;&emsp;∟isVm|Number|否|是否为虚拟机。0或null-否，其它值表示为虚拟机|
|&emsp;&emsp;∟isModify|Number|否|是否为改机。0或null-否，其它值表示为改机|
|&emsp;&emsp;∟isModifyApp|Number|否|是否安装有改机类工具。0或null-否，其它值表示有安装|
|&emsp;&emsp;∟isFlash|Number|否|是否为刷机。0或null-否，其它值表示为刷机|
|&emsp;&emsp;∟isAutoTouch|Number|否|是否安装有点击工具。0或null-否，其它值表示有安装|
|&emsp;&emsp;∟isControlApp|Number|否|是否安装有群控类应用。0或null-否，其它值表示有安装|
|&emsp;&emsp;∟isScript|Number|否|是否有脚本工具。0或null-否，其它值表示有脚本工具|
|&emsp;&emsp;∟securityScore|Number|否|安全评分|
|&emsp;&emsp;∟isCydiaSubstrate|Number|否|CydiaSubstrate。0或null-否，其它值-是|
|&emsp;&emsp;∟isM1|Number|否|是否为m1。0或null-否，其它值-是|
|&emsp;&emsp;∟isSpeedUp|Number|否|是否使用加速器。0或null-否，其它值表示使用了加速器|
|&emsp;&emsp;∟isAntiJailbreak|Number|否|是否安装了反越狱插件。0或null-否，其它值表示安装了反越狱插件|

### 响应体示例

```json
{
    "code": 200,
    "msg": "ok",
    "data": {
        "taskId": "1721c349a446483986180c207ca6b7c2",
        "tokenCreationTime": 1638243086015,
        "device": {
            "deviceId": "WRp7Zryq6k1AGFVQARcutMIaP/Sw6Jlq",
            "sdkType": 2,
            "checkResult": {
                "isTampered": 1,
                "isSimulator": 1,
                "isRooted": 1,
                "isMultiRun": 1,
                "isVpn": 1,
                "isProxy": 1,
                "isHooked": 1,
                "isInjected": 1,
                "isDebugged": 1,
                "isXposed": 1,
                "isCloud": 1,
                "isSuspectCloud": 1,
                "isRiskRom": 1,
                "isVm": 1,
                "isModify": 1,
                "isModifyApp": 1,
                "isFlash": 1,
                "isAutoTouch": 1,
                "isControlApp": 1,
                "isScript": 1,
                "securityScore": 1,
                "isCydiaSubstrate": 1,
                "isM1": 1,
                "isSpeedUp": 1,
                "isAntiJailbreak": 1
            }
        }
    }
}
```

### 错误码

错误码有公共错误码和业务错误码两部分组成，公共错误码见 [响应返回码](https://support.dun.163.com/documents/609099986339037184?docId=624010485757640704)

| HTTP状态码 | 错误码code | 描述 | 排查建议 |
|----|----|----|----|
|200|200|成功|N/A|

## 接入示例代码

### 开发工具集（SDK）接入

为方便 JAVA 开发者调试和接入API，我们提供了配套的[开发工具集（SDK）](https://support.dun.163.com/download/609099986339037184?productName=%E8%AE%BE%E5%A4%87%E6%8C%87%E7%BA%B9&parentName=%E4%B8%9A%E5%8A%A1%E5%AE%89%E5%85%A8)，用于简化API接入流程。SDK中各接口调用方式基本相同，接入方式统一，并提供了一些接口调用过程中常见的异常处理方案。以下介绍了SDK的使用流程，以及使用SDK的简单示例。


* 准备工作

准备步骤详见[通用步骤](https://support.dun.163.com/documents/609099986339037184?docId=682781209345695744)


* 使用方法

该接口的使用方法可参考[SDK demo](https://github.com/yidun/yidun-java-sdk/blob/main/yidun-java-sdk-demo/src/main/java/com/netease/yidun/sdk/fingerprint/DeviceQueryDemo.java)