package com.dy.pipIrrGlobal.config; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiRobotSendRequest; import com.dingtalk.api.response.OapiRobotSendResponse; import com.taobao.api.ApiException; import org.apache.commons.codec.binary.Base64; 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; import java.util.Collections; /** * @author ZhuBaoMin * @date 2024-07-31 9:20 * @LastEditTime 2024-07-31 9:20 * @Description 钉钉客户端工具类 */ @Component public class DingTalk { @Value("${dingtalk.robot.url}") private String URL; @Value("${dingtalk.robot.access-token}") private String CUSTOM_ROBOT_TOKEN; @Value("${dingtalk.robot.secret}") private String SECRET; @Value("${dingtalk.at-all}") private Boolean AT_ALL; @Value("${dingtalk.mobile}") private String MOBILE; public void sendMessage(String message) { try { Long timestamp = System.currentTimeMillis(); String secret = SECRET; 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")); String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); //sign字段和timestamp字段必须拼接到请求URL上,否则会出现 310000 的错误信息 DingTalkClient client = new DefaultDingTalkClient( URL + "?sign=" + sign + "×tamp=" + timestamp); OapiRobotSendRequest req = new OapiRobotSendRequest(); /** * 发送文本消息 */ //定义文本内容 OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text(); text.setContent(message); //定义 @对象 OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); if(AT_ALL) { at.setIsAtAll(true); }else { at.setAtMobiles(Collections.singletonList(MOBILE)); } //设置消息类型 req.setMsgtype("text"); req.setText(text); req.setAt(at); OapiRobotSendResponse rsp = client.execute(req, CUSTOM_ROBOT_TOKEN); System.out.println(rsp.getBody()); } catch (ApiException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (InvalidKeyException e) { throw new RuntimeException(e); } } }