DingDingUtils.java 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package com.fdkankan.utils;
  2. import com.dingtalk.api.DefaultDingTalkClient;
  3. import com.dingtalk.api.DingTalkClient;
  4. import com.dingtalk.api.request.OapiRobotSendRequest;
  5. import com.dingtalk.api.response.OapiRobotSendResponse;
  6. import com.fdkankan.constants.SysConstants;
  7. import com.fdkankan.log.entity.BuildLog;
  8. import com.google.api.client.util.Base64;
  9. import com.google.api.client.util.Lists;
  10. import com.taobao.api.ApiException;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.stereotype.Component;
  16. import javax.crypto.Mac;
  17. import javax.crypto.spec.SecretKeySpec;
  18. import java.io.UnsupportedEncodingException;
  19. import java.net.URLEncoder;
  20. import java.security.InvalidKeyException;
  21. import java.security.NoSuchAlgorithmException;
  22. @Component
  23. public class DingDingUtils {
  24. private static final Logger log = LoggerFactory.getLogger(DingDingUtils.class);
  25. private static String environment;
  26. private static String token = "6d47644ca903fca9154675f179bde79870e8f8fa243cd447c6e9e1d95b7527f1";
  27. private static String secret = "SECd7195545b1de281940a16c155638c294f95884ae49160895653c48b1552b14ca";
  28. @Value("${environment:dev}")
  29. public void setEnvironment(String environment){
  30. DingDingUtils.environment = environment;
  31. }
  32. @Value("${dingtalk.token:6d47644ca903fca9154675f179bde79870e8f8fa243cd447c6e9e1d95b7527f1}")
  33. public void setToken(String token) {
  34. DingDingUtils.token = token;
  35. }
  36. @Value("${dingtalk.secret:SECd7195545b1de281940a16c155638c294f95884ae49160895653c48b1552b14ca}")
  37. public void setSign(String secret) {
  38. DingDingUtils.secret = secret;
  39. }
  40. private static String msgPattern = "**环境**: %s\n\n" +
  41. "**服务器名称**: %s\n\n" +
  42. "**失败原因**: %s\n\n" +
  43. "**num**: %s\n\n" +
  44. "**server-path**: %s\n\n" +
  45. "**algorithm-log**: [%s](%s)";
  46. public static void sendMsgToDingRobot(String reason, BuildLog buildLog) throws ApiException, UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
  47. String content = String.format(msgPattern, environment, SysConstants.hostName, reason, buildLog.getSceneNum(),
  48. buildLog.getDataSource(), buildLog.getLogDetailPath(), buildLog.getLogDetailPath());
  49. log.info("服务器:{},发送钉钉消息:{}",SysConstants.hostName,content);
  50. sendMsgToDingRobot(content);
  51. }
  52. public static void sendMsgToDingRobot(String content) throws ApiException, UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
  53. Long timestamp = System.currentTimeMillis();
  54. String sign = getSign(timestamp);
  55. DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?" +
  56. "access_token="+token +
  57. "&timestamp=".concat(String.valueOf(timestamp)).concat("&sign=").concat(sign));
  58. OapiRobotSendRequest request = new OapiRobotSendRequest();
  59. request.setMsgtype("actionCard");
  60. OapiRobotSendRequest.Actioncard actioncard = new OapiRobotSendRequest.Actioncard();
  61. actioncard.setTitle("场景计算失败");
  62. actioncard.setText(content);
  63. request.setActionCard(actioncard);
  64. OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
  65. at.setAtMobiles(Lists.newArrayList());
  66. // isAtAll类型如果不为Boolean,请升级至最新SDK
  67. at.setIsAtAll(true);
  68. request.setAt(at);
  69. OapiRobotSendResponse re = client.execute(request);
  70. System.out.println(re.getBody());
  71. }
  72. public static String getSign(Long timestamp) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
  73. String stringToSign = timestamp + "\n" + secret;
  74. Mac mac = Mac.getInstance("HmacSHA256");
  75. mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
  76. byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
  77. return URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
  78. }
  79. public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException, ApiException {
  80. sendMsgToDingRobot("testtesttesttest");
  81. }
  82. }