java通过API给企业微信用户发送微信消息
成果:
描述:
最近工作需要根据需求把跟进记录推送至企业微信用户,提醒对方查看。
参考自企业微信API: https://work.weixin.qq.com/api/doc#90000/90135/90236
准备工作:
写在前面:仔细阅读API文档:在企业微信开发最开始的地方有这样一段话:https://work.weixin.qq.com/api/doc#90000/90135/91039
我就在这里卡住了一会!!!通过调用不同的接口要提供对应的token 及参数
一、:在企业微信管理后台创建自建应用如下:
点进去如下:
可以看到又AgentId Secret 两个参数:其中Secret 是用来与企业ID(别说你不知道)一块生成acces_token 用的,AgentId是用来作为发消息时使用的参数用的(因该是给后台确实使用哪个身份发送消息用的)如果AgentId 与通过Secret生成的token不配对会提示你:
好,开始:步骤如下;
通过https请求,使用企业ID和Sercet 获取token :然后使用Token构造post请求发出去over
Https 请求需在本地构造一下:
package wechat; /**
* TODO:
*
* @author David
* @version 1.o
* @date 2019-03-27 15:15
*/
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class MyX509trustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { }
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { }
@Override
public X509Certificate[] getAcceptedIssuers() { return null; }
}
然后(好用记得点个赞):
package wechat; /**
* TODO:
*
* @author David
* @version 1.o
* @date 2019-03-27 15:14
*/
import net.sf.json.JSONObject;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
public class WeChatSync {
/*获取token*/
public static String getSendMsgToken() throws Exception {
String requestUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=自己企业ID的不给你们看&corpsecret=自己的secret不给你们看";//注意与AgenId(若有) 对应使用
String requestMethod = "GET";
String outputStr = null;
StringBuffer buffer = null;
//创建SSLContext
SSLContext sslContext = SSLContext.getInstance("SSL");
TrustManager[] tm = {new MyX509trustManager()};
//初始化
sslContext.init(null, tm, new java.security.SecureRandom());
//获取SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod(requestMethod);
//设置当前实例使用的SSLSoctetFactory
conn.setSSLSocketFactory(ssf);
conn.connect();
//往服务器端写内容
if (null != outputStr) {
OutputStream os = conn.getOutputStream();
os.write(outputStr.getBytes("utf-8"));
os.close();
}
//读取服务器端返回的内容
InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
buffer = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
buffer.append(line);
}
JSONObject jsonObject = JSONObject.fromObject(buffer.toString());
String accesstoken = jsonObject.getString("access_token");
System.out.println("获取到的Token---------"+accesstoken);
return accesstoken;
}
//发送信息
public static String SendMsgtoBody(JSONObject outputStr) throws Exception {
String requestUrl="https://qyapi.weixin.qq.com/cgi-bin/message/send";
String requestMethod = "POST";
StringBuffer buffer = null;
//创建SSLContext
SSLContext sslContext = SSLContext.getInstance("SSL");
TrustManager[] tm = {new MyX509trustManager()};
//初始化
sslContext.init(null, tm, new java.security.SecureRandom());
;
//获取SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl + "?access_token=" + getSendMsgToken());
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod(requestMethod);
//设置当前实例使用的SSLSoctetFactory
conn.setSSLSocketFactory(ssf);
conn.connect();
//往服务器端写内容
if (null != outputStr) {
OutputStream os = conn.getOutputStream();
os.write(outputStr.toString().getBytes("utf-8"));
os.close();
}
//读取服务器端返回的内容
InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
buffer = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
buffer.append(line);
}
JSONObject json1 = JSONObject.fromObject(buffer.toString());
System.out.println(json1);
String msg = json1 .getString("errmsg");
return msg ;
}
}
最后:
package wechat;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
* TODO:
*
* @author David
* @version 1.o
* @date 2019-03-27 15:16
*/
public class run {
public static void main(String[] args) throws Exception {
JSONObject insertdata=new JSONObject();
JSONObject content=new JSONObject();
content.put("content","\"你的快递已到,请携带工卡前往邮件中心领取。\\n出发前可查看<a href=\\\"http://work.weixin.qq.com\\\">邮件中心视频实况</a>,聪明避开排队。");
insertdata.put("touser","100001592");//这里是接收信息的人员id(多个人用 | 隔开)
insertdata.put("msgtype","text");
insertdata.put("agentid",1000014);//此处一定要与上面的自建应用AgentId对应
insertdata.put("text",content);
insertdata.put("safe",0);
System.out.println(insertdata);
WeChatSync.SendMsgtoBody(insertdata);
}
}