| New file |
| | |
| | | package com.dy.pmsGlobal.util; |
| | | |
| | | 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 lombok.extern.slf4j.Slf4j; |
| | | 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; |
| | | |
| | | @Slf4j |
| | | @Component |
| | | public class DingDingUtils { |
| | | |
| | | @Value("${dingtalk.robot.access-token}") |
| | | private String custom_robot_token; |
| | | |
| | | // public static final String USER_ID= "<you need @ group user's userId>"; |
| | | @Value("${dingtalk.at-all}") |
| | | private boolean at_all; |
| | | |
| | | @Value("${dingtalk.robot.secret}") |
| | | private String secret; |
| | | |
| | | @Value("${dingtalk.robot.url}") |
| | | private String url; |
| | | |
| | | public OapiRobotSendResponse send(String msg) { |
| | | try { |
| | | Long timestamp = System.currentTimeMillis(); |
| | | String sign = sign(timestamp, secret); |
| | | System.out.println(sign); |
| | | //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(msg); |
| | | //定义 @ 对象 |
| | | OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); |
| | | if(at_all) { |
| | | at.setIsAtAll(true); |
| | | } |
| | | //设置消息类型 |
| | | req.setMsgtype("text"); |
| | | req.setText(text); |
| | | req.setAt(at); |
| | | OapiRobotSendResponse rsp = client.execute(req, custom_robot_token); |
| | | log.error("钉钉响应:"+rsp); |
| | | return rsp; |
| | | } 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); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private String sign(Long timestamp, String secret) 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")); |
| | | String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8"); |
| | | return sign; |
| | | } |
| | | |
| | | } |