应用场景:当项目在运行时如发生异常,可实时在手机钉钉上查看。
如果您的项目是SpringBoot 可以配合 异常处理AOP。SpringBoot实现自定义注解处理异常 。实现异常后自动报警到钉钉。
第一步:获取钉钉的token 和 secret
首先登录钉钉PC,随便找一个群组,点击右上角··· --》点智能群助手--》点添加机器人--》添加机器人--》自定义--》添加
随便取个名字,
至此 我们拿到了 以下数据
1.基础URL :https://oapi.dingtalk.com/robot/send
2.token :8a902a73b480c9bd84903a67ebff8d13ec34b39c98f1aed17216(用上面拿到的,别用这个)
3.secret:SECaf0c1d14cb683f41dc7a87e7cd61468b9d1cc4502c(用上面拿到的,别用这个)
第二步:准备POST请求所需方法 或者其他HTTP POST 请求的工具类
//初始化客户端
OkHttpClient mClient ;
static {
Builder builder = new Builder();
builder.connectTimeout(10L, TimeUnit.SECONDS);
builder.readTimeout(10L, TimeUnit.SECONDS);
Dispatcher dispatcher = new Dispatcher();
dispatcher.setMaxRequestsPerHost(200);
dispatcher.setMaxRequests(200);
builder.dispatcher(dispatcher);
mClient = builder.build();
}
//通用POST请求方法 依赖OKhttp3
public static String postWithJson(String url, String jsonParams) {
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8");, jsonParams);
Request request = (new Builder()).url(url).post(body).build();
try {
Response response = mClient.newCall(request).execute();
if (response != null && response.body() != null) {
return response.body().string();
}
} catch (IOException var5) {
log.error("Exception:", var5);
}
return null;
}
第三步:准备请求参数 - 请求参数方式是application/json 所以此处用了 fastjson (用字符串之类也行)
JSONObject jsonObject = new JSONObject();
//固定参数
jsonObject.put("msgtype","text");
JSONObject content = new JSONObject();
//此处message是你想要发送到钉钉的信息
content.put("content",message);
jsonObject.put("text",content);
第四步:发送请求。
String baseUrl = "https://oapi.dingtalk.com/robot/send?access_token=";
String token ="token";
String secret = "secret";
try {
// 获取签名字符串
Long timestamp = System.currentTimeMillis();
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 = "×tamp="+timestamp+"&sign="+URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
//发送
postWithJson(baseUrl + token + sign , jsonObject.toJSONString());
}catch (Exception e){
e.printStackTrace();
}
效果如下: