版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

2.审核成功后编辑该应用,配置第三方回调接口地址及参数类型。

3.

...

在具体业务逻辑插入使用该Webhook功能。

根据该Webhook自建应用参数配置封装对应参数并请求Webhook服务:

      1)http接口:webhook服务地址+/api/webhook/hook

      2)dubbo接口:WebhooksService#hook

4.第三方回调接口。

webhook服务向第三方回调接口发送请求(Post请求)时,会使用授权密钥生成消息内容的 hmac sha256 hex 摘要签名,携带在 header 中。

...

代码块
languagejava
themeEclipse
/**
 * 生成signature方法 CHARSET=utf-8
 * param data 参数map
 * param secrect 密钥
 */
public static String HmacSha256(SortedMap<String, Object> data, String secrect) {
    byte[] hash = new byte[0];
    try {
        String stringToSign = canonicalize(data);
        Mac mac = Mac.getInstance(HmacSHA256);
        SecretKeySpec secretKeySpec = new SecretKeySpec(secrect.getBytes(CHARSET), mac.getAlgorithm());
        mac.init(secretKeySpec);
        hash = mac.doFinal(stringToSign.getBytes(CHARSET));
    } catch (Exception e) {
        logger.error("HmacSha256 error!", e);
    }
    return DatatypeConverter.printBase64Binary(hash);
}

public static String canonicalize(SortedMap<String, Object> sortedParamMap) {
    if (sortedParamMap.isEmpty()) {  
        return "";  
    }  
    StringBuffer buffer = new StringBuffer();  
    Iterator<Entry<String, Object>> iter = sortedParamMap.entrySet().iterator();
    while (iter.hasNext()) {  
        Entry<String, Object> kvpair = iter.next();
        buffer.append(percentEncodeRfc3986(kvpair.getKey()));
        buffer.append("=");  
        buffer.append(kvpair.getValue());
        if (iter.hasNext()) {  
            buffer.append("&");  
        }  
    }   
    return buffer.toString();  
}

...