package com.fdkankan.utils; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiRobotSendRequest; import com.dingtalk.api.response.OapiRobotSendResponse; import com.fdkankan.constants.SysConstants; import com.fdkankan.log.entity.BuildLog; import com.google.api.client.util.Base64; import com.google.api.client.util.Lists; import com.taobao.api.ApiException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; @Component public class DingDingUtils { private static final Logger log = LoggerFactory.getLogger(DingDingUtils.class); private static String environment; private static String token = "6d47644ca903fca9154675f179bde79870e8f8fa243cd447c6e9e1d95b7527f1"; private static String secret = "SECd7195545b1de281940a16c155638c294f95884ae49160895653c48b1552b14ca"; @Value("${environment:dev}") public void setEnvironment(String environment){ DingDingUtils.environment = environment; } @Value("${dingtalk.token:6d47644ca903fca9154675f179bde79870e8f8fa243cd447c6e9e1d95b7527f1}") public void setToken(String token) { DingDingUtils.token = token; } @Value("${dingtalk.secret:SECd7195545b1de281940a16c155638c294f95884ae49160895653c48b1552b14ca}") public void setSign(String secret) { DingDingUtils.secret = secret; } private static String msgPattern = "**环境**: %s\n\n" + "**服务器名称**: %s\n\n" + "**失败原因**: %s\n\n" + "**num**: %s\n\n" + "**server-path**: %s\n\n" + "**algorithm-log**: [%s](%s)"; public static void sendMsgToDingRobot(String reason, BuildLog buildLog) throws ApiException, UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException { String content = String.format(msgPattern, environment, SysConstants.hostName, reason, buildLog.getSceneNum(), buildLog.getDataSource(), buildLog.getLogDetailPath(), buildLog.getLogDetailPath()); log.info("服务器:{},发送钉钉消息:{}",SysConstants.hostName,content); sendMsgToDingRobot(content); } public static void sendMsgToDingRobot(String content) throws ApiException, UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException { Long timestamp = System.currentTimeMillis(); String sign = getSign(timestamp); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?" + "access_token="+token + "×tamp=".concat(String.valueOf(timestamp)).concat("&sign=").concat(sign)); OapiRobotSendRequest request = new OapiRobotSendRequest(); request.setMsgtype("actionCard"); OapiRobotSendRequest.Actioncard actioncard = new OapiRobotSendRequest.Actioncard(); actioncard.setTitle("场景计算失败"); actioncard.setText(content); request.setActionCard(actioncard); OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); at.setAtMobiles(Lists.newArrayList()); // isAtAll类型如果不为Boolean,请升级至最新SDK at.setIsAtAll(true); request.setAt(at); OapiRobotSendResponse re = client.execute(request); System.out.println(re.getBody()); } public static String getSign(Long timestamp) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException { String stringToSign = timestamp + "\n" + secret; Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); return URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8"); } public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException, ApiException { sendMsgToDingRobot("testtesttesttest"); } }