成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

SpringBoot實現釘釘機器人消息推送的示例代碼

瀏覽:115日期:2022-06-18 11:52:36

零、前言

上一次做消息推送,是微信公眾號的定時消息通知。由于自己當時的水平不夠,加上企鵝家的開發文檔普遍不太友好,導致根本看不懂文檔在寫什么,不得不去看第三方博客來學習公眾號的開發。這次就不一樣了,昨天剛看了一下,阿里的開發文檔比鵝廠要清晰的多,而且在同一功能上,使用了多種語言作為示例代碼,可以說很友好了。可能這就是阿里和鵝廠的區別吧...辣雞文檔和好文檔的區別...本著“授之以漁”的態度,寫了這篇文章,作為官方文檔的補充。

SpringBoot實現釘釘機器人消息推送的示例代碼

一、在群里添加機器人

在群設置的智能群助手中添加自定義機器人,它長這個樣子:

SpringBoot實現釘釘機器人消息推送的示例代碼

比較關鍵的一步,是進行安全設置。加密方式一共有三種,既可以選擇一種也可以使用多種方式組合:

自定義關鍵詞 加簽 IP地址

各種加密方式的介紹,詳見官網:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

為了讓博客起到效果,我們選擇相對安全、也比較難的加簽方式。選擇加簽之后,把密鑰復制出來,然后就可以點確定了。

二、構建請求地址和內容

先看看官方文檔怎么描述加簽的:

第一步,把timestamp+'n'+密鑰當做簽名字符串,使用HmacSHA256算法計算簽名,然后進行Base64 encode,最后再把簽名參數再進行urlEncode,得到最終的簽名(需要使用UTF-8字符集)。第二步,把 timestamp和第一步得到的簽名值拼接到URL中。

官方的解釋很高大上,其實原理很簡單,就是把機器人密鑰加密后,放在URL的參數中,所以我們需要分別獲取時間戳和密鑰,組合一下,加密一下,再拼接一下就好了,如圖:

SpringBoot實現釘釘機器人消息推送的示例代碼

I have a Pen, I have an Apple,Oh~ Applepen~

官方給出了這樣的示例代碼:

