java通過(guò)釘釘機(jī)器人發(fā)消息的實(shí)現(xiàn)示例
釘釘自定義機(jī)器人使用 加簽的配置 發(fā)送消息
注意:內(nèi)部群才可以創(chuàng)建自定義機(jī)器人
釘釘網(wǎng)址-自定義機(jī)器人創(chuàng)建
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數(shù)據(jù)結(jié)構(gòu)
如果phone為null則發(fā)送普通消息,不為空則發(fā)送給特定的人
private JSONObject buildDingDingMessage(String phone, String message) { //2、按要求配置參數(shù)格式 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、檢查數(shù)據(jù) if (UtilString.isBlank(message)) { throw new IllegalArgumentException("請(qǐng)輸入釘釘服務(wù)機(jī)器人要輸出的信息"); } //2、配置釘釘信息 JSONObject json = buildDingDingMessage(phone, message); //3、請(qǐng)求 String url = URL + getSign(); String responseText = HttpClient.textBody(url) .json(json.toJSONString()) .connectTimeout(60) .readTimeout(5 * 60) .writeTimeout(5 * 60) .asString(); //無(wú)錯(cuò)則不發(fā)送日志消息 JSONObject responseJson = JSON.parseObject(responseText); if (!responseJson.getString("errmsg").equals("ok")) { log.error(responseJson.getString("errmsg")); } }
到此這篇關(guān)于java通過(guò)釘釘機(jī)器人發(fā)消息的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)java 釘釘機(jī)器人發(fā)消息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java數(shù)組高級(jí)算法與Arrays類常見(jiàn)操作小結(jié)【排序、查找】
這篇文章主要介紹了Java數(shù)組高級(jí)算法與Arrays類常見(jiàn)操作,結(jié)合實(shí)例形式總結(jié)分析了Java數(shù)組常見(jiàn)的排序算法、查找算法相關(guān)原理、實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2019-03-03Java實(shí)現(xiàn)月餅的制作、下單和售賣功能
這篇文章主要介紹了Java實(shí)現(xiàn)月餅的制作、下單和售賣,借此機(jī)會(huì),我們用Lambda實(shí)現(xiàn)一遍月餅制作,下單,售賣的開(kāi)發(fā)設(shè)計(jì)模式,主要有制作月餅的工廠模式,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09java得到某年某周的第一天實(shí)現(xiàn)思路及代碼
某年某周的第一天,此功能如何使用java編程得到呢?既然有了問(wèn)題就有解決方法,感興趣的朋友可以了解下本文,或許會(huì)給你帶來(lái)意想不到的收獲哦2013-01-01Java編程實(shí)現(xiàn)swing圓形按鈕實(shí)例代碼
這篇文章主要介紹了Java編程實(shí)現(xiàn)swing圓形按鈕實(shí)例代碼,涉及兩個(gè)簡(jiǎn)單的Java實(shí)現(xiàn)按鈕的代碼,其中一個(gè)具有偵測(cè)點(diǎn)擊事件的簡(jiǎn)單功能,具有一定借鑒價(jià)值,需要的朋友可以參考。2017-11-11Java的鎖機(jī)制:synchronized和CAS詳解
這篇文章主要介紹了Java的鎖機(jī)制synchronized和CAS詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-09-09基于Springboot的漫畫(huà)網(wǎng)站平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
本文將基于Springboot實(shí)現(xiàn)開(kāi)發(fā)一個(gè)漫畫(huà)主題的網(wǎng)站,實(shí)現(xiàn)一個(gè)比漂亮的動(dòng)漫連載的網(wǎng)站系統(tǒng),界面設(shè)計(jì)優(yōu)雅大方,比較適合做畢業(yè)設(shè)計(jì)和課程設(shè)計(jì)使用,需要的可以參考一下2022-08-08關(guān)于yml文件字符串,List,Map的書(shū)寫(xiě)方式并使用@ConfigurationProperties注入配置類
這篇文章主要介紹了關(guān)于yml文件字符串,List,Map的書(shū)寫(xiě)方式并使用@ConfigurationProperties注入配置類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12