企業微信登陸地址:https://work.weixin.qq.com(最好是管理員身份,或者自己注冊一個自己企業微信)
服務端api:https://work.weixin.qq.com/api/doc#90001/90143/90371
我們找到第三應用消息推動的相關api
應用支持推送文本、圖片、視頻、文件、圖文等類型。
請求方式:POST(HTTPS)請求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
參數說明:
參數
是否必須
說明
access_token
是
調用接口憑證
各個消息類型的具體POST格式參考以下文檔。
當應用設置“在微工作台中始終進入主頁”后應用在微信端只能接收到文本消息,並且文本消息的長度限制為20字節,超過20字節會被截斷。同時其他消息類型也會轉換為文本消息,提示用戶到企業微信查看。
是否必須
說明
access_token
是
調用接口憑證
各個消息類型的具體POST格式參考以下文檔。
當應用設置“在微工作台中始終進入主頁”后應用在微信端只能接收到文本消息,並且文本消息的長度限制為20字節,超過20字節會被截斷。同時其他消息類型也會轉換為文本消息,提示用戶到企業微信查看。
首先我們需要拿到access_token,但是access_token是什么呢?可以查看開發前必讀,有區分三種類型的access_token,
區分三種類型access_token
在第三方應用開發提供的接口中,會涉及到三種類型的access_token。下面表格對這三類token的定義及使用場景進行說明,開發者應在不同場景中選擇對應的token:
類型
說明
適用場景
服務商的token
以corpid(服務商CorpID)、provider_secret(服務商密鑰)換取provider_access_token,代表的是服務商的身份
用於服務商級別的接口調用,比如登錄授權、推廣二維碼等。說明文檔參考 獲取服務商憑證
第三方應用的token
以suite_id(第三方應用ID)、suite_secret(第三方應用密鑰)換取suite_access_token,代表第三方應用的身份
用於獲取第三方應用的預授權碼,獲取授權企業信息等。說明文檔參考 獲取第三方應用憑證
授權企業的token
企業安裝第三方應用后,第三方服務商以企業的corpid、永久授權碼來獲取access_token
用於操作授權企業相關接口,如通訊錄管理,消息推送等。說明文檔參考 獲取企業憑證
然后第三個“授權企業的token”,可以看到使用場景中有消息推送,點擊 獲取企業憑證進行查看。
說明
適用場景
服務商的token
以corpid(服務商CorpID)、provider_secret(服務商密鑰)換取provider_access_token,代表的是服務商的身份
用於服務商級別的接口調用,比如登錄授權、推廣二維碼等。說明文檔參考 獲取服務商憑證
第三方應用的token
以suite_id(第三方應用ID)、suite_secret(第三方應用密鑰)換取suite_access_token,代表第三方應用的身份
用於獲取第三方應用的預授權碼,獲取授權企業信息等。說明文檔參考 獲取第三方應用憑證
授權企業的token
企業安裝第三方應用后,第三方服務商以企業的corpid、永久授權碼來獲取access_token
用於操作授權企業相關接口,如通訊錄管理,消息推送等。說明文檔參考 獲取企業憑證
然后第三個“授權企業的token”,可以看到使用場景中有消息推送,點擊 獲取企業憑證進行查看。
獲取企業憑證
第三方服務商在取得企業的永久授權碼后,通過此接口可以獲取到企業的access_token。
獲取后可通過通訊錄、應用、消息等企業接口來運營這些應用。
獲取后可通過通訊錄、應用、消息等企業接口來運營這些應用。
此處獲得的企業access_token與企業獲取access_token拿到的token,本質上是一樣的,只不過獲取方式不同。獲取之后,就跟普通企業一樣使用token調用API接口
調用企業接口所需的access_token獲取方法如下。
請求方式:POST(HTTPS)請求地址: https://qyapi.weixin.qq.com/cgi-bin/service/get_corp_token?suite_access_token=SUITE_ACCESS_TOKEN
此處獲得的企業access_token與企業獲取access_token拿到的token,本質上是一樣的,所以我選擇了第二種方式。
獲取access_token
請求方式:GET(HTTPS)請求URL:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRECT注:此處標注大寫的單詞ID和SECRET,為需要替換的變量,根據實際獲取值更新。其它接口也采用相同的標注,不再說明。
若企業安裝了第三方應用,該服務商可通過“獲取企業access_token”獲得此調用憑證。
參數說明:
參數
必須
說明
corpid
是
企業ID
corpsecret
是
應用的憑證密鑰
權限說明:
必須
說明
corpid
是
企業ID
corpsecret
是
應用的憑證密鑰
權限說明:
每個應用有獨立的secret,所以每個應用的access_token應該分開來獲取
返回結果:
{
"errcode":0,
"errmsg":"",
"access_token": "accesstoken000001",
"expires_in": 7200
}
參數
說明
access_token
獲取到的憑證,最長為512字節
expires_in
憑證的有效時間(秒)
出錯返回示例:
說明
access_token
獲取到的憑證,最長為512字節
expires_in
憑證的有效時間(秒)
出錯返回示例:
{
"errcode":40091,
"errmsg":"secret is invalid"
}
特別說明:
企業微信所有接口,返回包里都有errcode、errmsg。開發者需根據errcode是否為0判斷是否調用成功(errcode意義請見全局錯誤碼)。
而errmsg僅作參考,后續可能會有變動,因此不可作為是否調用成功的判據。
后面不再贅述。
其中企業的id和應用的憑證秘鑰可以在術語介紹中找到,但是需要管理員權限
我們拿到access_token之后就可已進行消息的推送了,官方的api給了很多的消息類型,我只是簡單的開發了文本卡片消息,
因為官方發送消息的api已經很詳細了,上面的都包括了,我只是記錄一下自己的思路。所以,下面直接上代碼。
@Servicepublic class QywxSendMessageServiceImpl implements QywxSendMessageService{ private final String agentid="1000003"; //這是企業應用的id private final String secret="qiyeyingyongmiyao";//這是企業應用的秘鑰,自己手動更新 @Override public String sendMessage(Params param) { String qywxId = param.getString("qywxId");//獲取參數,企業微信的id String token =getAccessToken(qywxId,secret);//獲取token String userId=param.getString("userId");//推送給具體某個人的userid String departmentId=""; String content=param.getString("context");// String msgtype="mytext";// String agentid="1000002";//WxConstants.AGENTID是應用的agenid// String content="測試消息推送:你的快遞已到,請攜帶工卡前往郵件中心領取。\n出發前可查看<a href=\"http://work.weixin.qq.com\">郵件中心視頻實況</a>,聰明避開排隊。"; Map<String,Object> params = new LinkedHashMap<String,Object>(); params.put("touser", userId);// params.put("toparty", departmentId); params.put("agentid", agentid); JSONObject mytext = new JSONObject(); mytext.put("title","領獎通知"); mytext.put("description","<div class=\"gray\">2009年5月10日</div> <div class=\"normal\">恭喜你抽中瑪莎拉蒂一輛,領獎碼:xxxx</div><div class=\"highlight\">請於2009年5月9日前聯系行政同事領取</div>"); mytext.put("url","url"); mytext.put("btntxt","更多");// params.put("msgtype", "text"); params.put("msgtype", "textcard"); params.put("textcard",mytext); String result="發送失敗"; try { String aa=HttpUtils.httpPostMethod("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + token, params); JSONObject parseObject = JSON.parseObject(aa); String string = parseObject.getString("errcode"); if("0".equals(string)){ result="發送成功"; }else{ result=aa; } System.out.println("1.推送消息請求微信接口=="+aa); } catch (Exception e) { e.printStackTrace(); } return result; } private String getAccessToken(String qywxId, String secret2) { String url="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+qywxId+"&corpsecret="+secret2+""; String token=null; try { token = HttpUtils.httpGetMethod(url); } catch (Exception e) { e.printStackTrace(); } return token; } }
public class HttpUtils { public static String httpPostMethod(String url, Map<String, Object> params) { String returnValue = "接口調用失敗"; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost post = new HttpPost(url); post.setHeader("Content-Type","Content-Type"); post.setEntity(new StringEntity(JSON.toJSONString(params), "utf-8")); CloseableHttpResponse response = null; try{ response = httpClient.execute(post); if(response != null && response.getStatusLine().getStatusCode() == 200){ HttpEntity entity = response.getEntity(); returnValue = EntityUtils.toString(entity); } } catch(Exception e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (Exception e) { // e.printStackTrace(); } } //第五步:處理返回值 return returnValue; } public static String httpGetMethod(String url) throws Exception, Exception { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet get = new HttpGet(url); CloseableHttpResponse response = null; response = httpClient.execute(get); HttpEntity entity = response.getEntity(); String returnValue = EntityUtils.toString(entity); JSONObject jsonObject = JSON.parseObject(returnValue); String token = jsonObject.getString("access_token"); //建議此處需要將token緩存起來,避免總是調用接口 return token; } }
————————————————
版權聲明:本文為CSDN博主「嘎嘎&寶寶」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/aStartStudy/article/details/90215415
————————————————
版權聲明:本文為CSDN博主「嘎嘎&寶寶」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/aStartStudy/article/details/90215415
