消息订阅说明

一、何时需要订阅消息推送服务

  薪人薪事开放平台是企业内部系统与薪人薪事后台系统之间的桥梁。在业务接口对接的基础之上,为了构建更完善的系统间信息交流机制, 我们提供了消息订阅服务。开放平台将消息及时推送到企业系统,增强了业务流程的可感知性; 同时,完善了系统间数据交互的方式,提高了数据的准确性和可读性。

二、订阅消息需要实现哪些功能

avatar

提供接收消息的URL

企业需提供一个接收消息的地址,我们会将您订阅的消息推送到这个URL。

支持post请求

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

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

主动查询推送失败的消息

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

{"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());
    }

消息推送样例:

假设:
接收消息链接为: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"}
2020 © 企家有道网络技术(北京)有限公司版权所有@京ICP备15035315号 all right reserved,powered by Gitbookupdate by: 2020-12-16 14:23:56

results matching ""

    No results matching ""