pom.xml
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.12</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
java工具类
package com.zens.doudian.utils;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DingTalkWebhookUtils {
private static final Logger log = LoggerFactory.getLogger(DingTalkWebhookUtils.class);
private static final int TIME_OUT = 10000;
private static final String SECRET = "SECbd7fd971096ea3333e3d56bf30xxxxexxxxx";
private static final String WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxx";
public static void main(String[] args) {
DingTalkWebhookUtils.sendWebhook(WEBHOOK, SECRET, "测试推送!!!", Collections.singletonList("18534xxxxx"));
}
public static void sendMessage(String content, List<String> mobileList) {
sendWebhook(WEBHOOK, SECRET, content, mobileList);
}
public static void sendWebhook(String webhook, String secret, String content, List<String> mobileList) {
try {
if (!StringUtils.isEmpty(secret)) {
Long timestamp = System.currentTimeMillis();
String sign = getSign(timestamp, secret);
webhook = new StringBuilder(webhook)
.append("×tamp=")
.append(timestamp)
.append("&sign=")
.append(sign)
.toString();
}
System.out.println("webhook:" + webhook);
boolean isAtAll = false;
String reqStr = buildReqStr(content, isAtAll, mobileList);
String result = postJson(webhook, reqStr);
log.info("推送响应结果:{}", result);
} catch (Exception e) {
log.info("发送群通知异常 异常原因:{}", e.getMessage());
}
}
private static String buildReqStr(String content, boolean isAtAll, List<String> mobileList) {
Map<String, String> contentMap = new HashMap<>();
contentMap.put("content", content);
Map<String, Object> atMap = new HashMap<>();
atMap.put("isAtAll", isAtAll);
atMap.put("atMobiles", mobileList);
Map<String, Object> reqMap = new HashMap<>();
reqMap.put("msgtype", "text");
reqMap.put("text", contentMap);
reqMap.put("at", atMap);
return JSON.toJSONString(reqMap);
}
private static String postJson(String url, String reqStr) {
String body = null;
try {
body = HttpRequest.post(url).body(reqStr).timeout(TIME_OUT).execute().body();
} catch (Exception e) {
log.error("钉钉消息推送异常:{}", e.getMessage());
}
return body;
}
private static String getSign(Long timestamp, String secret) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
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 sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
log.info("sign:" + sign);
return sign;
}
}