天天看點

java釘釘實作消息推送java釘釘實作消息推送

java釘釘實作消息推送

最近wx内部查的比較嚴,是以域名經常被封0.0,本打算用短信通知,但是當時短信模闆稽核沒有通過加上比較急,就用了釘釘。參考了一下百度,發一篇詳細點的文檔。

下載下傳釘釘PC端,建立内部群,右上角群設定找到智能群助手,添加機器人(自定義),安全選擇加簽

java釘釘實作消息推送java釘釘實作消息推送
java釘釘實作消息推送java釘釘實作消息推送
java釘釘實作消息推送java釘釘實作消息推送
java釘釘實作消息推送java釘釘實作消息推送

這裡得到一個Webhook和secret(簽名秘鑰),接下來寫接口代碼(這裡是微信域名檢測):

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.Map;

public class DingUtil {

public static void sendMsg(String url,String name) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {

    //群機器人複制到的秘鑰secret
    String secret = "SEC..........................";
    //擷取系統時間戳
    Long timestamp = System.currentTimeMillis();
    //拼接
    String stringToSign = timestamp + "\n" + secret;
    //使用HmacSHA256算法計算簽名
    Mac mac = Mac.getInstance("HmacSHA256");
    mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
    byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
    //進行Base64 encode 得到最後的sign,可以拼接進url裡
    String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
    //釘釘機器人位址(配置機器人的webhook)
    String dingUrl = "https://oapi.dingtalk.com/robot/send?access_token=61ce597fca7c9f............&timestamp=" + timestamp + "&sign=" + sign;

    try {
       
        //是否通知所有人
        boolean isAtAll = true;
        //通知具體人的手機号碼清單
        List<String> mobileList = Lists.newArrayList();
        String userUrl = url;
        //釘釘機器人消息内容
        String content = "您的"+name+"域名" + userUrl + "已被微信限制";
        //組裝請求内容
        String reqStr = buildReqStr(content, isAtAll, mobileList);
        //推送消息(http請求)
        String result = HttpUtil.post(dingUrl, reqStr);
        // String result = HttpClientUtil.sendPostDataByJson(sign, reqStr,"utf8");
        System.out.println("result == " + result);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 組裝請求封包
 * @param content
 * @return
 */
private static String buildReqStr(String content, boolean isAtAll, List<String> mobileList) {
    //消息内容
    Map<String, String> contentMap = Maps.newHashMap();
    contentMap.put("content", content);
    //通知人
    Map<String, Object> atMap = Maps.newHashMap();
    //1.是否通知所有人
    atMap.put("isAtAll", isAtAll);
    //2.通知具體人的手機号碼清單
    atMap.put("atMobiles", mobileList);

    Map<String, Object> reqMap = Maps.newHashMap();
    reqMap.put("msgtype", "text");
    reqMap.put("text", contentMap);
    reqMap.put("at", atMap);
    
    return JSON.toJSONString(reqMap);
  }
}
           

Url是Webhook + timestamp + sign(經過處理後的簽名)

然後别的地方調用 DingUtil.sendMsg方法就行了,推送成功見下圖:

java釘釘實作消息推送java釘釘實作消息推送

如果是想發送給具體某個人,将上面代碼try裡的内容替換一下:

//是否通知所有人
        boolean isAtAll = true;
        //通知具體人的手機号碼清單
        List<String> mobileList = Lists.newArrayList();
           

換成——》

//通知具體人
        boolean isAtAll = false;
        //通知具體人的手機号碼清單
        List<String> mobileList = Lists.newArrayList();
        mobileList.add("184....");
           

注意 isAtAll 和 mobileList 不能同時生效。

點個 贊 吧,三克油 0.0

繼續閱讀