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·一个 一图一句 和风天气 多地区天气预报 农历 ...
最新文章
- Android模拟器无法上网问题
- 《Adobe Flash CS6中文版经典教程》——导读
- CNZZ数据专家使用方法?
- python均值滤波_opencv+python实现均值滤波
- Java技术:实现pdf和Excel的生成及数据动态插入、导出
- android查看wifi是否双频,Android判断wifi是5G还是2.4G
- 共享共建会让中国的5G加速吗?
- 阶乘c 语言代码,求10000的阶乘(c语言代码实现)
- fiddler监控手机请求
- html内容写入txt文件内容,写入内容到文件里面 - FileWriter《 HTML5:文件系统 》
- 人脸识别门禁系统java实现_java实现人脸识别源码【含测试效果图】——前台页面层(login.jsp)...
- 图文详解!java高级工程师简历模板
- Linux将鼠标解放,DwellClick:让鼠标下岗 解放你的手指
- 五子棋c语言程序人人对战,C语言 AI智能,五子棋 人机对战,人人对战
- Flutter 鼠标右键
- buuctf|ciscn_2019_en_2 1
- 在Centos7上安装vpnc客户端
- 浏览器下载blob文件流(兼容IE浏览器和其他主流浏览器)
- 金融IT系统高可用运维经验总结—人员、技术、流程
- 钱多多软件制作第四天
热门文章
- Field II 超声相控阵成像系列2——聚焦成像
- HTML转Canvas工具 前端生成图片工具 屏幕快照 html2canvas 下载 或上传至服务器 使用方法
- 华为,今年第一位天才少年诞生
- 集美大学诚毅学院传一科技杯《消灭星星》
- 反事实(counterfactual)简述
- Java 爬虫 菜逼教程 00
- Keynote幻灯片制作三
- pandas .set_index(“TIMESTAMP“, inplace=True) 用法
- 《缠中说禅108课》102:再说走势必完美
- chrome设置微信ua_Chrome谷歌浏览器在电脑上模拟微信内置浏览器的方法