消息订阅说明

一、支持订阅的消息

目前支持员工、部门、审批消息订阅。

具体的消息如下:

content type
创建员工 employee_entry
更新员工 employee_update
离职员工 employee_dismiss
删除员工 employee_delete
创建部门 department_create
更新部门 department_update
删除部门 department_delete
审批异常 flow_task
审批待办 flow_step
审批结束 flow_process

二、订阅消息

为防止订阅的消息被篡改,推送消息时,会对消息数据进行签名计算

签名信息以链接参数(链接问号后面的参数)的形式返回返回,消息数据以消息体的形式返回。

所以,订阅消息的链接需要支持post方式请求。

目前,消息订阅的http请求的超时时间为2秒

样例:

假设:
接收消息链接为:http://xxx.com
消息为:{"messageId":"xxxx", "type":"test"}
应用信息,appkey:app123、appSecret:123456

实际接收到消息时:
requestUrl为:http://xxx.com?sign=NZeAZ7/fHteWAcvO7Ls77AEKuFs=
requestBody为:{"messageId":"xxxx", "type":"test"}

消息处理完成后,返回如下信息表示成功:
{"message":"success"}

一致性校验

接收到消息之后,需要对消息进行签名计算。签名计算的结果如果与收到的签名值一致,则表示消息没有被篡改。

三、订阅成功

接收到消息之后,返回如下数据表示成功接收消息。

{"message":"success"}

除此之外,其他消息一律视为处理失败

四、订阅失败

消息订阅失败之后,不会重试。

消息订阅失败包含:接收消息的链接不可访问、访问超时等等其他不可控的网络因素,以及接收到消息之后,没有返回表示订阅成功的数据信息

但是,这些订阅失败的消息,可以通过失败消息接口查询。该接口只能查询最近7日的失败消息。

五、签名计算

  • 假设需要消息为content
  • 对content使用HmacSHA1算法进行加密。
  • 将加密结果通过base64编码转换为加密后的字符串。
  • 加密密钥为应用appSecret

Java版demo

    /**
     * 薪人薪事消息签名计算
     *
     * @param content 签名明文
     * @param key     应用密钥
     * @return 签名信息
     * @throws Exception
     */
    public static String hmacSha1Encrypt(String content, String key) throws Exception {
        byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
        SecretKeySpec localSecretKeySpec = new SecretKeySpec(keyBytes, "HmacSHA1");
        Mac localMac = Mac.getInstance("HmacSHA1");
        localMac.init(localSecretKeySpec);
        byte[] contentBytes = content.getBytes(StandardCharsets.UTF_8);
        localMac.update(contentBytes);
        return Base64.encodeBase64String(localMac.doFinal());
    }
2020 © 企家有道网络技术(北京)有限公司版权所有@京ICP备15035315号 all right reserved,powered by Gitbookupdate by: 2020-12-16 14:23:56

results matching ""

    No results matching ""