Java实现企业微信消息推送功能的详细步骤(企业微信消息推送api)

网友投稿 525 2022-08-04


Java实现企业微信消息推送功能的详细步骤(企业微信消息推送api)

第一步:申请企业微信注册企业(链接:https://work.weixin.qq.com/nl/sem/registe?s=c&from=1011017189&bd_vid=11628667012427618020)

第二步:登录自己的企业微信找到应用管理———>添加应用

第三步:获取到应用的AgentId、Secret、企业id

第四步,准备代码编写:

model层代码:

package com.toone.itop.formula.function.inte.model;

/**

* @desc : 微信通用接口凭证

*

*/

public class AccessToken {

// 获取到的凭证

private String token;

// 凭证有效时间,单位:秒

private int expiresIn;

public String getToken() {

return token;

}

public void setToken(String token) {

this.token = token;

public int getExpiresIn() {

return expiresIn;

public void setExpiresIn(int expiresIn) {

this.expiresIn = expiresIn;

}

package com.toone.itop.formula.function.inte.model;

/**

* 消息基类(企业号 -> 普通用户)

*

*/

public class BaseMessage {

// 否 成员ID列表(消息接收者,多个接收者用‘|'分隔,最多支持1000个)。特殊情况:指定为@all,则向该企业应用的全部成员发送

private String touser;

// 否 部门ID列表,多个接收者用‘|'分隔,最多支持100个。当touser为@all时忽略本参数

private String toparty;

// 否 标签ID列表,多个接收者用‘|'分隔,最多支持100个。当touser为@all时忽略本参数

private String totag;

// 是 消息类型

private String msgtype;

// 是 企业应用的id,整型。可在应用的设置页面查看

private int agentid;

public String getTouser() {

return touser;

}

public void setTouser(String touser) {

this.touser = touser;

public String getToparty() {

return toparty;

public void setToparty(String toparty) {

this.toparty = toparty;

public String getTotag() {

return totag;

public void setTotag(String totag) {

this.totag = totag;

public String getMsgtype() {

return msgtype;

public void setMsgtype(String msgtype) {

this.msgtype = msgtype;

public int getAgentid() {

return agentid;

public void setAgentid(int agentid) {

this.agentid = agentid;

}

package com.toone.itop.formula.function.inte.model;

/**

* 文本

*

*/

public class Text {

//是 消息内容,最长不超过2048个字节

private String content;

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

package com.toone.itop.formula.function.inte.model;

/**

* 文本消息

*

*/

public class TextMessage extends BaseMessage {

// 文本

private Text text;

// 否 表示是否是保密消息,0表示否,1表示是,默认0

private int safe;

public Text getText() {

return text;

}

public void setText(Text text2) {

this.text = text2;

}

public int getSafe() {

return safe;

}

public void setSafe(int safe) {

this.safe = safe;

}

}

通用工具类:

package com.toone.itop.formula.function.inte.util;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

/**

* 证书信任管理器(用于https请求

*

*/

public class MyX509TrustManager implements X509TrustManager {

public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {

}

public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

public X509Certificate[] getAcceptedIssuers() {

return null;

}

package com.toone.itop.formula.function.inte.util;

/**

* 企业微信参数

*

*/

public class WeChatParamesUtil {

// 1.微信参数

// 企业ID

public final static String corpId = "ww0b7de3b4c25ba7881";

// 企业应用私钥OA

public final static String corpsecret = "xbV7an7Mev8yqsnSzzzSn0L_cCnOTJxbo9gVZR7ObpY1";

// 企业应用的id

public final static int agentId = 1000008;

public final static String aws6url = "http://localhost:8088";

}

package com.toone.itop.formula.function.inte.util;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.ConnectException;

import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSocketFactory;

import javax.net.ssl.TrustManager;

import net.sf.json.JSONException;

import net.sf.json.JSONObject;

import com.toone.itop.formula.function.inte.model.AccessToken;

public class WeChatUtil {

// 微信的请求url

// 获取access_token的接口地址(GET) 限200(次/天)

public final static String access_token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpId}&corpsecret={corpsecret}";

/**

* 1.发起https请求并获取结果

*

* @param requestUrTcmHsbyzol

* 请求地址

* @param requestMethod

* 请求方式(GET、POST)

* @param outputStr

* 提交的数据

* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)

*/

public static JSONObject httpRequest(String reqTcmHsbyzouestUrl, String requestMethod, String outputStr) {

JSONObject jsonObject = null;

StringBuffer buffer = new StringBuffer();

try {

// 创建SSLContext对象,并使用我们指定的信任管理器初始化

TrustManager[] tm = { new MyX509TrustManager() };

SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");

sslContext.init(null, tm, new java.security.SecureRandom());

// 从上述SSLContext对象中得到SSLSocketFactory对象

SSLSocketFactory ssf = sslContext.getSocketFactory();

URL url = new URL(requestUrl);

HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();

httpUrlConn.setSSLSocketFactory(ssf);

httpUrlConn.setDoOutput(true);

httpUrlConn.setDoInput(true);

httpUrlConn.setUseCaches(false);

// 设置请求方式(GET/POST)

httpUrlConn.setRequestMethod(requestMethod);

if ("GET".equalsIgnoreCase(requestMethod))

httpUrlConn.connect();

// 当有数据需要提交时

if (null != outputStr) {

OutputStream outputStream = httpUrlConn.getOutputStream();

// 注意编码格式,防止中文乱码

outputStream.write(outputStr.getBytes("UTF-8"));

outputStream.close();

}

// 将返回的输入流转换成字符串

InputStream inputStream = httpUrlConn.getInputStream();

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String str = null;

while ((str = bufferedReader.readLine()) != null) {

buffer.append(str);

bufferedReader.close();

inputStreamReader.close();

// 释放资源

inputStream.close();

inputStream = null;

httpUrlConn.disconnect();

jsonObject = JSONObject.fromObject(buffer.toString());

} catch (ConnectException ce) {

// Weixin server connection timed out

} catch (Exception e) {

// https request error:{}

// e.printStackTrace();

}

return jsonObject;

}

* 2.获取access_token

* @param appid

* 凭证

* @param appsecret

* 密钥

* @return

public static AccessToken getAccessToken(String appid, String appsecret) {

AccessToken accessToken = null;

String requestUrl = access_token_url.replace("{corpId}", appid).replace("{corpsecret}", appsecret);

JSONObject jsonObject = httpRequest(requestUrl, "GET", null);

// 如果请求成功

if (null != jsonObject) {

try {

accessToken = new AccessToken();

accessToken.setToken(jsonObject.getString("access_token"));

accessToken.setExpiresIn(jsonObject.getInt("expires_in"));

} catch (JSONException e) {

accessToken = null;

// 获取token失败

// log.error("获取token失败 errcode:{} errmsg:{}"+

// jsonObject.getInt("errcode")+jsonObject.getString("errmsg"));

return accessToken;

}

service层:

package com.toone.itop.formula.function.inte.service;

import net.sf.json.JSONObject;

import com.google.gson.Gson;

import com.toone.itop.formula.function.inte.model.Text;

import com.toone.itop.formula.function.inte.model.TextMessage;

import com.toone.itop.formula.function.inte.util.WeChatParamesUtil;

import com.toone.itop.formula.function.inte.util.WeChatUtil;

/**

* @desc : 发送消息

*

*/

public class WeChatService {

private static String sendMessage_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN";

/**

* @desc :0.公共方法:发送消息

* @param accessToken

* @param message

* void

*/

public static String sendMessage(String uid, String content) {

// 1.获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url

String accessToken = WeChatUtil.getAccessToken(WeChatParamesUtil.corpId, WeChatParamesUtil.corpsecret).getToken();

// 2.获取发送对象,并转成json

Gson gson = new Gson();

TextMessage message = new TextMessage();

// 1.1非必需

message.setTouser(uid); // 不区分大小写

//message.setToparty("1");

//message.getTouser(totag);

// txtMsg.setSafe(0);

// 1.2必需

message.setMsgtype("text");

message.setAgentid(WeChatParamesUtil.agentId);

Text text = new Text();

text.setContent(content);

message.setText(text);

String jsonMessage = gson.toJson(message);

// 3.获取请求的url

String url = sendMessage_url.replace("ACCESS_TOKEN", accessToken);

// 4.调用接口,发送消息

JSONObject jsonObject = WeChatUtil.httpRequest(url, "POST", jsonMessage);

// 4.错误消息处理

if (null != jsonObject) {

if (0 != jsonObject.getInt("errcode")) {

System.out.println("消息发送失败 errcode:{} errmsg:{}" + jsonObject.getInt("errcode") + jsonObject.getString("errmsg"));

}

}

return jsonObject.toString();

}

public static void main(String[] args) {

// 0.设置消息内容

String content = "这是一条测试消息";

//userId为企业用户的id

String userId = "qianxia";

// 3.发送消息:调用业务类,发送消息

WeChatService.sendMessage(userId, content);

}

}

所需引入的依赖

测试效果图:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:教你在JNA中将本地方法映射到JAVA代码中的示例
下一篇:Java字节缓存流的构造方法之文件IO流(java 字节缓冲流)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~