当前位置: 首页 > news >正文

钉钉群消息提醒

钉钉群消息提醒工具类

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Map;public class DingAlertUtil {public static final String WEBHOOK = "";public static final String SECRET = "";public static void alertDingMsg(String msg) {sendText(WEBHOOK, SECRET, msg);}public static HttpResponse sendText(String webhook, String secret, String content) {//get urlString url = webhook;if (StringUtils.isNotBlank(secret)) {long timestamp = System.currentTimeMillis();url = webhook + String.format("&timestamp=%s&sign=%s", timestamp, getSign(timestamp, secret));}//get bodyMap<String, Object> reqMap = Maps.newHashMap();reqMap.put("msgtype", "text");Map<String, String> contentMap = Maps.newHashMap();contentMap.put("content", content);reqMap.put("text", contentMap);//return HttpRequest.post(url).body(JSON.toJSONString(reqMap)).execute();}private static String getSign(Long timestamp, String secret) {try {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));return URLEncoder.encode(cn.hutool.core.codec.Base64.encode(signData), "UTF-8");} catch (Exception ex) {return null;}}
}

业务接入钉钉群消息提醒

        try {long startTimestamp = System.currentTimeMillis();log.info("[某某业务]开始");doSysInvoiceNoteRefresh();log.info(String.format("[某某业务]结束, 耗时%dms", System.currentTimeMillis() - startTimestamp));} catch (Exception e) {//dingAlertif (StringUtils.isEmpty(dingAlertEnv)) {dingAlertEnv = Strings.EMPTY;}log.info("[某某业务], dingAlertEnv:{}", dingAlertEnv);DingAlertUtil.alertDingMsg(String.format("[%s][%s][%s][%s]%s", dingAlertEnv, "某某业务", MDC.get("kctrace"), e.getClass().getSimpleName(), e.getMessage()));//log.error(String.format("[某某业务]异常, 异常信息: %s", e.getMessage()), e);e.printStackTrace();}

借鉴自

钉钉开发(一)——Java给钉钉群推送消息_怎么后端拿到钉钉群的消息呢-CSDN博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 ]
  • Python编程进阶题
  • centos彻底卸载docker服务
  • [笔记]基于小波分析的基频识别
  • 前端:html+css:伪类画箭头(实心)
  • 一般图最大权匹配
  • 前端面试——什么是原型和原型链
  • 这个暑假作业有点特别,帮100位老人开启这个功能
  • 一个很大的文件,文件的每一行是一个很大的数字,如果给你一个单机,内存比较小,存不了这么大的文件,但是硬盘是无限大的,如何对文件做一个排序输出
  • K8S部署MySQL5.7的主从服务
  • MFC程序设计(三)常用复杂控件的使用
  • 从零到上线,乔拓云助力快速构建在线教育平台
  • 【面试题系列Vue05】跟其他人不太一样的 Vue生命周期总结
  • 文案生成器,快速生成改写文案的捷径
  • 《黑神话:悟空》研发公司的薪资水平
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • dva中组件的懒加载
  • es6要点
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Lsb图片隐写
  • MySQL几个简单SQL的优化
  • php的插入排序,通过双层for循环
  • Python socket服务器端、客户端传送信息
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Service Worker
  • SSH 免密登录
  • Vue组件定义
  • 阿里研究院入选中国企业智库系统影响力榜
  • 闭包,sync使用细节
  • 关于字符编码你应该知道的事情
  • 官方解决所有 npm 全局安装权限问题
  • 后端_ThinkPHP5
  • 近期前端发展计划
  • 前端面试总结(at, md)
  • 实现菜单下拉伸展折叠效果demo
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • (1)Hilt的基本概念和使用
  • (21)起落架/可伸缩相机支架
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (二)c52学习之旅-简单了解单片机
  • (附源码)计算机毕业设计ssm电影分享网站
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (转)Sql Server 保留几位小数的两种做法
  • **CI中自动类加载的用法总结
  • .dwp和.webpart的区别
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别