import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;import java.net.URLEncoder;public class Test { public static void main(String[] args) throws Exception { Long timestamp = System.currentTimeMillis(); String secret = 'this is secret'; 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'); System.out.println(sign); }}

然而,org.apache.commons.codec.binary.Base64不是Java的內置類,也就是說,示例代碼并不能直接拿過來用:

SpringBoot實現釘釘機器人消息推送的示例代碼

查了一下,發現Java8中內置的java.util已經包含了Base64,因此用它替換掉原來的codec,無需再引入第三方包:

import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import java.util.Base64;import java.net.URLEncoder;public class ding { public static void main(String[] args) throws Exception { //獲取時間戳 Long timestamp = System.currentTimeMillis(); //定義密鑰 String secret = 'this is secret'; //把時間戳和密鑰拼接成字符串,中間加入一個換行符 String stringToSign = timestamp + 'n' + secret; //聲明一個Mac對象,用來操作字符串 Mac mac = Mac.getInstance('HmacSHA256'); //初始化Mac對象,設置Mac對象操作的字符串是UTF-8類型,加密方式是SHA256 mac.init(new SecretKeySpec(secret.getBytes('UTF-8'), 'HmacSHA256')); //把字符串轉化成字節形式 byte[] signData = mac.doFinal(stringToSign.getBytes('UTF-8')); //新建一個Base64編碼對象 Base64.Encoder encoder = Base64.getEncoder(); //把上面的字符串進行Base64加密后再進行URL編碼 String sign = URLEncoder.encode(new String(encoder.encodeToString(signData)),'UTF-8'); //分別輸出時間戳和加密信息 System.out.println(timestamp); System.out.println(sign); }}

用最笨的方法,在終端執行一下看看:

SpringBoot實現釘釘機器人消息推送的示例代碼

成功輸出了時間戳和驗證信息。

我們測試上述代碼的時候,可以手動拼接URL,直接發起請求:(URL一共有三個參數:access_token、timestamp、sign,需要換成自己的,也就是上面終端輸出的結果)

//替換參數后,在終端執行curl ’https://oapi.dingtalk.com/robot/send?access_token=70c168d03e73728ef36abea63c3c10048cbd054913cfeb&timestamp=1584607421017&sign=gJ3l4mhnlMuHxK1qFUx1kKUSdjuCNntsdG%2Bv%2BTCrLQM%3D’ -H ’Content-Type: application/json’ -d ’{'msgtype': 'text', 'text': { 'content': '我就是我, 是不一樣的煙火' }, 'sign': 'gJ3l4mhnlMuHxK1qFUx1kKUSdjuCNntsdG%2Bv%2BTCrLQM%3D' }’

然后就出現了:

SpringBoot實現釘釘機器人消息推送的示例代碼

經過測試,代碼正常運行,接下來就是部署到生產環境了。

三、部署代碼

我們需要先找一下Spring如何發起HTTP請求。

以前,筆者只用過前臺的HttpClient,對于后臺的HTTP工具并不了解。

一開始嘗試用Spring內置的RestTemplate,去網上查了它的用法,寫了一堆代碼,但怎么也不成功。由于從來沒用過RestTemplate,也沒耐心去看它的源碼,于是放棄。

后來,只能老老實實的用apache的httpClient,查了一下用法,雖然有點麻煩,很多操作沒法自動完成,但還算通俗易懂,而且它的包托管在Maven上,導入很方便。

<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.9</version></dependency>

httpClient的使用很靈活,這里使用的是POST方式,有一個參數,發起POST請求時,必須將字符集編碼設置成UTF-8。

粗略步驟如圖:

SpringBoot實現釘釘機器人消息推送的示例代碼

直接來一段稍微改一下就能用的代碼:

public class DingService { //請求地址以及access_token String Webhook = 'https://oapi.dingtalk.com/robot/send?access_token=YOUR TOKEN'; //密鑰 String secret = 'YOUR SECRET'; /* ** 生成時間戳和驗證信息 */ public String encode() throws Exception { //獲取時間戳 Long timestamp = System.currentTimeMillis(); //把時間戳和密鑰拼接成字符串,中間加入一個換行符 String stringToSign = timestamp + 'n' + this.secret; //聲明一個Mac對象,用來操作字符串 Mac mac = Mac.getInstance('HmacSHA256'); //初始化,設置Mac對象操作的字符串是UTF-8類型,加密方式是SHA256 mac.init(new SecretKeySpec(this.secret.getBytes('UTF-8'), 'HmacSHA256')); //把字符串轉化成字節形式 byte[] signData = mac.doFinal(stringToSign.getBytes('UTF-8')); //新建一個Base64編碼對象 Base64.Encoder encoder = Base64.getEncoder(); //把上面的字符串進行Base64加密后再進行URL編碼 String sign = URLEncoder.encode(new String(encoder.encodeToString(signData)),'UTF-8'); System.out.println(timestamp); System.out.println(sign); String result = '&timestamp=' + timestamp + '&sign=' + sign; return result; }; /* param: message 要發送的信息 ** return: void 無返回值 ** 作用:把傳入的message發送給釘釘機器人*/ public void dingRequest(String message){ CloseableHttpClient httpClient = HttpClientBuilder.create().build(); String url = null; try { url = this.Webhook + this.encode(); } catch (Exception e) { e.printStackTrace(); } HttpPost httpPost = new HttpPost(url); //設置http的請求頭,發送json字符串,編碼UTF-8 httpPost.setHeader('Content-Type', 'application/json;charset=utf8'); //生成json對象傳入字符 JSONObject result = new JSONObject(); JSONObject text = new JSONObject(); text.put('content', message); result.put('text', text); result.put('msgtype', 'text'); String jsonString = JSON.toJSONString(result); StringEntity entity = new StringEntity(jsonString, 'UTF-8'); //設置http請求的內容 httpPost.setEntity(entity); // 響應模型 CloseableHttpResponse response = null; try { // 由客戶端執行(發送)Post請求 response = httpClient.execute(httpPost); // 從響應模型中獲取響應實體 HttpEntity responseEntity = response.getEntity(); System.out.println('響應狀態為:' + response.getStatusLine()); if (responseEntity != null) { System.out.println('響應內容長度為:' + responseEntity.getContentLength()); System.out.println('響應內容為:' + EntityUtils.toString(responseEntity)); } } catch (Exception e) { e.printStackTrace(); } finally { try { // 釋放資源 if (httpClient != null) { httpClient.close(); } if (response != null) { response.close(); } } catch (Exception e) { e.printStackTrace(); } } }}

總結

其實消息推送的功能并不難,只是由于初次接觸,需要查很多的文檔,在這個過程中,鍛煉了文本閱讀能力和獨立解決問題的能力。

參考資料

Java如何進行Base64的編碼(Encode)與解碼(Decode)

Spring RestTemplate介紹

Spring--Http請求--HttpClient

到此這篇關于SpringBoot實現釘釘機器人消息推送的示例代碼的文章就介紹到這了,更多相關SpringBoot 釘釘機器人消息推送內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: 釘釘
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
悠悠色在线精品| 欧美亚洲免费在线一区| 欧美不卡在线| 51精品视频一区二区三区| 午夜激情一区二区| 欧美日韩一区二区三区免费| 日韩一区二区免费电影| 视频一区国产视频| 欧美一进一出视频| 一区二区三区在线观看国产| 亚洲视频高清| 国产精品你懂的| 91麻豆国产福利精品| 精品捆绑美女sm三区| 粉嫩一区二区三区在线看| 日韩欧美中文字幕制服| 国产成人免费视频一区| 日韩欧美一二三区| 成人性视频免费网站| 欧美成人艳星乳罩| 国产成人免费xxxxxxxx| 日韩三区在线观看| 精品亚洲porn| 欧美日韩国产精品自在自线| 久久国产剧场电影| 欧美日韩国产另类一区| 国产河南妇女毛片精品久久久| 欧美人牲a欧美精品| 韩日av一区二区| 欧美高清精品3d| 精品写真视频在线观看| 欧美日韩精品一区二区在线播放| 麻豆精品视频在线观看免费 | 99视频在线精品| 国产亚洲精品aa午夜观看| 欧美高清视频一区二区三区在线观看| 久久麻豆一区二区| 国产在线精品一区二区中文| 国产精品理伦片| 亚洲激情一区二区| 亚洲第一主播视频| 欧美三级在线看| 国内精品免费**视频| 欧美一区2区视频在线观看| 成人教育av在线| 国产三级三级三级精品8ⅰ区| 欧美精品入口| 亚洲免费av观看| 久久亚洲风情| 久久激五月天综合精品| 在线成人高清不卡| 波波电影院一区二区三区| 中文字幕不卡在线观看| 日韩一区二区久久| 免费观看日韩av| 欧美大片在线观看一区二区| 欧美日韩伊人| 亚洲成a人片在线不卡一二三区| 欧美图区在线视频| 国产精品66部| 国产日产亚洲精品系列| 亚洲精品中文字幕在线| 亚洲一区二区三区自拍| 在线观看91精品国产入口| 国产精品一区二区男女羞羞无遮挡| 久久在线观看免费| 激情综合中文娱乐网| 三级在线观看一区二区| 欧美一区二区三区影视| 欧美激情无毛| 亚洲精品老司机| 欧美性猛交xxxxxx富婆| 波波电影院一区二区三区| 中文字幕一区二区三区乱码在线 | 欧美成人一品| 夜色激情一区二区| 欧美精品亚洲二区| 欧美精品一卡| 视频一区二区不卡| 精品99一区二区三区| 亚洲精品在线免费| 国产麻豆视频一区| 国产精品私人自拍| 色狠狠色噜噜噜综合网| proumb性欧美在线观看| 亚洲四区在线观看| 欧美日韩一区二区三区视频| 91理论电影在线观看| 亚洲三级电影网站| 欧美日韩综合不卡| 欧美日韩成人| 久久国产福利国产秒拍| 中文字幕乱码亚洲精品一区| 色婷婷综合视频在线观看| 国产在线不卡一区| 国产精品久久久久三级| 欧美中文字幕不卡| 欧美日韩精品免费看| 日本在线不卡视频| 国产精品久久久久久久久免费桃花 | 亚洲一区二区在| 国产一区二区成人久久免费影院| 亚洲国产精品激情在线观看| 色播五月激情综合网| 99久久精品免费| 亚洲观看高清完整版在线观看| 精品国产在天天线2019| 亚洲欧美日韩国产综合精品二区 | 国产精品第四页| 欧美日韩在线亚洲一区蜜芽| 欧美日本一区二区视频在线观看| 另类小说欧美激情| 一区精品在线播放| 欧美一区二区三区视频免费| 亚洲一区三区电影在线观看| 91在线一区二区三区| 青青草成人在线观看| 中文字幕乱码亚洲精品一区| 欧美日韩国产精品自在自线| 一本不卡影院| 成人av免费在线观看| 午夜亚洲福利老司机| 久久老女人爱爱| 91传媒视频在线播放| 亚洲视频一区| 国产成人精品www牛牛影视| 亚洲不卡av一区二区三区| 久久精品免费在线观看| 欧美性色综合网| 国产三区二区一区久久| 9久草视频在线视频精品| 久久国产福利国产秒拍| 亚洲国产精品久久久男人的天堂| 国产三区在线成人av| 欧美一区二区三区在线| 久久精品国产第一区二区三区最新章节 | 成人在线综合网| 亚洲午夜精品网| 国产精品美女久久久久av爽李琼| 日韩一区二区三区观看| 91黄视频在线观看| 亚洲中午字幕| 91久久夜色精品国产九色| 国产成人av福利| 日韩精品一区第一页| 中文字幕一区在线观看视频| 久久久久亚洲蜜桃| 日韩写真欧美这视频| 欧美日韩一区不卡| 久久精品二区三区| 国产日韩专区| 激情一区二区| 欧美日韩一区自拍| 欧美一区1区三区3区公司| 福利电影一区二区三区| 激情五月播播久久久精品| 免费精品视频最新在线| 亚洲一区二区精品3399| 亚洲欧美一区二区三区国产精品| 欧美国产日本视频| 久久久久久久久久看片| 欧美不卡在线视频| 欧美一区二区三区免费大片| 色综合av在线| 久久九九99| 中文高清一区| 亚洲免费激情| 影音先锋久久| 欧美日韩无遮挡| 女生裸体视频一区二区三区| 99久久综合狠狠综合久久| 风流少妇一区二区| 国产成人在线色| 国产白丝精品91爽爽久久| 国产精品资源网站| 国产精品一区二区久久不卡| 国产精品中文有码| 国产成人精品影视| av高清久久久| 91蜜桃免费观看视频| 欧美有码视频| 欧美一区高清| 国内精品美女在线观看| 在线日韩电影| 国产精品一区二区三区观看| 国产精品美女久久久浪潮软件| 国产精品久久久久久模特| 久久久久久穴| 在线国产亚洲欧美| 欧美三区在线视频| 日韩一区二区三区四区| 精品久久久久久无| 国产精品日韩精品欧美在线| 国产精品色在线| 一区二区免费视频| 午夜久久久影院| 七七婷婷婷婷精品国产| 韩国女主播成人在线| 国产成人av网站| 午夜久久99|