package com.xcong.excoin.utils.dingtalk; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiRobotSendRequest; import com.dingtalk.api.response.OapiRobotSendResponse; import com.xcong.excoin.configurations.properties.ApplicationProperties; import com.xcong.excoin.utils.SpringContextHolder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; /** * @author wzy * @date 2020-04-17 22:18 **/ @Slf4j public class DingTalkUtils { private static final String SECRET = "SECbc84fd6c2edb9f2f440f9f969981ca310ba553e7c7994cf68cf26e4607cc5943"; private static final String URL = "https://oapi.dingtalk.com/robot/send?access_token=54a0d627111f3667f7e98691c15becadb742c4da895e60f6d77392389e49658a"; private static final String EXCEPTION_URL = "https://oapi.dingtalk.com/robot/send?access_token=da71769f2b21fe2004f00980a8d8e9c4b9db76a0b8025b6f4d957f55653fea39"; private static final String EXCEPTION_SECRET = "SECd9169511c38c3643bbda2440b1dcd1d3a57203656186fc2ceb7fcbef18c777ed"; private static DingTalkClient initClient(String url, String secret) throws Exception { Long timestamp = System.currentTimeMillis(); String sign = generateSign(timestamp, secret); url = url + "×tamp=" + timestamp + "&sign=" + sign; return new DefaultDingTalkClient(url); } public static void sendActionCard(int type) { log.info("send dingtalk"); ApplicationProperties properties = SpringContextHolder.getBean(ApplicationProperties.class); try { DingTalkClient client = initClient(URL, SECRET); OapiRobotSendRequest request = new OapiRobotSendRequest(); request.setMsgtype("actionCard"); OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard(); actionCard.setTitle(properties.getProject() + "--" + DingTalkType.getName(type)); actionCard.setBtnOrientation("1"); actionCard.setText(properties.getProject() + "--" + DingTalkType.getName(type)); List btns = new ArrayList<>(); OapiRobotSendRequest.Btns btn1 = new OapiRobotSendRequest.Btns(); btn1.setTitle("查看详情"); btn1.setActionURL("http://baidu.com"); btns.add(btn1); actionCard.setBtns(btns); request.setActionCard(actionCard); OapiRobotSendResponse response = client.execute(request); log.info(JSONObject.toJSONString(response)); } catch (Exception e) { log.error("#dingtalk send error#", e); } } public static void sendMsg(String title, String msg, Long id) { try { String text = "### {} \n\n {}"; DingTalkClient client = initClient(EXCEPTION_URL, EXCEPTION_SECRET); OapiRobotSendRequest request = new OapiRobotSendRequest(); request.setMsgtype("actionCard"); OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard(); actionCard.setTitle("异常消息"); actionCard.setBtnOrientation("0"); actionCard.setText(StrUtil.format(text, title, msg)); actionCard.setSingleURL("http://api.topclouds.cc/common/getExceptionMsg?id=" + id); actionCard.setSingleTitle("查询详情"); request.setActionCard(actionCard); OapiRobotSendResponse response = client.execute(request); log.info(JSONObject.toJSONString(response)); } catch (Exception e) { log.error("#dingtalk send error#", e); } } public static void sendOrderMsg() { ApplicationProperties properties = SpringContextHolder.getBean(ApplicationProperties.class); try { DingTalkClient client = initClient(URL, SECRET); OapiRobotSendRequest request = new OapiRobotSendRequest(); request.setMsgtype("actionCard"); OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard(); actionCard.setTitle(properties.getProject() + "--" + "老板开门啊"); actionCard.setBtnOrientation("1"); actionCard.setText(properties.getProject() + "--" + "老板关门不好吧"); List btns = new ArrayList<>(); OapiRobotSendRequest.Btns btn1 = new OapiRobotSendRequest.Btns(); btn1.setTitle("查看详情"); btn1.setActionURL("http://baidu.com"); btns.add(btn1); actionCard.setBtns(btns); request.setActionCard(actionCard); client.execute(request); } catch (Exception e) { log.error("#dingtalk send error#", e); } } private static String generateSign(Long timestamp, String secret) throws Exception { String stringToToken = timestamp + "\n" + secret; Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); byte[] signData = mac.doFinal(stringToToken.getBytes("UTF-8")); String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); return sign; } public static void main(String[] args) { // sendMsg("测试一下", "内容"); } }