importcom.dingtalk.api.DefaultDingTalkClient;importcom.dingtalk.api.DingTalkClient;importcom.dingtalk.api.request.OapiRobotSendRequest;importcom.dingtalk.api.response.OapiRobotSendResponse;importcom.zy.core.model.BDic;importcom.zy.model.ding.in.SendMessageIn;importlombok.extern.slf4j.Slf4j;importorg.apache.commons.codec.binary.Base64;importjavax.crypto.Mac;importjavax.crypto.spec.SecretKeySpec;importjava.net.URLEncoder;importjava.util.ArrayList;importjava.util.List;/***@authorzxq
* @description 钉钉推送服务类
* @date 2020/11/26*/@Slf4jpublic classDingTalkService {//文本消息
private static final String TEXT = "text";private static final String LINK = "link";private static final String MARKDOWN = "markdown";private static final String ACTION_CARD = "actionCard";private static final String FEED_CARD = "feedCard";/*** @description: 推送消息
*@paramin
*@return: void
*@author: zxq
* @Date: 2020/11/26 13:28*/
public static void sendMessage(SendMessageIn in) throwsException {
log.info("开始推送钉钉消息:" +in);
Long timestamp=System.currentTimeMillis();
String secret=in.getSecret();
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");
DingTalkClient client= new DefaultDingTalkClient(in.getWebhook() + "×tamp=" + timestamp + "&sign=" +sign);
OapiRobotSendRequest request= newOapiRobotSendRequest();
OapiRobotSendRequest.At at= newOapiRobotSendRequest.At();if (in.isAtAll() || in.getMobileList() == null || in.getMobileList().size() == 0) {//推送所有人
at.setIsAtAll(true);
}else{//推送指定用户
at.setAtMobiles(in.getMobileList());
at.setIsAtAll(false);
}
request.setAt(at);//文本消息
if(TEXT.equals(in.getMsgType())) {
request.setMsgtype(BDic.DING_TALK_MSG_TYPE.TEXT);
OapiRobotSendRequest.Text text= newOapiRobotSendRequest.Text();
text.setContent(in.getText());
request.setText(text);
}
OapiRobotSendResponse response=client.execute(request);
log.info("钉钉推送返回结果:" +response);
}public static void main(String[] args) throwsException {
List mobileList = new ArrayList<>();
mobileList.add("156xxxxxxxx");
SendMessageIn in= newSendMessageIn();
in.setMsgType(TEXT);
in.setAtAll(false);
in.setMobileList(mobileList);
in.setWebhook("https://oapi.dingtalk.com/robot/send?access_token=xxxxx");
in.setSecret("签");
in.setText("桃花坞里桃花庵,桃花庵下桃花仙");
sendMessage(in);
}
}importlombok.Data;importjava.util.List;/***@authorzxq
* @description 发送钉钉消息 入参
* @date 2020/11/13*/@Datapublic classSendMessageIn {//消息类型
privateString msgType;//webhook
privateString webhook;//密钥
privateString secret;//文本
privateString text;//指定对象
private ListmobileList;//是否推送所有人
private booleanisAtAll;
}