钉钉自定义机器人使用 加签的配置 发送消息
注意:内部群才可以创建自定义机器人
钉钉网址-自定义机器人创建
1、获得的钉钉配置信息workhook和secret
//url路径
private String URL = "https://oapi.dingtalk.com/robot/send?access_token=08ebaa04f98f7faacbacd80fa879463d85cdccdd6cef184ef01bb5a8b6ae6f6c";
//加签密钥
private String DINGDING_SECRET = "SEC27596efd776991b2f6786270fa59552459f64612b17adf377295669361af3fae";
2、配置加签
配置路径
private String getSign() {
Long timestamp = System.currentTimeMillis();
String stringToSign = timestamp + "\n" + DINGDING_SECRET;
Mac mac = null;
String sign = null;
try {
mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(DINGDING_SECRET.getBytes("UTF-8"), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
} catch (Exception e) {
throw new IllegalArgumentException("加签处理有误");
}
return "×tamp=" + timestamp + "&sign=" + sign;
}
3、按照钉钉要求整理json数据结构
如果phone为null则发送普通消息,不为空则发送给特定的人
private JSONObject buildDingDingMessage(String phone, String message) {
//2、按要求配置参数格式
JSONObject json = new JSONObject();
json.put("msgtype", "text");
json.put("text", new JSONObject() {{
put("content", message);
}});
if (!UtilString.isBlank(phone)) {
ArrayList<String> list = new ArrayList<>();
list.add(phone);
json.put("at", new JSONObject() {{
put("atMobiles", list.toArray());
}});
}
return json;
}
@Override
public void doSendMessage(String phone, String message) {
//1、检查数据
if (UtilString.isBlank(message)) {
throw new IllegalArgumentException("请输入钉钉服务机器人要输出的信息");
}
//2、配置钉钉信息
JSONObject json = buildDingDingMessage(phone, message);
//3、请求
String url = URL + getSign();
String responseText = HttpClient.textBody(url)
.json(json.toJSONString())
.connectTimeout(60)
.readTimeout(5 * 60)
.writeTimeout(5 * 60)
.asString();
//无错则不发送日志消息
JSONObject responseJson = JSON.parseObject(responseText);
if (!responseJson.getString("errmsg").equals("ok")) {
log.error(responseJson.getString("errmsg"));
}
}