公众号检测任务结果获取接口，用于将公众号任务机器检测任务结果主动推送给客户。客户需要按照以下规范实现接收结果的接口。

## 接口说明

公众号任务检测结果主动推送模式以任务为维度，将机器检测结果推送给客户，需客户在调用公众号任务接口时设置回调地址callbackUrl参数，客户方需保证回调接收接口的可用性和稳定性，确保能正常接收推送过来的结果数据。

### 鉴权说明

客户接口可以通过业务开通时易盾分配的密钥信息字段进行接口鉴权，鉴权粒度是否要精确到业务级别，用户可以根据需要自行决定，请参见[接口鉴权](https://support.dun.163.com/documents/606191408732381184?docId=606194710786285568)

### 接入说明

- 协议说明：检测接口请求参数中指定了回调地址参数callbackUrl(即一个http(s)协议接口的URL)。主动推送接口需要支持http协议，支持POST方法，传输数据编码采用utf-8
- 接口性能：推送结果接口默认超时时间为2s，为了保证顺利接收数据，客户需保证接收接口可用性和性能稳定
- 失败重试：客户接口处理结果数据，并返回应答。如果客户接口请求异常，超时或收到的应答不符合规范，易盾会认为推送失败；我们将每隔10分钟推送一次，如果一直失败，持续一天后不再推送
- 幂等性：结果推送时同样的结果可能会多次请求客户接口。客户接口需要保证幂等性，能够正确处理重复结果数据

### 接口耗时

客户接收接口需保证接收接口可用性和性能稳定，易盾请求超时时间为2s，客户接口尽量保证在1s内返回应答，如有特殊要求，可联系易盾运营适当调整超时时间

## 请求

### 请求地址

| 名称        | 值                  |
| ----------- | ------------------- |
| HTTP URL    | 回调地址callbackUrl |
| HTTP Method | POST                |

### 请求头

| 名称         | 类型   | 必填 | 描述                                        |
| ------------ | ------ | ---- | ------------------------------------------- |
| Content-Type | String | 是   | 固定值："application/x-www-form-urlencoded" |

### 请求参数

| 名称             | 类型     | 必填 | 描述                                                         |
| ---------------- | -------- | ---- | ------------------------------------------------------------ |
| secretId         | String   | 是   | 产品秘钥 id ，由易盾内容安全云服务分配，产品标识             |
| signature        | String   | 是   | 请求签名，用来验证此次请求的合法性，具体算法见[接口鉴权](https://support.dun.163.com/documents/606191408732381184?docId=606194710786285568) |
| callbackData     | Object   | 是   | 主动推送结果数据，格式为json字符串                           |
| ∟antispam        | Object   | 否   | 机器检测结果，格式为json字符串                               |
|  ∟jobid          | Number   | 是   | 创建公众号任务时返回的任务id，可用于查询任务详情                                |
|  ∟taskId          | String   | 是   | 任务唯一标识，将弃用                                 |
|  ∟checkStatus     | Number   | 是   | 检测状态: 2-检测成功，3-检测失败                             |
|  ∟checkTime       | Number   | 是   | 检测时间,格式为毫秒时间戳,如:1634204125521                   |
|  ∟resource        | String   | 是   | 检测公众号账号                                             |
|  ∟resourceName    | String   | 是   | 检测公众号名称                                             |
|  ∟resourceType    | String   | 是   | 检测资源类型，2-公众号                                      |
|  ∟reportUrl       | String   | 否   | 网站检测报告url，检测失败数据无此结果                        |
|  ∟suggestion      | Number   | 否   | 建议动作:0-通过，1-嫌疑，2-不通过，检测失败数据无此结果      |
|  ∟totalUrlCount   | Number   | 是   | 检测总url数量                                                |
|  ∟suspectUrlCount | Number   | 是   | 嫌疑url数量                                                  |
|  ∟unPassUrlCount  | Number   | 是   | 不通过url数量                                                |
|  ∟labels          | Object[] | 否   | 命中的分类信息                                               |
|   ∟label           | Number   | 是   | 命中的分类信息，100：色情，110：性感低俗，200：广告，210：二维码，260：广告法，300：暴恐，400：违禁，500：涉政，600：谩骂，700：灌水，800：恶心类，900：其他，1100：涉价值观 |
| ∟censor          | Object   | 否   | 人工审核结果，格式为json字符串                               |
|  ∟jobId          | Number   | 是   | 创建公众号任务时返回的任务id，可用于查询任务详情                                 |
|  ∟taskId          | String   | 是   | 任务唯一标识，将弃用                                 |
|  ∟resource        | String   | 是   | 检测公众号账号                                             |
|  ∟resourceName    | String   | 是   | 检测公众号名称                                             |
|  ∟resourceType    | String   | 是   | 检测资源类型，2-公众号                                      |
|  ∟censorTime      | Number   | 是   | 审核时间,格式为毫秒时间戳,如:1634204125521                   |
|  ∟reportUrl       | String   | 是   | 网站检测报告url                                              |
|  ∟suggestion      | Number   | 是   | 建议动作:0-通过，1-嫌疑，2-不通过                            |
|  ∟totalUrlCount   | Number   | 是   | 检测总url数量                                                |
|  ∟suspectUrlCount | Number   | 是   | 嫌疑url数量                                                  |
|  ∟unPassUrlCount  | Number   | 是   | 不通过url数量                                                |
|  ∟labels          | Object[] | 否   | 命中的分类信息                                               |
|   ∟label           | Number   | 是   | 命中的分类信息，100：色情，110：性感低俗，200：广告，210：二维码，260：广告法，300：暴恐，400：违禁，500：涉政，600：谩骂，700：灌水，800：恶心类，900：其他，1100：涉价值观 |



### 请求体示例
```
callbackData=***&signature=xxx&secretId=xxx
```
请求体 callbackData 格式如下，callbackData 为 JSON 字符串格式，请自行解析或者反序列化为 JSON 对象使用。

```json
{
    "antispam": {
        "checkStatus": 2,
        "checkTime": 1634204125521,
	"jobId": 123456789,
        "taskId": "d09ab29ede944d50a0e6770a54bc71ea",
        "labels": [
            {
                "label": 300
            }
        ],
        "reportUrl": "https://yidun/1234567.xlsx",
        "resource": "test",
        "resourceName": "test账号",
        "resourceType": 2,
        "suggestion": 1,
        "suspectUrlCount": 1,
        "totalUrlCount": 35,
        "unPassUrlCount": 0
    },
    "censor": {
        "censorTime": 1663139516000,
	"jobId": 123456789,
        "taskId": "d09ab29ede944d50a0e6770a54bc71ea",
        "labels": [
            {
                "label": 200
            },
            {
                "label": 500
            },
            {
                "label": 900
            }
        ],
        "reportUrl": "https://yidun/任务id{fasdfa}-1-人工审核报告2022_09_14.xlsx",
        "resource": "test",
        "resourceName": "test账号",
        "resourceType": 2,
        "suggestion": 2,
        "suspectUrlCount": 0,
        "totalUrlCount": 12,
        "unPassUrlCount": 3
    }
}
```

## 响应

### 响应结果

* 客户接口接收到我们回调的结果后，需要返回应答信息，接口响应HTTP状态码为200。当回调处理异常时，应答的HTTP状态码应为500或4xx。
* 目前推送方式默认连接超时（connect timeout）为150ms，回调超时（socket timeout）为2s。建议收到推送检测结果后，优先返回response应答信息，异步处理检测结果，避免因为回调超时，易盾侧未收到响应重复推送结果。如业务侧对于超时配置有特殊要求，可联系易盾策略经理调整配置。
* 应答信息为JSON格式，字段定义如下：

| 名称 | 类型   | 必须返回 | 描述                                      |
| ---- | ------ | -------- | ----------------------------------------- |
| code | Number | 是       | 应答code，易盾方解析code为200表示推送成功 |
| msg  | String | 否       | 具体描述信息                              |


### 响应体示例

```json
{ 
    "code": 200, 
    "msg": "接收成功"
}
```