对接企业微信,实现文本消息推送,可分为以下两部:

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对接企业微信,实现文本消息推送相关推荐

  1. php 企业号文本消息推送,Python如何实现微信企业号文本消息推送功能的示例

    这篇文章主要介绍了Python编程实现微信企业号文本消息推送功能,结合实例形式分析了Python微信企业号文本消息推送接口的调用相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python微信企业号 ...

  2. Beego搭建企业微信机器人定时消息推送

    Beego搭建企业微信Robot定时消息推送 功能说明 PostMan添加job msgType 默认是:text并且支持@all markdown支持颜色和样式但是不支持@all cron quar ...

  3. Java企业微信开发-企业微信所有类型消息推送封装

    企业微信开发第一步获取AccessToken,企业微信的AccessToken和公众号的不一样,企业微信所有接口调用只需要一个AccessToken,而公众号授权和jssdk是分开的 一.获取企业微信 ...

  4. java对接企业微信机器人发送消息

    [Java]企业微信机器人自动发送群消息 先在群里添加机器人,然后获取机器人的webhook地址: 假设webhook是:https://qyapi.weixin.qq.com/cgi-bin/web ...

  5. 企业微信机器人脚本python_python提取数据库数据并实现企业微信机器人定时消息推送...

    之前发过一个企业微信群机器人接口调用发提醒的文章,是用最简单的VBS脚本+Windows任务计划来实现的,仅实现了定时发送固定内容的提醒.其实企业微信机器人就是一个webhook接口,用户以post ...

  6. 基于企业微信api 开发 消息推送提醒 Python与Java

    1.关于脚本 身为一个程序猿,不管你从事什么开发,学会使用一门脚本语言可以提高你的开发效率.我目前使用的是Python,因为它支持的库非常多,拿来即用.在这个快节奏的开发,是非常有效率的,所以我非常强 ...

  7. 运用python实现企业微信群机器人消息推送

    使用场景:将BI报表精准推送入(群),精准触达用户 目的:提高管理层对数据的感知度 工具:python+企业微信 步骤: 1.创建企业微信群机器人,提取Webhook地址(群机器人地址) 2.编写代码 ...

  8. 《用微信测试公众号慰问你的好兄弟/姐妹》:用java简单实现微信公众号消息推送(入门且详细且有效)

    文章目录 一.前言 二.注册微信测试号并配置信息 1.获取appID和appsecret: 2.获取关注微信号ID: 3.生成并获取模板ID: 三.代码解读 1.新建一个springboot项目 2. ...

  9. DailyInfo——利用Python实现基于企业微信的每日图文推送

    DailyInfo 基于企业微信的每日图文推送 项目地址 Gitee地址 Github地址 支持功能 Bing必应 每日壁纸 金山词霸 每日一句 ONE·一个 一图一句 和风天气 多地区天气预报 农历 ...

最新文章

  1. AI大佬“互怼”:Bengio和Gary Marcus隔空对谈深度学习发展现状
  2. Boosting和Bagging: 如何开发一个鲁棒的机器学习算法
  3. 程序员杂记:我们的爱情故事
  4. mysql子查询日期比较_数据分析系列 16/32 | MySQL中子查询与联合查询
  5. Java调用 shell脚本阻塞
  6. intel fpga 开发工具Quartus Prime 软件的安装,使用详细教程
  7. Python基础之补充1
  8. Angular / RxJs我应该何时退订`Subscription`
  9. 使用Spring MVC实现数据绑定
  10. 程序设计_猫老鼠主人
  11. 【复变函数与积分变换】【第一章 复数与复变函数】
  12. java常见异常和代码演示
  13. Invisible Backdoor Attack with Sample-Specific Triggers
  14. GitHub 新建的仓库如何导入老项目?
  15. 现场总线CANopen设计与应用
  16. 已知两点, 求直线斜率
  17. Android进阶之路 - 仿京东地址选择器使用指南
  18. Elang安装与环境配置
  19. useCapture
  20. Linux系统挂起之后退出的方法

热门文章

  1. 中国医科大学20春《护理管理学》在线作业题目【标准答案】
  2. 计算机维护,电脑维护,计算机维护硬件,电脑硬件维护
  3. ViT Slimming——联合结构搜索与Patch Selection
  4. 企业数字化进程的关键一步
  5. 面趣 | 一个月面试4家,3家Offer,来看看面霸真君如何面试的
  6. 华为开发者大会2022即将召开 精彩主题演讲线上同步直播
  7. STA-11. 芯片中的偏差和风控机制
  8. random库:Python随机数的生成与应用
  9. 《关于费尔巴哈的提纲》读书笔记
  10. 深入理解侵入式容器与非侵入式容器(intrusive containers)