|
@ -1,6 +1,8 @@ |
|
|
package com.epmet.commons.tools.utils; |
|
|
package com.epmet.commons.tools.utils; |
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
|
|
import com.dingtalk.api.DefaultDingTalkClient; |
|
|
|
|
|
import com.dingtalk.api.request.OapiRobotSendRequest; |
|
|
import com.epmet.commons.tools.dto.form.DingTalkTextMsg; |
|
|
import com.epmet.commons.tools.dto.form.DingTalkTextMsg; |
|
|
import com.google.common.collect.Lists; |
|
|
import com.google.common.collect.Lists; |
|
|
import org.apache.commons.codec.binary.Base64; |
|
|
import org.apache.commons.codec.binary.Base64; |
|
@ -12,9 +14,13 @@ import org.springframework.stereotype.Component; |
|
|
import javax.annotation.PreDestroy; |
|
|
import javax.annotation.PreDestroy; |
|
|
import javax.crypto.Mac; |
|
|
import javax.crypto.Mac; |
|
|
import javax.crypto.spec.SecretKeySpec; |
|
|
import javax.crypto.spec.SecretKeySpec; |
|
|
|
|
|
import javax.validation.constraints.NotNull; |
|
|
import java.io.IOException; |
|
|
import java.io.IOException; |
|
|
|
|
|
import java.io.UnsupportedEncodingException; |
|
|
import java.net.URLEncoder; |
|
|
import java.net.URLEncoder; |
|
|
import java.nio.charset.StandardCharsets; |
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
|
|
import java.security.InvalidKeyException; |
|
|
|
|
|
import java.security.NoSuchAlgorithmException; |
|
|
import java.util.concurrent.ArrayBlockingQueue; |
|
|
import java.util.concurrent.ArrayBlockingQueue; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
@ -121,6 +127,7 @@ public class DingdingMsgSender { |
|
|
* @param param 请求参数,JSON格式 |
|
|
* @param param 请求参数,JSON格式 |
|
|
* @return |
|
|
* @return |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
@Deprecated |
|
|
private Result<String> sendMsg(DingTalkTextMsg param) { |
|
|
private Result<String> sendMsg(DingTalkTextMsg param) { |
|
|
if (StringUtils.isBlank(param.getWebHook())) { |
|
|
if (StringUtils.isBlank(param.getWebHook())) { |
|
|
param.setWebHook(webHook); |
|
|
param.setWebHook(webHook); |
|
@ -129,8 +136,18 @@ public class DingdingMsgSender { |
|
|
param.setSecret(secret); |
|
|
param.setSecret(secret); |
|
|
} |
|
|
} |
|
|
Result<String> result = new Result<String>().error(); |
|
|
Result<String> result = new Result<String>().error(); |
|
|
Long timestamp = System.currentTimeMillis(); |
|
|
|
|
|
try { |
|
|
try { |
|
|
|
|
|
String url = getUrlString(param, System.currentTimeMillis()); |
|
|
|
|
|
String jsonStrParam = param.getMsgContent(); |
|
|
|
|
|
result = HttpClientManager.getInstance().sendPostByJSON(url, jsonStrParam); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
logger.warn("sendPostByJSON error", e); |
|
|
|
|
|
} |
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@NotNull |
|
|
|
|
|
private String getUrlString(DingTalkTextMsg param, Long timestamp) throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException { |
|
|
String stringToSign = timestamp + "\n" + param.getSecret(); |
|
|
String stringToSign = timestamp + "\n" + param.getSecret(); |
|
|
Mac mac = Mac.getInstance("HmacSHA256"); |
|
|
Mac mac = Mac.getInstance("HmacSHA256"); |
|
|
mac.init(new SecretKeySpec(param.getSecret().getBytes(StandardCharsets.UTF_8), "HmacSHA256")); |
|
|
mac.init(new SecretKeySpec(param.getSecret().getBytes(StandardCharsets.UTF_8), "HmacSHA256")); |
|
@ -138,8 +155,32 @@ public class DingdingMsgSender { |
|
|
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); |
|
|
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); |
|
|
String url = param.getWebHook(); |
|
|
String url = param.getWebHook(); |
|
|
url = url.concat("×tamp=" + timestamp + "&sign=" + sign); |
|
|
url = url.concat("×tamp=" + timestamp + "&sign=" + sign); |
|
|
String jsonStrParam = param.getMsgContent(); |
|
|
return url; |
|
|
result = HttpClientManager.getInstance().sendPostByJSON(url, jsonStrParam); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 发送POST 请求 |
|
|
|
|
|
* |
|
|
|
|
|
* @param param 请求参数,JSON格式 |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
public Result<String> sendMsgSdk(DingTalkTextMsg param) { |
|
|
|
|
|
if (StringUtils.isBlank(param.getWebHook())) { |
|
|
|
|
|
param.setWebHook(webHook); |
|
|
|
|
|
} |
|
|
|
|
|
if (StringUtils.isBlank(param.getSecret())) { |
|
|
|
|
|
param.setSecret(secret); |
|
|
|
|
|
} |
|
|
|
|
|
Result<String> result = new Result<String>().error(); |
|
|
|
|
|
try { |
|
|
|
|
|
String url = getUrlString(param, System.currentTimeMillis()); |
|
|
|
|
|
DefaultDingTalkClient client = new DefaultDingTalkClient(url); |
|
|
|
|
|
OapiRobotSendRequest request = new OapiRobotSendRequest(); |
|
|
|
|
|
request.setMsgtype("text"); |
|
|
|
|
|
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text(); |
|
|
|
|
|
text.setContent("sdk"+param.getContent()); |
|
|
|
|
|
request.setText(text); |
|
|
|
|
|
client.execute(request); |
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
logger.warn("sendPostByJSON error", e); |
|
|
logger.warn("sendPostByJSON error", e); |
|
|
} |
|
|
} |
|
|