JAVA对接企业微信,实现文本消息推送
对接企业微信,实现文本消息推送,可分为以下两部:
1.根据企业ID+应用的凭证密钥,获取Token
2.根据Token+要传输的body,实现文本消息推送
1.根据企业ID+应用的凭证密钥,获取Token
1.1登录 企业微信 官网
1.1.1在”我的企业“下找到”企业ID“
1.1.2在”应用管理“下找到”创建应用“,并根据提示创建应用(也可以不创建,用以前有的应用作为发送消息的主体也可以)
1.2获取Token主体
//企业ID(替换成自己的)public static final String CORPID ="xxxxxxxxxxxxxxxxxx";//应用的凭证密钥(替换成自己的)public static final String CORPSECRET ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";//应用ID(替换成自己的)public static final int AGENTID =111111111;//获取Token UrlString getTokenUrl="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+CORPID+"&corpsecret="+CORPSECRET;//发送应用消息UrlString sendMessageUrl="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=";//获取Tokenpublic String getToken(){// 创建get请求String weChatTokenStr= HttpUtil.httpGet(getTokenUrl);//将获取到的Json串解析成WeChatToken对象WeChatToken weChatToken=JSON.parseObject(weChatTokenStr, WeChatToken.class);System.out.println(weChatToken.getAccess_token());return weChatToken.getAccess_token();}
httpGet方法如下
/*** 待用外部GET请求* @param path 第三方提供的路径*/public static String httpGet(String path) {String returnStr="";try {URL url = new URL(path);//打开和url之间的连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();/**设置URLConnection的参数和普通的请求属性**/conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestMethod("GET");//GET必须全大写conn.connect();//获取URLConnection对象对应的输入流InputStream is = conn.getInputStream();//构造一个字符流缓存BufferedReader br = new BufferedReader(new InputStreamReader(is));String str = "";while ((str = br.readLine()) != null) {str=new String(str.getBytes(),"UTF-8");//解决中文乱码问题System.out.println(str);returnStr=str;}//关闭流is.close();//断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。//固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。conn.disconnect();return returnStr;} catch (Exception e) {e.printStackTrace();}return returnStr;}
WeChatToken如下()
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
//本实体类引用lombok,如你的idea没有配置lombok,出现报错的情况,可将以上注解删掉,并在实体类中生成get/set方法
public class WeChatToken extends BaseEntity {private static final long serialVersionUID = -4839791268180136759L;private int errcode;//出错返回码,为0表示成功,非0表示调用失败private String errmsg;//返回码提示语private String access_token;//获取到的凭证,最长为512字节private int expires_in;//凭证的有效时间(秒)
}
2.根据Token+要传输的body,实现文本消息推送
2.1消息推送主体
public Map<String,Object> sendMessage() {Map<String,Object> returnMap=new HashMap<>();//获取TokenString token=getToken();//发送人(仅作测试使用,可给sendMessage()方法传递参数,实现动态给需要发送的人推送消息)String userIds="LuFaMings|mr.meng|MaiNvHaiDeXiaoHuoChai";//发送内容String content="Hello\n消息到了!";//拼接发送消息请求头Map<String,Object> paramMap=new HashMap<>();Map<String,String> textMap=new HashMap<>();paramMap.put("touser",userIds);//指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为"@all",则向该企业应用的全部成员发送.touser、toparty、totag不能同时为空paramMap.put("toparty","");//指定接收消息的部门,部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为"@all"时忽略本参数paramMap.put("totag","");//指定接收消息的标签,标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为"@all"时忽略本参数paramMap.put("msgtype","text");//消息类型,此时固定为:textparamMap.put("agentid",AGENTID);//企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值textMap.put("content",content);paramMap.put("text",textMap);//消息内容,最长不超过2048个字节,超过将截断(支持id转译)paramMap.put("safe",0);//表示是否是保密消息,0表示可对外分享,1表示不能分享且内容显示水印,默认为0paramMap.put("enable_id_trans",0);// 表示是否开启id转译,0表示否,1表示是,默认0。仅第三方应用需要用到,企业自建应用可以忽略。paramMap.put("enable_duplicate_check",0);//表示是否开启重复消息检查,0表示否,1表示是,默认0paramMap.put("duplicate_check_interval",1800);//表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时String result=HttpUtil.httpPostTem(sendMessageUrl+token,paramMap);WeChatMeassage weChatMeassage=JSON.parseObject(result, WeChatMeassage.class);if ("ok".equals(weChatMeassage.getErrmsg())){returnMap.put("isOK",1);if (!StringUtils.isEmpty(weChatMeassage.getInvaliduser())){returnMap.put("message","以下UserId发送失败:"+weChatMeassage.getInvaliduser());}else{returnMap.put("message","消息全部推送成功!");}}else {returnMap.put("isOK",0);returnMap.put("message","消息推送失败!");}return returnMap;}
httpPostTem方法如下
/*** post 请求* @param url 请求地址* @param paramsMap post 参数* @return*/public static String httpPostTem(String url,Map<String, Object>paramsMap) {String result = "";CloseableHttpClient httpclient = HttpClients.createDefault();HttpPost httpPost = new HttpPost(url);httpPost.addHeader("Content-Type", "application/json;charset=utf-8");// 设置请求的参数if(paramsMap!=null && !paramsMap.isEmpty()) {JSONObject jsonObject = new JSONObject(paramsMap);StringEntity params = new StringEntity(jsonObject.toString(),Consts.UTF_8);httpPost.setEntity(params);}try {CloseableHttpResponse response = httpclient.execute(httpPost);try {HttpEntity entity = response.getEntity();if (entity != null) {result = EntityUtils.toString(entity, "UTF-8");}} finally {response.close();}} catch (Exception e) {e.printStackTrace();} finally {try {httpclient.close();} catch (IOException e) {e.printStackTrace();}}return result;}
WeChatMeassage如下()
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class WeChatMeassage extends BaseEntity {private static final long serialVersionUID = 2916669977421731141L;private int errcode;//返回码private String errmsg;//对返回码的文本描述内容private String invaliduser;//不合法的userid,不区分大小写,统一转为小写private String invalidparty;//不合法的partyidprivate String invalidtag;//不合法的标签idprivate String msgid;//消息id,用于撤回应用消息private String response_code;//仅消息类型为“按钮交互型”,“投票选择型”和“多项选择型”的模板卡片消息返回,应用可使用response_code调用更新模版卡片消息接口,24小时内有效,且只能使用一次
}
3.发送成功,接收到的消息如下所示
4.写在最后的话
4.1获取Token官方文档:获取access_token - 接口文档 - 企业微信开发者中心
发送应用消息官方文档:发送应用消息 - 接口文档 - 企业微信开发者中心
4.2 如果调用推送消息接口一直报错,又不知道是哪个参数出了问题,可以在URl后加上 '&debug=1',然后将返回的‘hint’值复制到 错误码查询工具 | 企业微信 对比官方文档查看传参是否正确
https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN&debug=1
4.3官方文档的原话
由于博主请求频率特别低,所以在每次请求推送消息接口的时候都请求了一下获取Token。如果你调用接口频繁,自己研究用Redis来缓存Token吧
4.4本文章推送的是文本消息,其他的图片消息、文本卡片消息等等大差不差,自行研究!
JAVA对接企业微信,实现文本消息推送相关推荐
- php 企业号文本消息推送,Python如何实现微信企业号文本消息推送功能的示例
这篇文章主要介绍了Python编程实现微信企业号文本消息推送功能,结合实例形式分析了Python微信企业号文本消息推送接口的调用相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python微信企业号 ...
- Beego搭建企业微信机器人定时消息推送
Beego搭建企业微信Robot定时消息推送 功能说明 PostMan添加job msgType 默认是:text并且支持@all markdown支持颜色和样式但是不支持@all cron quar ...
- Java企业微信开发-企业微信所有类型消息推送封装
企业微信开发第一步获取AccessToken,企业微信的AccessToken和公众号的不一样,企业微信所有接口调用只需要一个AccessToken,而公众号授权和jssdk是分开的 一.获取企业微信 ...
- java对接企业微信机器人发送消息
[Java]企业微信机器人自动发送群消息 先在群里添加机器人,然后获取机器人的webhook地址: 假设webhook是:https://qyapi.weixin.qq.com/cgi-bin/web ...
- 企业微信机器人脚本python_python提取数据库数据并实现企业微信机器人定时消息推送...
之前发过一个企业微信群机器人接口调用发提醒的文章,是用最简单的VBS脚本+Windows任务计划来实现的,仅实现了定时发送固定内容的提醒.其实企业微信机器人就是一个webhook接口,用户以post ...
- 基于企业微信api 开发 消息推送提醒 Python与Java
1.关于脚本 身为一个程序猿,不管你从事什么开发,学会使用一门脚本语言可以提高你的开发效率.我目前使用的是Python,因为它支持的库非常多,拿来即用.在这个快节奏的开发,是非常有效率的,所以我非常强 ...
- 运用python实现企业微信群机器人消息推送
使用场景:将BI报表精准推送入(群),精准触达用户 目的:提高管理层对数据的感知度 工具:python+企业微信 步骤: 1.创建企业微信群机器人,提取Webhook地址(群机器人地址) 2.编写代码 ...
- 《用微信测试公众号慰问你的好兄弟/姐妹》:用java简单实现微信公众号消息推送(入门且详细且有效)
文章目录 一.前言 二.注册微信测试号并配置信息 1.获取appID和appsecret: 2.获取关注微信号ID: 3.生成并获取模板ID: 三.代码解读 1.新建一个springboot项目 2. ...
- DailyInfo——利用Python实现基于企业微信的每日图文推送
DailyInfo 基于企业微信的每日图文推送 项目地址 Gitee地址 Github地址 支持功能 Bing必应 每日壁纸 金山词霸 每日一句 ONE·一个 一图一句 和风天气 多地区天气预报 农历 ...
最新文章
- AI大佬“互怼”:Bengio和Gary Marcus隔空对谈深度学习发展现状
- Boosting和Bagging: 如何开发一个鲁棒的机器学习算法
- 程序员杂记:我们的爱情故事
- mysql子查询日期比较_数据分析系列 16/32 | MySQL中子查询与联合查询
- Java调用 shell脚本阻塞
- intel fpga 开发工具Quartus Prime 软件的安装,使用详细教程
- Python基础之补充1
- Angular / RxJs我应该何时退订`Subscription`
- 使用Spring MVC实现数据绑定
- 程序设计_猫老鼠主人
- 【复变函数与积分变换】【第一章 复数与复变函数】
- java常见异常和代码演示
- Invisible Backdoor Attack with Sample-Specific Triggers
- GitHub 新建的仓库如何导入老项目?
- 现场总线CANopen设计与应用
- 已知两点, 求直线斜率
- Android进阶之路 - 仿京东地址选择器使用指南
- Elang安装与环境配置
- useCapture
- Linux系统挂起之后退出的方法