import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.codec.Base64; import lombok.extern.slf4j.Slf4j; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; /** * @Author lidong * @Date 2023/4/5 10:58 */ @Slf4j public class DingDingUtil { //钉钉的webhook private final static String DINGDING_WEBHOOK_TOKEN = "https://oapi.dingtalk.com/robot/send?access_token=4c3fc79592ac6adfaee84f035cbcb01e95e520c4180a6a0526a568ac47feecce"; //自定义关键词 private final static String DINGDING_WEBHOOK_WORD = "2号"; //加签密钥 private final static String DINGDING_WEBHOOK_APOSTILLE = "SECc5995a5db1beec45dc3cd3212bb5d532c9d0a60f6845fcaab804becb1ab9d2ff"; /** * 自定义关键词 * * @param phoneList 要@的手机号 * @param content 发送的文本内容 * @return {"errcode":0,"errmsg":"ok"} */ public static String sendDingDingWord(List<String> phoneList, String content) { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("msgtype", "text");//指定消息类型是text Map<String, Object> contentMap = new HashMap<>(); contentMap.put("content", DINGDING_WEBHOOK_WORD + content); paramMap.put("text", contentMap); Map<String, List<String>> phone = new HashMap<>(); phone.put("atMobiles", phoneList); paramMap.put("at", phone); return HttpClientUtil.doPostJsonNew(DINGDING_WEBHOOK_TOKEN, JSONObject.toJSONString(paramMap), null); } /** * 加签批量发 * * @param phoneList 要@的手机号 * @param content 发送的文本内容 * @return {"errcode":0,"errmsg":"ok"} */ public static String sendDingDingCountersign(List<String> phoneList, String content) { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("msgtype", "text");//指定消息类型是text Map<String, Object> contentMap = new HashMap<>(); contentMap.put("content", content); paramMap.put("text", contentMap); Map<String, List<String>> phone = new HashMap<>(); phone.put("atMobiles", phoneList); paramMap.put("at", phone); Map<String, Object> apostilleMap = DingDingUtil.countersign(); Long timestamp = (Long) apostilleMap.get("timestamp"); String sign = apostilleMap.get("sign").toString(); return HttpClientUtil.doPostJsonNew(DINGDING_WEBHOOK_TOKEN + "×tamp=" + timestamp + "&sign=" + sign, JSONObject.toJSONString(paramMap), null); } /** * 加签单发 * * @param phone 要@的手机号 * @param content 发送的文本内容 * @return {"errcode":0,"errmsg":"ok"} */ public static String sendDingDingCountersignOne(String phone, String content) { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("msgtype", "text");//指定消息类型是text Map<String, Object> contentMap = new HashMap<>(); contentMap.put("content", content); paramMap.put("text", contentMap); Map<String, List<String>> phoneMap = new HashMap<>(); phoneMap.put("atMobiles", Collections.singletonList(phone)); paramMap.put("at", phoneMap); Map<String, Object> apostilleMap = DingDingUtil.countersign(); Long timestamp = (Long) apostilleMap.get("timestamp"); String sign = apostilleMap.get("sign").toString(); return HttpClientUtil.doPostJsonNew(DINGDING_WEBHOOK_TOKEN + "×tamp=" + timestamp + "&sign=" + sign, JSONObject.toJSONString(paramMap), null); } /** * 加签单发 * * @param phone 要@的手机号 * @param content 发送的文本内容 * @return {"errcode":0,"errmsg":"ok"} */ public static <T> String sendNewOne(String content, T ... phone) { if(phone==null){ return ""; } Map<String, Object> paramMap = new HashMap<>(); paramMap.put("msgtype", "text");//指定消息类型是text Map<String, Object> contentMap = new HashMap<>(); contentMap.put("content", content); paramMap.put("text", contentMap); Map<String, List<String>> phoneMap = new HashMap<>(); phoneMap.put("atMobiles", (List<String>) Arrays.asList(phone)); paramMap.put("at", phoneMap); Long timestamp = System.currentTimeMillis(); String sign = ""; try { String secret = "SEC4c74e536da00232ba086fd0f572d3e9a1eabcfe4b044e810586ca88cf5c085df"; 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)); sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); } catch (Exception e) { log.info("countersign:{}", e); } return HttpClientUtil.doPostJsonNew("https://oapi.dingtalk.com/robot/send?access_token=a33534da8d33a06d1fe10715034775900b8104bae30559a6fe9ad45b9a87489c" + "×tamp=" + timestamp + "&sign=" + sign, JSONObject.toJSONString(paramMap), null); } public static void main(String[] args) { DingDingUtil.sendNewOne("ceshi", "13330123703",""); } private static Map<String, Object> countersign() { Map<String, Object> paramMap = new HashMap<>(); try { Long timestamp = System.currentTimeMillis(); String secret = DINGDING_WEBHOOK_APOSTILLE; 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"); paramMap.put("timestamp", timestamp); paramMap.put("sign", sign); } catch (Exception e) { log.info("countersign:{}", e); } return paramMap; } }
DingDingUtil
最新推荐文章于 2024-09-15 19:46:31 发布