JAVA实现接入企业微信报警

简介: JAVA实现接入企业微信报警

引言


原来系统中报警采用短信和邮件方式,短信采用阿里的短信,近期由于 一些原因,项目中想将报警信息发送到 企业微信中,由于之前小编玩zabbix的时候实现过这个需求,所以认为通过java应该比较简单, 下面分享接入代码,直接上干货。


一、创建应用


1)、登录企业微信后台管理页面,选择应用管理


2020030517341713.png


2)、在最下面 创建应用


20200305173536945.png

这里面可以控制那些人收到报警信息,其中质量的Secret 就是我们后面代码中的秘钥;


3)获得企业id


在 管理后台-》我的企业 一栏的最下面可以找到企业ID


20200305174946867.png


二、代码实现


添看到依赖


<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.6</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.5</version>
</dependency>

代码实现


1、实体类

package com.jack.common.utils;
/**
 * @Description:
 * @author: zhenghao
 * @date: 2020/3/5 17:24
*/
public class IacsUrlDataVo {
    String corpid;
    String corpsecret;
    String Get_Token_Url;
    String SendMessage_Url;
    public String getCorpid() {
        return corpid;
    }
    public void setCorpid(String corpid) {
        this.corpid = corpid;
    }
    public String getCorpsecret() {
        return corpsecret;
    }
    public void setCorpsecret(String corpsecret) {
        this.corpsecret = corpsecret;
    }
    public void setGet_Token_Url(String corpid,String corpsecret) {
        this.Get_Token_Url ="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+corpid+"&corpsecret="+corpsecret;
    }
    public String getGet_Token_Url() {
        return Get_Token_Url;
    }
    public String getSendMessage_Url(){
        SendMessage_Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=";
        return SendMessage_Url;
    }
}
package com.jack.common.utils;
/**
 * @Description:
 * @author: zhenghao
 * @date: 2020/3/5 17:24
*/
public class IacsWeChatDataVo {
    String touser;
    String msgtype;
    int agentid;
    Object text;//实际接收Map类型数据
    public Object getText() {
        return text;
    }
    public void setText(Object text) {
        this.text = text;
    }
    public String getMsgtype() {
        return msgtype;
    }
    public void setMsgtype(String msgtype) {
        this.msgtype = msgtype;
    }
    public int getAgentid() {
        return agentid;
    }
    public void setAgentid(int agentid) {
        this.agentid = agentid;
    }
    public String getTouser() {
        return touser;
    }
    public void setTouser(String touser) {
        this.touser = touser;
    }
}

2、消息发送代码

package com.jack.common.utils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * @Description: 企业微信发送代码
 * @author: zhenghao
 * @date: 2020/3/5 17:25
