DingDingUtil

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 + "&timestamp=" + 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 + "&timestamp=" + 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" + "&timestamp=" + 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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值