1. 效果展示
2. 添加群机器人
安全设置这里选加签(这个会影响后面的权限验证方式)
3. 代码实现
package cn.hhnail.backend.ding;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
/**
* @author Hhnail
* @version 1.0
* @description: 钉钉机器人推送群消息
* @date 2023/3/4 20:48
*/
public class DingTest {
public static void main(String[] args) throws Exception {
Long timestamp = System.currentTimeMillis();
// 这个就是上面加签的密钥
String secret = "SEC3bfefce2aab9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
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 = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
// 这里就是消息的类型。详见https://open.dingtalk.com/document/orgapp/robot-message-types-and-data-format
JSONObject json = new JSONObject();
json.put("msgtype", "text");
json.put("text", new JSONObject() {{
put("content", "钉钉官方文档写的好拉!");
}});
// 这个就是上面创建机器人webhook后面的token
String accessToken = "dc7008ac6a594d671XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
String url = "https://oapi.dingtalk.com/robot/send"
+ "?access_token=" + accessToken
+ "×tamp=" + timestamp
+ "&sign=" + sign;
String get = HttpUtil.createPost(url)
.body(json)
.execute().body();
System.out.println(get);
}
}
4. 吐槽
钉钉官方文档写的真的拉跨。根本不是给人看的
开发文档,最基本的接口入参示例给一个吧?找半天找不到就算了,找到了还不能直接用。无语了
还有现在很多教程,能不能用最基本的Java类来做一个最简单的实现啊。老喜欢封装一些工具类,做一个简单的功能要引你一堆的类。工作中开发很多时候不方便加jar包的,这一点钉钉也是,明明推送个消息就我上面写的一点点代码就搞定了,还非要引用个什么 com.aliyun.dingtalkrobot_1_0.Client client = Sample.createClient(); 什么鸡毛类