消息订阅说明
一、支持订阅的消息
目前支持员工、部门、审批消息订阅。
具体的消息如下:
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());
}