java通过钉钉机器人发消息的实现示例

 更新时间:2023年09月07日 15:21:07   作者:小非肥  
本文主要介绍了java通过钉钉机器人发消息的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

钉钉自定义机器人使用 加签的配置 发送消息

注意:内部群才可以创建自定义机器人
钉钉网址-自定义机器人创建

1、获得的钉钉配置信息workhook和secret

//url路径
    private String URL = "https://oapi.dingtalk.com/robot/send?access_token=08ebaa04f98f7faacbacd80fa879463d85cdccdd6cef184ef01bb5a8b6ae6f6c";
//加签密钥
    private String DINGDING_SECRET = "SEC27596efd776991b2f6786270fa59552459f64612b17adf377295669361af3fae";

2、配置加签

配置路径

    private String getSign() {
        Long timestamp = System.currentTimeMillis();
        String stringToSign = timestamp + "\n" + DINGDING_SECRET;
        Mac mac = null;
        String sign = null;
        try {
            mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(DINGDING_SECRET.getBytes("UTF-8"), "HmacSHA256"));
            byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
            sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
        } catch (Exception e) {
            throw new IllegalArgumentException("加签处理有误");
        }
        return "&timestamp=" + timestamp + "&sign=" + sign;
    }

3、按照钉钉要求整理json数据结构

如果phone为null则发送普通消息,不为空则发送给特定的人

   private JSONObject buildDingDingMessage(String phone, String message) {
        //2、按要求配置参数格式
        JSONObject json = new JSONObject();
        json.put("msgtype", "text");
        json.put("text", new JSONObject() {{
            put("content", message);
        }});
        if (!UtilString.isBlank(phone)) {
            ArrayList<String> list = new ArrayList<>();
            list.add(phone);
            json.put("at", new JSONObject() {{
                put("atMobiles", list.toArray());
            }});
        }
        return json;
    }
    @Override
    public void doSendMessage(String phone, String message) {
        //1、检查数据
        if (UtilString.isBlank(message)) {
            throw new IllegalArgumentException("请输入钉钉服务机器人要输出的信息");
        }
        //2、配置钉钉信息
        JSONObject  json = buildDingDingMessage(phone, message);
        //3、请求
        String url = URL + getSign();
        String responseText = HttpClient.textBody(url)
                .json(json.toJSONString())
                .connectTimeout(60)
                .readTimeout(5 * 60)
                .writeTimeout(5 * 60)
                .asString();
//无错则不发送日志消息
        JSONObject responseJson = JSON.parseObject(responseText);
        if (!responseJson.getString("errmsg").equals("ok")) {
            log.error(responseJson.getString("errmsg"));
        }
    }

到此这篇关于java通过钉钉机器人发消息的实现示例的文章就介绍到这了,更多相关java 钉钉机器人发消息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot使用Spring-Data-Jpa实现CRUD操作

    SpringBoot使用Spring-Data-Jpa实现CRUD操作

    这篇文章主要为大家详细介绍了SpringBoot使用Spring-Data-Jpa实现CRUD操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Springcloud sentinel安装和使用方法解析

    Springcloud sentinel安装和使用方法解析

    这篇文章主要介绍了Springcloud sentinel安装和使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Spring Boot 单元测试JUnit的实践

    Spring Boot 单元测试JUnit的实践

    JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,这篇文章主要介绍了Spring Boot 单元测试JUnit的实践,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 泛型的类型擦除后fastjson反序列化时如何还原详解

    泛型的类型擦除后fastjson反序列化时如何还原详解

    这篇文章主要为大家介绍了泛型的类型擦除后fastjson反序列化时如何还原详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Java 数据结构与算法系列精讲之时间复杂度与空间复杂度

    Java 数据结构与算法系列精讲之时间复杂度与空间复杂度

    对于一个算法,其时间复杂度和空间复杂度往往是相互影响的,当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间,这篇文章主要给大家介绍了关于Java时间复杂度、空间复杂度的相关资料,需要的朋友可以参考下
    2022-02-02
  • Java中的序列化(Serializable)和反序列化

    Java中的序列化(Serializable)和反序列化

    这篇文章主要介绍了Java中的序列化(Serializable)和反序列化, JAVA序列化与反序列化就是JAVA对象与一串字节流之间的相互转换, 我们在程序中创建的JAVA对象只存在于JVM中,需要的朋友可以参考下
    2023-09-09
  • Java线程实现时间动态显示

    Java线程实现时间动态显示

    这篇文章主要为大家详细介绍了Java线程实现时间动态显示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • java实现航空用户管理系统

    java实现航空用户管理系统

    这篇文章主要为大家详细介绍了java实现航空用户管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 解决使用httpclient传递json数据乱码的问题

    解决使用httpclient传递json数据乱码的问题

    这篇文章主要介绍了解决使用httpclient传递json数据乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 深入理解LinkedHashSet集合的底层机制

    深入理解LinkedHashSet集合的底层机制

    这篇文章主要介绍了LinkedHashSet的底层机制详解,LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序, 这使得元素看起来是以插入顺序保存的,需要的朋友可以参考下
    2023-10-10

最新评论