成果:
描述:
最近工作需要根據需求把跟進記錄推送至企業微信用戶,提醒對方查看。
參考自企業微信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);
}
}