JAVA实现企业微信的消息推送

您所在的位置:网站首页 ticwatchpro3微信推送通知 JAVA实现企业微信的消息推送

JAVA实现企业微信的消息推送

2024-06-02 16:02| 来源: 网络整理| 查看: 265

【需求】将外部事件消息发送至企业微信,所在成员可以根据消息进行事件处理。 【实现流程】管理员在企业微信中自建小程序,将小程序的ID和微信的access_token作为接入连接的凭证,实现外部消息内容与企业微信自建应用聊天框的对接,最终将外部事件消息通过应用发送给企业微信所在成员。 【主要内容】该文档为发送消息的小示范(demo),运行后能将后台信息发送至小程序。

目录总览 1 打开管理后台2 进行“企业注册”3 自建应用4 功能实现(1)获取CORPID与CORPSECRET(2)创建“qiyeTestProject”项目(3)创建消息发送类(4)创建Access_Token类(5)获取access_token(6)发送信息(7)进行测试 5 应用界面

1 打开管理后台

打开企业微信管理后台(从企业微信官网进入)

2 进行“企业注册”

根据表单输入相关信息,最后扫码绑定

在这里插入图片描述

3 自建应用

管理员进入管理后台,开始自建应用,填充所需信息

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

4 功能实现

前期的应用环境准备完毕后,需要用JAVA开始实现信息发送的功能 此处选择IDEA来进行代码编写和功能测试。

·ACCESS_TOKEN:微信公众号平台的全局唯一接口调用凭据,换句话说,这是外部信息与微信平台之间通道的通信证;有效期为2小时,需要定时刷新,这种自动刷新的任务将以“发一次信息就即时申请凭证”的方式交给后台程序来做,不需要用户手动获取。 ·CORPID:企业号唯一标志符号,用于企业的“定位”。 ·CORPSECRET:自建应用的唯一标志符号,用于企业中自建应用的“定位”,上文自建应用流程末尾有提到Secret。

(1)获取CORPID与CORPSECRET

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

(2)创建“qiyeTestProject”项目

在IDEA中创建“qiyeTestProject”项目,引入依赖如下(该demo为一个简单的maven项目,没有使用springboot等框架,如果有需要可以根据自己的代码环境进行更改)

org.apache.httpcomponents httpclient 4.5.2 com.alibaba fastjson 1.2.62 (3)创建消息发送类

创建消息发送类SendWeChatMessage;设定final参数,一旦初始化后不可更改,主要用于ID等固定值

//发送消息的类型 private final static String MSGTYPE = "text"; //将消息发送给所有成员 private final static String TOPARTY = "@all"; //获取企业微信的企业号,根据不同企业更改 private final static String CORPID = "wwb57d1d1f91303d52"; //获取企业应用的密钥,根据不同应用更改 private final static String CORPSECRET = "r49wz8vesxBZdzIy0J8FzvGlflhOg1o9s32uiB3RVs0"; //获取访问权限码URL private final static String ACCESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"; //创建会话请求URL private final static String CREATE_SESSION_URL = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="; (4)创建Access_Token类

创建Access_Token类对象,其中包括ACCESS_TOKEN码和有效时间(2小时,7200秒)

