|
|
|
|
@@ -2,10 +2,10 @@ package com.hccake.extend.dingtalk;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.codec.Base64;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
|
|
import cn.hutool.http.HttpUtil;
|
|
|
|
|
import com.hccake.extend.dingtalk.message.DingTalkMessage;
|
|
|
|
|
import lombok.Data;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.Getter;
|
|
|
|
|
import lombok.SneakyThrows;
|
|
|
|
|
import lombok.experimental.Accessors;
|
|
|
|
|
|
|
|
|
|
@@ -19,9 +19,8 @@ import java.nio.charset.StandardCharsets;
|
|
|
|
|
*
|
|
|
|
|
* @author lingting 2020/6/10 21:25
|
|
|
|
|
*/
|
|
|
|
|
@Data
|
|
|
|
|
@Getter
|
|
|
|
|
@Accessors(chain = true)
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
public class DingTalkSender {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -34,6 +33,21 @@ public class DingTalkSender {
|
|
|
|
|
*/
|
|
|
|
|
private String secret;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 普通消息发送请求
|
|
|
|
|
*/
|
|
|
|
|
private final HttpRequest request;
|
|
|
|
|
|
|
|
|
|
private final Mac mac;
|
|
|
|
|
|
|
|
|
|
@SneakyThrows
|
|
|
|
|
public DingTalkSender(String url) {
|
|
|
|
|
this.url = url;
|
|
|
|
|
request = HttpUtil.createPost(url);
|
|
|
|
|
|
|
|
|
|
mac = Mac.getInstance("HmacSHA256");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 发送消息 根据参数值判断使用哪种发送方式
|
|
|
|
|
*
|
|
|
|
|
@@ -55,7 +69,7 @@ public class DingTalkSender {
|
|
|
|
|
* @author lingting 2020-06-11 00:09:23
|
|
|
|
|
*/
|
|
|
|
|
public DingTalkResponse sendNormalMessage(DingTalkMessage message) {
|
|
|
|
|
return DingTalkResponse.getInstance(HttpUtil.post(url, message.generate()));
|
|
|
|
|
return DingTalkResponse.getInstance(request.body(message.generate()).execute().body());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -65,23 +79,32 @@ public class DingTalkSender {
|
|
|
|
|
*/
|
|
|
|
|
@SneakyThrows
|
|
|
|
|
public DingTalkResponse sendSecretMessage(DingTalkMessage message) {
|
|
|
|
|
return DingTalkResponse.getInstance(HttpUtil.post(secret(), message.generate()));
|
|
|
|
|
return DingTalkResponse.getInstance(
|
|
|
|
|
request.setUrl(secret(System.currentTimeMillis())).body(message.generate()).execute().body());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 设置密钥
|
|
|
|
|
* @author lingting 2020-09-04 14:37
|
|
|
|
|
*/
|
|
|
|
|
@SneakyThrows
|
|
|
|
|
public DingTalkSender setSecret(String secret) {
|
|
|
|
|
if (StrUtil.isNotEmpty(secret)) {
|
|
|
|
|
this.secret = secret;
|
|
|
|
|
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
|
|
|
|
|
}
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取签名后的请求路径
|
|
|
|
|
*
|
|
|
|
|
* @param timestamp 当前时间戳
|
|
|
|
|
* @author lingting 2020-06-11 00:13:55
|
|
|
|
|
*/
|
|
|
|
|
@SneakyThrows
|
|
|
|
|
public String secret() {
|
|
|
|
|
long timestamp = System.currentTimeMillis();
|
|
|
|
|
String stringToSign = timestamp + "\n" + secret;
|
|
|
|
|
Mac mac = Mac.getInstance("HmacSHA256");
|
|
|
|
|
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
|
|
|
|
|
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
|
|
|
|
|
String encode = URLEncoder.encode(Base64.encode(signData), "UTF-8");
|
|
|
|
|
return url + "×tamp=" + timestamp + "&sign=" + encode;
|
|
|
|
|
public String secret(long timestamp) {
|
|
|
|
|
return url + "×tamp=" + timestamp + "&sign=" + URLEncoder.encode(
|
|
|
|
|
Base64.encode(mac.doFinal((timestamp + "\n" + secret).getBytes(StandardCharsets.UTF_8))), "UTF-8");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|