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

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. Android模拟器无法上网问题
  2. 《Adobe Flash CS6中文版经典教程》——导读
  3. CNZZ数据专家使用方法?
  4. python均值滤波_opencv+python实现均值滤波
  5. Java技术:实现pdf和Excel的生成及数据动态插入、导出
  6. android查看wifi是否双频,Android判断wifi是5G还是2.4G
  7. 共享共建会让中国的5G加速吗?
  8. 阶乘c 语言代码,求10000的阶乘(c语言代码实现)
  9. fiddler监控手机请求
  10. html内容写入txt文件内容,写入内容到文件里面 - FileWriter《 HTML5:文件系统 》
  11. 人脸识别门禁系统java实现_java实现人脸识别源码【含测试效果图】——前台页面层(login.jsp)...
  12. 图文详解!java高级工程师简历模板
  13. Linux将鼠标解放,DwellClick:让鼠标下岗 解放你的手指
  14. 五子棋c语言程序人人对战,C语言 AI智能,五子棋 人机对战,人人对战
  15. Flutter 鼠标右键
  16. buuctf|ciscn_2019_en_2 1
  17. 在Centos7上安装vpnc客户端
  18. 浏览器下载blob文件流(兼容IE浏览器和其他主流浏览器)
  19. 金融IT系统高可用运维经验总结—人员、技术、流程
  20. 钱多多软件制作第四天

热门文章

  1. Field II 超声相控阵成像系列2——聚焦成像
  2. HTML转Canvas工具 前端生成图片工具 屏幕快照 html2canvas 下载 或上传至服务器 使用方法
  3. 华为,今年第一位天才少年诞生
  4. 集美大学诚毅学院传一科技杯《消灭星星》
  5. 反事实(counterfactual)简述
  6. Java 爬虫 菜逼教程 00
  7. Keynote幻灯片制作三
  8. pandas .set_index(“TIMESTAMP“, inplace=True) 用法
  9. 《缠中说禅108课》102:再说走势必完美
  10. chrome设置微信ua_Chrome谷歌浏览器在电脑上模拟微信内置浏览器的方法