public class AccessToken { //获取到的access_token字符串 private String access_token; //有效时间(2h,7200s) private int expires_in; public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this.access_token = access_token; } public int getExpires_in() { return expires_in; } public void setExpires_in(int valid_time) { this.expires_in = valid_time; } } (5)获取access_token

回到类SendWeChatMessage,对ACCESS_TOKEN方法进行实现:access_token的获取可以通过post请求,以接口调试的方法获取,我们要做的就是将人工的接口调试过程封装为程序的一个方法,可以自动触发,不需要每一次都去人工申请

//获取access_token public static AccessToken getAccessToken() { AccessToken token = new AccessToken(); //访问微信服务器 String url = ACCESS_TOKEN_URL + "?corpid=" + CORPID + "&corpsecret=" + CORPSECRET; try { URL getUrl = new URL(url); //开启连接,并返回一个URLConnection对象 HttpURLConnection http = (HttpURLConnection)getUrl.openConnection(); http.setRequestMethod("GET"); http.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=UTF-8"); //将URL连接用于输入和输出,一般输入默认为true,输出默认为false http.setDoOutput(true); http.setDoInput(true); //进行连接,不返回对象 http.connect(); //获得输入内容,并将其存储在缓存区 InputStream inputStream = http.getInputStream(); int size = inputStream.available(); byte[] buffer = new byte[size]; inputStream.read(buffer); //将内容转化为JSON代码 String message = new String(buffer,"UTF-8"); JSONObject json = JSONObject.parseObject(message); //提取内容,放入对象 token.setAccess_token(json.getString("access_token")); token.setExpires_in(new Integer(json.getString("expires_in"))); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //返回access_token码 return token; } (6)发送信息

对信息发送的流程封装为一个方法,使用 http中的post协议

/** * 企业接口向下属关注用户发送给微信消息 * * @param toUser 成员ID列表 * @param toParty 部门ID列表 * @param toTag 标签ID列表 * @param content 消息内容 * @param safe 是否保密 * * @return */ @SuppressWarnings("deprecation") public void sendWeChatMessage(String toUser, String toParty, String toTag, String content,String safe) { //从对象中提取凭证 AccessToken accessToken = getAccessToken(); String ACCESS_TOKEN = accessToken.getAccess_token(); String url = CREATE_SESSION_URL + ACCESS_TOKEN; //请求串 String url = CREATE_SESSION_URL + ACCESS_TOKEN; //封装发送消息请求JSON StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("{"); stringBuffer.append("\"touser\":" + "\"" + toUser + "\","); stringBuffer.append("\"toparty\":" + "\"" + toParty + "\","); stringBuffer.append("\"totag\":" + "\"" + toTag + "\","); stringBuffer.append("\"msgtype\":" + "\"" + MSGTYPE + "\","); stringBuffer.append("\"text\":" + "{"); stringBuffer.append("\"content\":" + "\"" + content + "\""); stringBuffer.append("}"); stringBuffer.append(",\"safe\":" + "\"" + safe + "\","); stringBuffer.append("\"agentid\":" + "\"" + "1000002" + "\","); stringBuffer.append("\"debug\":" + "\"" + "1" + "\""); stringBuffer.append("}"); String json = stringBuffer.toString(); System.out.println(json); try { URL postUrl = new URL(url); HttpURLConnection http = (HttpURLConnection) postUrl.openConnection(); http.setRequestMethod("POST"); http.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); http.setDoOutput(true); http.setDoInput(true); // 连接超时30秒 System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); // 读取超时30秒 System.setProperty("sun.net.client.defaultReadTimeout", "30000"); http.connect(); //写入内容 OutputStream outputStream = http.getOutputStream(); outputStream.write(json.getBytes("UTF-8")); InputStream inputStream = http.getInputStream(); int size = inputStream.available(); byte[] jsonBytes = new byte[size]; inputStream.read(jsonBytes); String result = new String(jsonBytes, "UTF-8"); System.out.println("请求返回结果:" + result); //清空输出流 outputStream.flush(); //关闭输出通道 outputStream.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } (7)进行测试 public static void main(String[] args) { SendWeChatMessage weChat = new SendWeChatMessage(); weChat.sendWeChatMessage("WangXingWen", "1", "", "天干物燥。","0"); } 5 应用界面

运行后,打开手机的“企业微信”APP,进入所在企业,可以看到消息成功发送至应用聊天窗

在这里插入图片描述 【逻辑补充】 1、需要将content(消息体)与外部应用的事件信息绑定; 2、需要在事件信息出现的一刻实时触发发送信息的行为,不能一次次手动去发送信息; 3、需要在外部应用的事件信息中补充链接,方便点击后直接切换到外部应用操作平台。

附上源码:点击此处转到资源页面



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3