微信企業號開發
微信企業號開發
呼叫企業微信介面首先要有以下條件
1、有一個企業微信賬戶
2、請求api時需要帶上AccessToken
3、組裝企業微信規定的報文格式
第一,建立一個全新的企業賬戶
在企業微信中點選全新建立企業
補充完資訊後點擊建立
第一,獲取token
登入企業微信網頁版繼續後面操作:https://work.weixin.qq.com/login
AccessToken是企業號的全域性唯一票據,呼叫介面時需攜帶AccessToken。
AccessToken需要用CorpID和Secret來換取,不同的Secret會返回不同的AccessToken。正常情況下AccessToken有效期為7200秒,有效期內重複獲取返回相同結果。access_token至少保留512位元組的儲存空間。
corpid獲取
在企業網頁版找到“我的企業”,“企業資訊”,下面的企業ID就是corpid
獲取 corpsecret
在“應用管理”,“應用”,如圖箭頭指示的位置,新建一個應用
建立完成之後會看到Secret,點選檢視,根據提示操作即可獲取 corpsecret
有了corpid和corpsecret就可以獲取token了
- 請求說明
Https請求方式: GET
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect
- 引數說明
引數 | 必須 | 企業Id |
corpid | 是 | 企業Id |
corpsecret | 是 | 管理組的憑證金鑰 |
許可權說明
每個secret代表了對應用、通訊錄的不同許可權;不同的管理組擁有不同的secret。
- 返回說明
a)正確的Json返回結果:
{ "access_token": "accesstoken000001", "expires_in": 7200 }
引數 | 說明 |
access_token | 獲取到的憑證。長度為64至512個位元組 |
expires_in | 憑證的有效時間(秒) |
b)錯誤的Json返回示例:
{ "errcode": 43003, "errmsg": "require https" }
獲取到token之後接下來就是組裝請求報文
下面是官網給出的請求報文格式
1 { 2 "touser": "UserID1|UserID2|UserID3", 3 "toparty": " PartyID1 | PartyID2 ", 4 "totag": " TagID1 | TagID2 ", 5 "msgtype": "text", 6 "agentid": 1, 7 "text": { 8 "content": "Holiday Request For Pony(http://xxxxx)" 9 }, 10 "safe":0 11 }
備註:touser就是選擇要傳送的物件,如果管理員沒有特別設定,一般就是使用者的名字,如果是想全員分發,可以設定為 @all 即可,下面是我組裝的一個測試報文
1 { 2 "touser" : "@all", 3 "msgtype" : "text", 4 "agentid" : 1000002, 5 "text" : { 6 "content" : "我就試一下" 7 }, 8 "safe":0 9 }
下面就是具體實現的程式碼
1 package com.spring.earlywarning.util; 2 3 import net.sf.json.JSONObject; 4 5 import javax.net.ssl.HttpsURLConnection; 6 import java.io.BufferedReader; 7 import java.io.InputStreamReader; 8 import java.io.OutputStreamWriter; 9 import java.io.PrintStream; 10 import java.net.HttpURLConnection; 11 import java.net.URL; 12 13 /** 14 * @author liuwenlong 15 * @create 2022-03-16 00:47:16 16 */ 17 @SuppressWarnings("all") 18 public class MyWeixin { 19 20 public MyWeixin() { 21 } 22 23 //接收訊息介面 24 public void sendMessageToWinxin(String message) throws Exception { 25 message = message.trim(); 26 message = message.replace("\r\n", ","); 27 message = message.replace("\n", ","); 28 String Json = "{\n" + 29 " \"touser\" : \"@all\",\n" + 30 " \"msgtype\" : \"text\",\n" + 31 " \"agentid\" : 1000002,\n" + 32 " \"text\" : {\n" + 33 " \"content\" : \" " + message + "\"\n" + 34 " },\n" + 35 " \"safe\":0\n" + 36 "}"; 37 38 String getTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=你的corpid&corpsecret=你的corpsecret"; 39 String token = getToken(getTokenUrl); 40 String urlPath = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + token; 41 doJsonPost(urlPath, Json); 42 } 43 44 //獲取token 45 public String getToken(String URL) { 46 try { 47 java.net.URL u = new URL(URL); 48 HttpsURLConnection huconn = (HttpsURLConnection) u.openConnection(); 49 BufferedReader in = null; 50 StringBuilder result = new StringBuilder(); 51 huconn.connect(); 52 in = new BufferedReader(new InputStreamReader(huconn.getInputStream(), "UTF-8")); 53 String line; 54 while ((line = in.readLine()) != null) { 55 result.append(line); 56 } 57 if (in != null) { 58 in.close(); 59 } 60 huconn.disconnect(); 61 62 JSONObject myJsonObject = new JSONObject(); 63 myJsonObject = JSONObject.fromObject(result.toString()); 64 String token = myJsonObject.getString("access_token"); 65 return token; 66 } catch (Exception e) { 67 e.printStackTrace(); 68 } 69 return ""; 70 } 71 72 //傳送資訊 73 public void doJsonPost(String urlPath, String Json) throws Exception { 74 String result = ""; 75 BufferedReader reader = null; 76 URL url = new URL(urlPath); 77 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 78 conn.setRequestMethod("POST"); 79 conn.setDoOutput(true); 80 conn.setDoInput(true); 81 conn.setUseCaches(false); 82 conn.setRequestProperty("Encoding", "UTF-8"); 83 conn.setRequestProperty("Connection", "Keep-Alive"); 84 conn.setRequestProperty("Charset", "application/json;UTF-8"); 85 86 byte[] writebytes = Json.getBytes(); 87 // 設定檔案長度 88 conn.setRequestProperty("Content-Length", String.valueOf(writebytes.length)); 89 OutputStreamWriter outwritestream = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); 90 outwritestream.write(Json.toCharArray()); 91 outwritestream.flush(); 92 93 System.out.println(conn.getResponseCode()); 94 if (conn.getResponseCode() == 0) { 95 System.out.println(Json); 96 } 97 } 98 99 }
執行起來測試一下?