webhook消息通知对接鉴权方法
当触发通知目标操作时,您的触发器消息将会附到URL后面 "https://yourdomain/path?message=xx"。如果租户自己提供接口密钥来验签输入参数,则会在url后面加上验签的时间戳timestamp和签名sign,即"https://yourdomain/path?message=xx×tamp=xx&sign=xx"。
请求参数
字段名称 | 字段类型 | 说明 | 取值 |
---|---|---|---|
timestamp | String | 当前时间戳 | 13位时间戳 |
sign | String | 鉴权签名 | 见下面描述 |
message | String | 消息体,字段名为webhook设置时“属性名”,默认为message | 消息体字段说明详见下述 webhook消息通知对接技术对接文档 |
1.请求中所有参数(除sign字段)字段值的ASCII 码,从小到大排序(字典序)后,使用签名的格式(即 value1&value2)拼接成字符串string1;
2.在string1后面拼上×tamp;
3.在string1最后拼接上&secret(租户提供的接口密钥)得到stringSignTemp字符串;
4.并对stringSignTemp进行sha256运算,得到sign值signValue。
其中sha256运算运算的java示例代码如下:
public static String sha256(String data) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(data.getBytes());
StringBuffer buf = new StringBuffer();
byte[] bits = md.digest();
for(int i=0;i<bits.length;i++){
int a = bits[i];
if(a<0) a+=256;
if(a<16) buf.append("0");
buf.append(Integer.toHexString(a));
}
return buf.toString();
}
注意:1、 字符集默认使用 UTF-8,请勿使用其它字符集;2、报文中所有时间时区为东八区。