|
|
@ -2,9 +2,7 @@ package com.epmet.commons.tools.utils; |
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.dingtalk.api.DefaultDingTalkClient; |
|
|
|
import com.dingtalk.api.DingTalkClient; |
|
|
|
import com.dingtalk.api.request.OapiRobotSendRequest; |
|
|
|
import com.epmet.commons.tools.constant.DingDingRobotConstant; |
|
|
|
import com.epmet.commons.tools.dto.form.DingTalkTextMsg; |
|
|
|
import com.google.common.collect.Lists; |
|
|
|
import org.apache.commons.codec.binary.Base64; |
|
|
@ -16,9 +14,13 @@ import org.springframework.stereotype.Component; |
|
|
|
import javax.annotation.PreDestroy; |
|
|
|
import javax.crypto.Mac; |
|
|
|
import javax.crypto.spec.SecretKeySpec; |
|
|
|
import javax.validation.constraints.NotNull; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.UnsupportedEncodingException; |
|
|
|
import java.net.URLEncoder; |
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.security.InvalidKeyException; |
|
|
|
import java.security.NoSuchAlgorithmException; |
|
|
|
import java.util.concurrent.ArrayBlockingQueue; |
|
|
|
|
|
|
|
/** |
|
|
@ -135,15 +137,8 @@ public class DingdingMsgSender { |
|
|
|
param.setSecret(secret); |
|
|
|
} |
|
|
|
Result<String> result = new Result<String>().error(); |
|
|
|
Long timestamp = System.currentTimeMillis(); |
|
|
|
try { |
|
|
|
String stringToSign = timestamp + "\n" + param.getSecret(); |
|
|
|
Mac mac = Mac.getInstance("HmacSHA256"); |
|
|
|
mac.init(new SecretKeySpec(param.getSecret().getBytes(StandardCharsets.UTF_8), "HmacSHA256")); |
|
|
|
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); |
|
|
|
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); |
|
|
|
String url = param.getWebHook(); |
|
|
|
url = url.concat("×tamp=" + timestamp + "&sign=" + sign); |
|
|
|
String url = getUrlString(param, System.currentTimeMillis()); |
|
|
|
String jsonStrParam = param.getMsgContent(); |
|
|
|
result = HttpClientManager.getInstance().sendPostByJSON(url, jsonStrParam); |
|
|
|
} catch (Exception e) { |
|
|
@ -152,6 +147,18 @@ public class DingdingMsgSender { |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
@NotNull |
|
|
|
private String getUrlString(DingTalkTextMsg param, Long timestamp) throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException { |
|
|
|
String stringToSign = timestamp + "\n" + param.getSecret(); |
|
|
|
Mac mac = Mac.getInstance("HmacSHA256"); |
|
|
|
mac.init(new SecretKeySpec(param.getSecret().getBytes(StandardCharsets.UTF_8), "HmacSHA256")); |
|
|
|
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); |
|
|
|
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); |
|
|
|
String url = param.getWebHook(); |
|
|
|
url = url.concat("×tamp=" + timestamp + "&sign=" + sign); |
|
|
|
return url; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 发送POST 请求 |
|
|
|
* |
|
|
@ -167,7 +174,8 @@ public class DingdingMsgSender { |
|
|
|
} |
|
|
|
Result<String> result = new Result<String>().error(); |
|
|
|
try { |
|
|
|
DingTalkClient client = new DefaultDingTalkClient(StringUtils.isBlank(webHook) ? DingDingRobotConstant.DEPLOY_ROBOT : webHook); |
|
|
|
String url = getUrlString(param, System.currentTimeMillis()); |
|
|
|
DefaultDingTalkClient client = new DefaultDingTalkClient(url); |
|
|
|
OapiRobotSendRequest request = new OapiRobotSendRequest(); |
|
|
|
request.setMsgtype("text"); |
|
|
|
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text(); |
|
|
|