这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

开放事件

基于企业级事件开放平台,提供标准的事件开放能力。

1、概述

基于企业级事件开放平台,提供标准的事件开放能力。

2、集成步骤

序号 步骤名称 责任方 描述
1 事件查看 致远 非必须,查看可用的事件清单
2 UDC发布自定义事件 致远 非必须,UDC-规则-自定义服务,可以配置开放事件,
在应用成功发布后,事件可以发布到开放平台,遵循开放平台授权管理规范
3 启用事件 致远 必须,API一级授权,只有启用API,接入应用才可以选择到对应的API。
4 新建接入应用 致远 必须,承载事件配置
5 启用接入应用 致远 必须,未启用时,事件无法正常回调
6 开启加密因子 致远 非必须,开启后事件内容会加密传输
7 开启回调令牌 致远 非必须,开启后,事件回调会携带配置的eventToken,
用于接入应用验证事件来源。
8 请求网址验证 致远 事件直接回调请求网址模式模式:必须实现回调接口模式:非必须
9 添加事件 致远 必须,事件二级授权
10 配置数据范围 致远 非必须,需要对事件内容进行筛选过滤时配置
11 提供回调接口定义和规范 三方系统 事件直接回调请求网址模式模式:非必须实现回调接口模式:必须
12 新建三方集成应用 致远 事件直接回调请求网址模式模式:非必须实现回调接口模式:必须
13 接口封装 致远 事件直接回调请求网址模式模式:非必须实现回调接口模式:必须
14 发布三方集成应用 致远 事件直接回调请求网址模式模式:非必须实现回调接口模式:必须
15 设置回调方式 致远 事件直接回调请求网址模式模式:非必须实现回调接口模式:必须
,需要选择三方集成应用、接口,并配置字段映射和成功标识

3、集成步骤配置说明

3.1. 进入管理后台

1729731400013

3.2. 事件查看

1729731437933

3.3. UDC发布自定义事件

1729731458117

1729731462482

3.4. 启用事件

1729731468221

3.5. 新建接入应用

1729731471806

3.6. 启用接入应用

1729731475731

3.7. 开启加密因子

1729731484386

3.8. 开启回调令牌

1729731488908

3.9. 请求网址验证

1729731493899

3.10. 添加事件

1729731498018
1729731503621

3.11. 配置数据范围

1729731508099
1729731511661

3.12. 提供回调接口定义和规范

注意:由三方系统线下提供

3.13. 新建三方集成应用

1729731523262

3.14. 接口封装,发布应用

1729731526881

3.15. 设置回调方式

1729731533340

1729731539505

1729731544183

4、事件订阅说明

收到事件通知请求后,需要返回200HTTP响应。其余响应码表示失败,开放平台会自动重发。重发的间隔越来越长,最多尝试10次。事件通知数据使用application/json格式发送。

事件通知的HTTP请求头中,包含回调令牌(需在接入应用的事件订阅中配置开启,默认不开启),用于接入应用验证事件来源。

若开启加密因子(需在接入应用的事件订阅中配置开启,默认不开启),将对事件通知的JSON内容进行加密,只有一个属性encrypt,需要进行解密处理。

4.1、解密示例(Java)

@SuppressWarnings("rawtypes")
    @PostMapping("open-event-map")
    @ResponseBody
    public String openEventCallBack(HttpServletRequest request, @RequestBody Map map) {
      // 事件发生时间
      String createTime = request.getHeader("createTime");
      // 事件的流水号
      String eventId = request.getHeader("eventId");
      // 如果订阅事件时设置了回调token,可以获取token进行校验
      String eventToken = request.getHeader("eventToken");
      if (!OpenApiGlobalConfig.EVENT_CALL_BACK_TOKEN.equals(eventToken)) {
        System.err.println("token不匹配,这是非法的请求!");
        return "error";
      }
      // eventName:事件名称,解码处理
      try {
        String eventName = URLDecoder.decode(request.getHeader("eventName"), StandardCharsets.UTF_8.displayName());
        System.err.println("收到事件:" + eventName);
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      }
      // 事件标识,可以用此字段区分是什么事件发生了
      String eventKey = request.getHeader("eventKey");
      if (!"".equals(OpenApiGlobalConfig.EVENT_CALL_BACK_KEY)) {
        // 如果设置了加密key,那么返回的数据是加密的,需要解密。加解密算法是AES算法。
        String encryptContent = (String) map.get("encrypt");
        String realContent = OpenApiClient.decrypt(encryptContent, OpenApiGlobalConfig.EVENT_CALL_BACK_KEY);
        System.err.println("原始的JSON数据是:" + realContent);
        // 拿到原始的json串以后,可以json串转map或者转对应的DTO,继续处理
        Map dataMap = OpenApiUtil.fromJson(realContent, Map.class);
        // 后续处理
        System.err.println("事件真实数据:" + dataMap);
      } else {
        // 如果没有配置加密,那么是明文传输的,收到的Map就是真实的数据
        Map dataMap = map;
        // 后续处理
        System.err.println("事件真实数据:" + dataMap);
      }
      return "OK";
    }