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; 
 | 
    } 
 | 
  
 | 
} 
 |