微信企业号开发
调用企业微信接口首先要有以下条件
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 }
运行起来测试一下?