消息订阅说明
一、消息订阅介绍
薪人薪事开放平台是企业内部系统与薪人薪事后台系统之间的桥梁。在业务接口对接的基础之上,为了构建更完善的系统间信息交流机制, 我们提供了消息订阅服务。开放平台将消息及时推送到企业系统,增强了业务流程的可感知性; 同时,完善了系统间数据交互的方式,提高了数据的准确性和可读性。
二、消息订阅时序图
消息订阅需要注意以下几点:
企业需提供一个接收消息的地址,我们会将您订阅的消息推送到这个URL。
订阅消息的链接需要支持post方式请求。
消息订阅的http请求的超时时间为3秒。
推送消息地址需要支持接口验证,接收到如下格式验证消息后需返回{"message":"success"}。
{ "messageId": "uuid", "type": "verify", "sendtime": "1515986177" } `
主动查询推送失败的消息
接收到消息之后,返回如下数据表示成功接收消息。
{"message":"success"}
除此之外,其他消息一律视为处理失败。消息推送失败之后,不会重试。
这些订阅失败的消息,可以通过失败消息接口查询。该接口只能查询最近7日的失败消息。
三、消息介绍
3.1 消息体
参数 | 类型 | 说明 |
---|---|---|
messageId | String | 唯一标识一条消息 |
type | String | 消息类型 |
sendtime | Long | 发送时间 |
{
"messageId": "uuid",
"type": "department_create",
"sendtime": 1515986177,
... //其他字段信息
}
3.2 消息类型
员工相关的消息
消息类型 | 所属类别 | 说明 |
---|---|---|
employee_entry | 员工 | 薪人薪事员工入职,推送此类消息 详见员工入职消息推送 |
employee_update | 员工 | 薪人薪事员工更新,推送此类消息 详见员工更新消息推送 |
employee_delete | 员工 | 薪人薪事员工删除,推送此类消息 详见员工删除消息推送 |
employee_dismiss | 员工 | 薪人薪事员工离职,推送此类消息 详见员工离职消息推送 |
employee_pending_entry | 员工 | 薪人薪事创建待入职员工,推送此类消息 详见创建待入职员工消息推送 |
employee_pending_update | 员工 | 薪人薪事更新待入职员工,推送此类消息 详见更新待入职员工消息推送 |
employee_pending_delete | 员工 | 薪人薪事删除待入职员工,推送此类消息 详见删除待入职员工消息推送 |
employee_group_add | 员工分组字段 | 薪人薪事员工分组字段添加,推送此类消息 详见员工分组字段添加消息推送 |
employee_group_update | 员工分组字段 | 薪人薪事员工分组字段更新,推送此类消息 详见员工分组字段更新消息推送 |
employee_group_delete | 员工分组字段 | 薪人薪事员工分组字段删除,推送此类消息 详见员工分组字段删除消息推送 |
employee_pending_group_add | 员工分组字段 | 薪人薪事待入职员工分组字段添加,推送此类消息 详见待入职员工分组字段添加消息推送 |
employee_pending_group_update | 员工分组字段 | 薪人薪事待入职员工分组字段更新,推送此类消息 详见待入职员工分组字段更新消息推送 |
employee_pending_group_delete | 员工分组字段 | 薪人薪事待入职员工分组字段删除,推送此类消息 详见待入职员工分组字段删除消息推送 |
部门相关的消息
消息类型 | 所属类别 | 说明 |
---|---|---|
department_create | 部门 | 薪人薪事部门创建,推送此类消息 详见部门创建消息推送 |
department_update | 部门 | 薪人薪事部门更新,推送此类消息 详见部门更新消息推送 |
department_delete | 部门 | 薪人薪事部门删除,推送此类消息 详见部门删除消息推送 |
department_enable | 部门 | 薪人薪事部门启用,推送此类消息 详见部门启用消息推送 |
department_disable | 部门 | 薪人薪事部门停用,推送此类消息 详见部门停用消息推送 |
virtual_department_create | 部门 | 薪人薪事虚拟部门创建,推送此类消息 详见虚拟部门创建推送 |
virtual_department_edit | 部门 | 薪人薪事虚拟部门更新,推送此类消息 详见虚拟部门更新推送 |
virtual_department_delete | 部门 | 薪人薪事虚拟部门删除,推送此类消息 详见虚拟部门删除推送 |
job_create | 岗位 | 薪人薪事岗位创建,推送此类消息 详见岗位创建消息推送 |
job_update | 岗位 | 薪人薪事岗位编辑,推送此类消息 详见岗位编辑消息推送 |
job_delete | 岗位 | 薪人薪事岗位删除,推送此类消息 详见岗位删除消息推送 |
cost_center_create | 成本中心 | 薪人薪事成本中心创建,推送此类消息 详见成本中心创建推送 |
cost_center_update | 成本中心 | 薪人薪事成本中心更新,推送此类消息 详见成本中心更新推送 |
cost_center_delete | 成本中心 | 薪人薪事成本中心删除,推送此类消息 详见成本中心删除推送 |
审批相关的消息
消息类型 | 所属类别 | 说明 |
---|---|---|
flow_task | 审批 | 薪人薪事审批处于异常状态时,推送此类消息 详见审批异常消息推送 |
flow_step | 审批 | 薪人薪事审批处于待办状态时,推送此类消息 详见审批待办消息推送 |
flow_process | 审批 | 薪人薪事审批处于终结状态时,推送此类消息 详见审批结束消息推送 |
flow_node_operate | 审批 | 薪人薪事操作审批节点时,推送此类消息 详见审批节点操作消息推送 |
dismiss_handover | 离职交接 | 薪人薪事中的离职交接,通过此消息推送 详见离职交接消息推送 |
handover_node_operate | 离职交接 | 薪人薪事离职交接审批人节点操作,通过此消息推送 详见离职交接审批人节点操作推送 |
招聘相关的消息
消息类型 | 所属类别 | 说明 |
---|---|---|
recruiment_interview_add | 招聘 | 当新安排招聘面试时,推送此类消息 详见安排招聘面试推送 |
recruiment_interview_update | 招聘 | 当修改招聘面试时,推送此类消息 详见招聘面试更新推送 |
recruiment_interview_cancel | 招聘 | 当招聘面试撤销时,推送此类消息 详见招聘面试撤销推送 |
recruiment_interview_feedback | 招聘 | 当招聘面试有人反馈时,推送此类消息 详见招聘面试反馈推送 |
recruiment_recommend_add | 招聘 | 当推荐简历时,推送此类消息 详见简历推荐创建推送 |
recruiment_recommend_feedback | 招聘 | 当简历推荐有人反馈时,推送此类消息 详见简历推荐反馈推送 |
recruiment_pre_entry_eliminate | 招聘 | 当待入职员工的简历淘汰时,推送此类消息 详见待入职员工简历淘汰 |
绩效相关的消息
消息类型 | 所属类别 | 说明 |
---|---|---|
appraisal_todo | 绩效 | 当绩效触发待办时,推送此类消息 详见绩效业务待办推送 |
apprisal_kpi_complete_value | 绩效 | 当绩效处于完成值阶段时,点击批量同步按钮时,推送此类消息 详见绩效完成值录入消息推送 |
apprisal_kpi_result_confirm | 绩效 | 当绩效确认最后结果时,推送此类消息 详见绩效结果确认消息推送 |
通知相关的消息
消息类型 | 所属类别 | 说明 |
---|---|---|
notify | 通知 | 薪人薪事中的消息通知,通过此消息推送 详见消息通知 |
工资相关的消息
消息类型 | 所属类别 | 说明 |
---|---|---|
payroll_create_ledger | 工资 | 当新建工资报表时,推送此类消息 详见新建工资报表推送 |
3.3 签名验证
为防止订阅的消息被篡改,推送消息时,会对消息数据进行签名计算。
签名信息以链接参数(链接问号后面的参数)的形式传递,消息数据以消息体的形式传递。
- 推送url样例:
例如配置的消息推送的地址是 http://ip:端口/message 则推送的url为 http://ip:端口/message?sign=123MJIB*%1231
一致性校验
接收到消息之后,需要对请求验签,即对消息进行签名计算。签名计算的结果如果与收到的签名值一致,则表示消息没有被篡改。
签名计算方式
- 假设需要消息为content
- 对content使用HmacSHA1算法进行加密。加密密钥为应用appSecret
- 将加密结果通过base64编码转换为加密后的字符串。
Java版demo
/**
* 薪人薪事消息签名计算
*
* @param content 签名明文
* @param appSecret 应用密钥
* @return 签名信息
* @throws Exception
*/
public static String hmacSha1Encrypt(String content, String appSecret) throws Exception {
byte[] keyBytes = appSecret.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());
}