@Controller
@RequestMapping("/DingService")
public class DingServiceController {
//请求地址以及access_token
String Webhook = "请求地址";
//密钥
String secret = "钉钉秘钥";
/*
** 生成时间戳和验证信息
*/
public String encode() throws Exception {
//获取时间戳
Long timestamp = System.currentTimeMillis();
//把时间戳和密钥拼接成字符串,中间加入一个换行符
String stringToSign = timestamp + "\n" + this.secret;
//声明一个Mac对象,用来操作字符串
Mac mac = Mac.getInstance("HmacSHA256");
//初始化,设置Mac对象操作的字符串是UTF-8类型,加密方式是SHA256
mac.init(new SecretKeySpec(this.secret.getBytes("UTF-8"), "HmacSHA256"));
//把字符串转化成字节形式
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
//新建一个Base64编码对象
Base64.Encoder encoder = Base64.getEncoder();
//把上面的字符串进行Base64加密后再进行URL编码
String sign = URLEncoder.encode(new String(encoder.encodeToString(signData)),"UTF-8");
System.out.println(timestamp);
System.out.println(sign);
String result = "×tamp=" + timestamp + "&sign=" + sign;
return result;
};
/* param: message 要发送的信息
** return: void 无返回值
** 作用:把传入的message发送给钉钉机器人*/
@RequestMapping(value = "/dingRequest", method = RequestMethod.POST ,produces="application/json;charset=utf-8")
@ResponseBody
public void dingRequest(String message){
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
String url = null;
try {
url = this.Webhook + this.encode();
} catch (Exception e) {
e.printStackTrace();
}
HttpPost httpPost = new HttpPost(url);
//设置http的请求头,发送json字符串,编码UTF-8
httpPost.setHeader("Content-Type", "application/json;charset=utf8");
//生成json对象传入字符
JSONObject result = new JSONObject();
JSONObject text = new JSONObject();
text.put("content", "需要推送的信息");
result.put("text", text);
result.put("msgtype", "text");
String jsonString = JSON.toJSONString(result);
StringEntity entity = new StringEntity(jsonString, "UTF-8");
//设置http请求的内容
httpPost.setEntity(entity);
// 响应模型
CloseableHttpResponse response = null;
try {
// 由客户端执行(发送)Post请求
response = httpClient.execute(httpPost);
// 从响应模型中获取响应实体
HttpEntity responseEntity = response.getEntity();
System.out.println("响应状态为:" + response.getStatusLine());
if (responseEntity != null) {
System.out.println("响应内容长度为:" + responseEntity.getContentLength());
System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 释放资源
if (httpClient != null) {
httpClient.close();
}
if (response != null) {
response.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
SpringBoot实现钉钉信息推送(个人笔记)
最新推荐文章于 2024-07-22 14:25:17 发布