*/
public class SendWeChatUtils {
    private CloseableHttpClient httpClient;
    private static HttpPost httpPost;//用于提交登陆数据
    private  static  HttpGet httpGet;//用于获得登录后的页面
    public static final String CONTENT_TYPE = "Content-Type";
    static  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static Gson gson = new Gson();
    /**
     * 微信授权请求,GET类型,获取授权响应,用于其他方法截取token
     *
     * @param Get_Token_Url
     * @return String 授权响应内容
     * @throws IOException
     */
    public String toAuth(String Get_Token_Url) throws IOException {
        httpClient = HttpClients.createDefault();
        httpGet = new HttpGet(Get_Token_Url);
        CloseableHttpResponse response = httpClient.execute(httpGet);
        String resp;
        try {
            HttpEntity entity = response.getEntity();
            resp = EntityUtils.toString(entity, "utf-8");
            EntityUtils.consume(entity);
        } finally {
            response.close();
        }
        LoggerFactory.getLogger(getClass()).info(" resp:{}", resp);
        return resp;
    }
    /**
     * 获取toAuth(String Get_Token_Url)返回结果中键值对中access_token键的值
     *
     * @param corpid 应用组织编号   corpsecret 应用秘钥
     */
    public static String getToken(String corpid, String corpsecret) throws IOException {
        SendWeChatUtils sw = new SendWeChatUtils();
        IacsUrlDataVo uData = new IacsUrlDataVo();
        uData.setGet_Token_Url(corpid, corpsecret);
        String resp = sw.toAuth(uData.getGet_Token_Url());
        Map<String, Object> map = gson.fromJson(resp,
                new TypeToken<Map<String, Object>>() {
                }.getType());
        return map.get("access_token").toString();
    }
    /**
     * @param touser         发送消息接收者    ,msgtype消息类型(文本/图片等),
     * @param application_id 应用编号。
     * @return String
     * @Title:创建微信发送请求post数据
     */
    public static String createpostdata(String touser, String msgtype,
                                 int application_id, String contentKey, String contentValue) {
        IacsWeChatDataVo wcd = new IacsWeChatDataVo();
        wcd.setTouser(touser);
        wcd.setAgentid(application_id);
        wcd.setMsgtype(msgtype);
        Map<Object, Object> content = new HashMap<Object, Object>();
        content.put(contentKey, contentValue + "\n--------\n" + df.format(new Date()));
        wcd.setText(content);
        return gson.toJson(wcd);
    }
    /**
     * @param charset 消息编码    ,contentType 消息体内容类型,
     * @param url     微信消息发送请求地址,data为post数据,token鉴权token
     * @return String
     * @Title 创建微信发送请求post实体
     */
    public static String post(String charset, String contentType, String url,
                       String data, String token) throws IOException {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        httpPost = new HttpPost(url + token);
        httpPost.setHeader(CONTENT_TYPE, contentType);
        httpPost.setEntity(new StringEntity(data, charset));
        CloseableHttpResponse response = httpclient.execute(httpPost);
        String resp;
        try {
            HttpEntity entity = response.getEntity();
            resp = EntityUtils.toString(entity, charset);
            EntityUtils.consume(entity);
        } finally {
            response.close();
        }
        LoggerFactory.getLogger(SendWeChatUtils.class).info(
                "call [{}], param:{}, resp:{}", url, data, resp);
        return resp;
    }
    public static void sendMsg(String strContent){
        try {
            String token = getToken("企业id", "秘钥");
            String postdata = createpostdata("@all", "text", 1000011, "content",strContent);
            String resp = post("utf-8", "text", (new IacsUrlDataVo()).getSendMessage_Url(), postdata, token);
//            System.out.println("获取到的token======>" + token);
//            System.out.println("请求数据======>" + postdata);
//            System.out.println("发送微信的响应数据======>" + resp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上面代码中我们需要填写我们自己的企业id和秘钥;


3、业务调用

2020030517265928.png

如需发送其他类型信息,附参考文档


腾讯企业微信官方文档:https://work.weixin.qq.com/api/doc#10167

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
目录
相关文章
|
3月前
|
Java API 数据库
基于Java的大中型企业人力资源管理信息系统设计与开发
基于Java的大中型企业人力资源管理信息系统设计与开发
33 0
基于Java的大中型企业人力资源管理信息系统设计与开发
|
3月前
|
人工智能 移动开发 小程序
Java医院智慧3D导诊系统源码 微信小程序源码
技术架构:springboot+redis+mybatis plus+mysql+RocketMQ
62 1
|
4月前
|
小程序 安全 Java
【Java】智慧校园云SaaS平台源码带微信小程序
【Java】智慧校园云SaaS平台源码带微信小程序
82 0
|
1月前
|
缓存 NoSQL Java
java中实现定时给微信群中发送每日简报
java中实现定时给微信群中发送每日简报
32 0
|
1月前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
|
17天前
|
Java
java发送微信公众号模板消息
java发送微信公众号模板消息
|
10天前
|
JavaScript Java 测试技术
基于Java的企业文档管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的企业文档管理系统的设计与实现(源码+lw+部署文档+讲解等)
22 0
|
18天前
|
人工智能 小程序 Java
Java智慧校园系统源码 微信小程序+电子班牌
通过设备管理对百纳智慧校园的智慧班牌以及百纳智慧屏(校牌)进行统一集中式管理,支持浏览所有设备的基本信息以及在离线状态,支持添加设备、设备一键开关机、一键重启、设置节假日开关机时间、设置日常开关机时间、远程班牌截屏、远程班牌升级等操作。
|
1月前
|
Java
java中实现定时给微信群中发送每日天气情况
java中实现定时给微信群中发送每日天气情况
19 0
|
1月前
|
安全 小程序 Java
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
19 0

热门文章

最新文章