# 事件撤销

#### 功能介绍

当应用/元服务共享的意图相关数据失效时，需要调用撤销接口把相关数据删除，以避免触发失效的事件提醒。

#### 场景描述

**用户事件：** 由用户主动行为触发的应用/元服务共享的相关用户事件数据超过时效期，Intents Kit对相关用户事件数据进行删除。

**公共事件**：由公共事件触发的相关事件数据超过时效期，Intents Kit对相关公共事件数据进行删除。

#### 接口原型

**承载协议：** HTTPS POST

**接口方向：** 开发者服务器->Intents Kit服务器

**接口URL：** 

**数据格式：** 请求：Content-Type: application/json，响应：Content-Type: application/json

#### 请求参数

**Request Header**

| 参数 | 是否必选 | 类型 | 描述 |
| --- | --- | --- | --- |
| x-appid | 是 | String | 开发者在华为开发者联盟注册的应用编号，可从应用服务>AppGallery Connect（应用市场）>我的项目>选中应用后查看，x-appid即选项的Client ID。 |
| Authorization | 是 | String | 应用级AccessToken，前面需要加上Bearer，通过调用Oauth2.0的接口获得，接口请求 |
| Content-Type | 是 | String | 固定值，填application/json。 说明： Request Body传参，请务必遵循此请求头格式，否则可能导致请求失败。 |
| Accept | 是 | String | 固定值，填application/json。 |
| x-event-type | 是 | String | 事件类型，USER表示用户事件，COMMON表示通用事件。 |

**Request Body**

| 参数 | 是否必选 | 类型 | 描述 |
| --- | --- | --- | --- |
| events | 是 | List<Object> | 详细结果见样例。 |

**请求体字段样例**

| 参数 | 是否必选 | 类型 | 描述 |
| --- | --- | --- | --- |
| requestTime | 是 | String | 接口请求UTC时间戳，格式yyyyMMddhhmmssSSS。 |
| revokeBy | 否 | String | 默认值为REQUEST_ID，调用方可不带。 |
| identifier | 是 | String | 请求ID，标识唯一数据。 |
| eventName | 否 | String | 默认按REQUEST_ID方式撤销时可不带该字段。 |
| openId | 否 | String | 华为分配的openId，openId推送的事件需要填openId——openId与sid不可同时为空，至少填入一项。 |
| sid | 否 | String | 华为分配的sid，sid推送的事件需要填sid——openId与sid不可同时为空，至少填入一项。 |
| abilityId | 是 | String | 上架服务的服务标识。 |

其中，**x-appid**和**Authorization**的获取步骤如下所述：

**x-appid**是来自于AppGallery Connect网站，可从应用服务>AppGallery Connect（应用市场）>我的项目>选中应用后查看，**x-appid**即Client ID。

**Authorization**通过调用Oauth2.0的接口获得，接口地址为：

**Request Header**

| 参数 | 是否必选 | 类型 | 描述 |
| --- | --- | --- | --- |
| Content-Type | 是 | String | 固定值，填application/x-www-form-urlencoded。 说明： Request Body传参，请务必遵循此请求头格式，否则可能导致请求失败。 |

**Request Body**

| 参数 | 是否必选 | 类型 | 描述 |
| --- | --- | --- | --- |
| grant_type | 是 | String | 固定值 client_credentials。 |
| client_id | 是 | String | 从AppGallery Connect网站查询。 |
| client_secret | 是 | String | 从AppGallery Connect网站查询。 |

请求体使用表单形式，即x-www-form-urlencoded。

#### 请求示例

完整的请求头样例如下：

```
POST /open-ability/v2/service-events/revoke HTTP/1.1
Host: hag.cloud.huawei.com
Content-Type: application/json
Authorization: Bearer DQEBAGf5Mtm9rZl3W1W8sACVmWo0WhGUE3ANb/+KgRHjvmJqacjI3aF++jLEqbZsJ4H472MknoysUMaQrr8FgAHKPCU1YY4EKxUhsA==
x-appid: 1***12345
Accept: application/json
x-event-type: USER
```

完整的请求体样例如下：

```
POST /open-ability/v2/service-events/revoke HTTP/1.1
Host: hag.cloud.huawei.com
Content-Type: application/json

{
  "events": [
    {
      "requestTime": "请求时间戳",
      "revokeBy": "REQUEST_ID",
      "identifier": "推送事件时的identifier", // 推送接口中的identifier
      "eventName": "事件名", // 按REQUEST_ID方式撤销时可不填
      "openId": "openid", // openid推送的事件需要填openid
      "sid": "0bda3b89e3f44a44940eaad6b863dcc6", // sid推送的事件需要填sid
      "abilityId": "389ccb86317f41c19c2aa8762345069c" // 上架服务的服务标识
    }
  ]
}
```

#### 响应参数

**Response Header**

| 参数 | 是否必选 | 类型 | 描述 |
| --- | --- | --- | --- |
| Content-Type | 是 | String | 取值为：application/json;charset=UTF-8。 |

**Response Body**

| 参数 | 是否必选 | 类型 | 描述 |
| --- | --- | --- | --- |
| errorEvents | 否 | List<ErrorEvent> | 层级如下，详细结果见样例。 |

**ErrorEvent**

| 参数 | 是否必选 | 类型 | 描述 |
| --- | --- | --- | --- |
| requestId | 是 | String | 对应请求体中的事件identifier。 |
| resultInfo | 是 | ResultInfo | 错误详细信息。 |

**ResultInfo**

| 参数 | 是否必选 | 类型 | 描述 |
| --- | --- | --- | --- |
| code | 是 | String | 错误类型。 |
| desc | 是 | String | 错误详细描述。 |

#### 响应示例

*   调用成功，响应码为200，响应体为空。
    
*   调用失败，响应码为400，以未携带必填字段为例，响应体格式如下：
    
    ```
    HTTP/1.1 400 Bad Request
    Content-Type: application/json
    
    {
      "errorEvents": [{
        "requestId": "02240416001",
        "resultInfo": {
          "code": "invalidParam",
          "desc": "openId and sid can not both be blank"
        }
      }]
    }
    ```
    
    *   调用出错（鉴权信息无效或过期），响应码为401，响应体为空。
    *   调用出错（网关验证开发者权限失败），响应码为403，响应体为空。
    *   调用失败，响应码为404，表示外部推送的sid没有获取到对应的uid，响应体格式如下：
        
        ```
        HTTP/1.1 404 Bad Request
        Content-Type: application/json
        
        {
          "errorEvents": [{
            "requestId": "02240416001",
            "resultInfo": {
              "code": "userNotFound",
              "desc": "User is not found"
            }
          }]
        }
        ```