All Downloads are FREE. Search and download functionalities are using the official Maven repository.

top.zeimao77.product.dingding.DingDingRobotClient Maven / Gradle / Ivy

package top.zeimao77.product.dingding;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import top.zeimao77.product.http.HttpClientUtil11;
import top.zeimao77.product.util.ByteArrayCoDesUtil;
import top.zeimao77.product.util.JsonBeanUtil;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DingDingRobotClient {

    private static Logger logger = LoggerFactory.getLogger(DingDingRobotClient.class);

    private String webhook;
    private String secret;

    public DingDingRobotClient(String webhook, String secret) {
        this.webhook = webhook;
        this.secret = secret;
    }

    public DingDingRobotClient(String webhook,String token, String secret) {
        this.webhook = webhook + "?access_token=" + token;
        this.secret = secret;
    }

    private String sign(long timestamp){
        String stringToSign = timestamp + "\n" + this.secret;
        try {
            Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
            hmacSHA256.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8),"HmacSHA256"));
            byte[] signData = hmacSHA256.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
            String sign = URLEncoder.encode(ByteArrayCoDesUtil.base64Encode(signData), StandardCharsets.UTF_8);
            return sign;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }
        return null;
    }

    protected void send(String messaage,boolean atAll) {
        sendText(messaage,null,null,atAll);
    }

    private void send(HashMap message,List atMobiles,List atUserIds,boolean atAll) {
        HashMap at = new HashMap<>();
        if(atMobiles != null && !atMobiles.isEmpty())
            at.put("atMobiles",atMobiles);
        if(atUserIds != null && !atUserIds.isEmpty())
            at.put("atUserIds",atUserIds);
        at.put("isAtAll",atAll);
        message.put("at",at);
        long timestamp = System.currentTimeMillis();
        String url = this.webhook+"×tamp="+timestamp;
        url += "&sign="+sign(timestamp);
        Map headers = Map.of("Content-Type", "application/json");
        HttpClientUtil11 httpClientUtil11 = new HttpClientUtil11();
        String s = httpClientUtil11.sendPost(url, JsonBeanUtil.DEFAULT.toJsonString(message),headers,5);
        logger.debug("robot:{}",s);
    }

    public void sendText(String messaage,List atMobiles,List atUserIds,boolean atAll) {
        if(messaage.length() > 4000) {
            logger.error("消息过长 发送失败(发了也收不到...);");
            return;
        }
        HashMap param = new HashMap<>();
        param.put("msgtype","text");
        param.put("text",Map.of("content",messaage));
        send(param,atMobiles,atUserIds,atAll);
    }

    public void sendMarkdown(String title,String text,boolean atAll){
        sendMarkdown(title,text,null,null,atAll);
    }

    public void sendMarkdown(String title,String text,List atMobiles,List atUserIds,boolean atAll) {
        if(text.length() > 4000) {
            logger.error("消息过长 发送失败(发了也收不到...);");
            return;
        }
        HashMap param = new HashMap<>();
        param.put("msgtype","markdown");
        param.put("markdown",Map.of("title",title,"text",text));
        send(param,atMobiles,atUserIds,atAll);
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy