簡單的企業微信推送消息開發


企業微信登陸地址: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,但是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”,可以看到使用場景中有消息推送,點擊 獲取企業憑證進行查看。
獲取企業憑證
第三方服務商在取得企業的永久授權碼后,通過此接口可以獲取到企業的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
   是
   應用的憑證密鑰
  權限說明:
每個應用有獨立的secret,所以每個應用的access_token應該分開來獲取
返回結果:
{
  "errcode":0,
  "errmsg":"",
  "access_token": "accesstoken000001",
  "expires_in": 7200
}
參數
   說明
  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博主「嘎嘎&amp;寶寶」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/aStartStudy/article/details/90215415


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM