java 通过企业微信推送消息

本文介绍了如何使用Java调用企业微信API来推送消息。首先建立企业应用,然后获取access_token,接着通过发送POST请求来推送文本消息。文章提供了一系列的类如消息类、异常处理类、工具类等,用于实现消息推送功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们要知道企业微信推送消息的步骤,企业微信官方提供了多个API供我们调用,这里我们只讲我们需要的API;

企业微信的官方开放的API地址:https://work.weixin.qq.com/api/doc

推送企业微信消息分为这么几步:

1、建立一个企业应用,我们只能给应用里面的成员发送消息;

2、获取accss_token,这是通过企业微信的获取token的接口获取的

请求方式:GET(HTTPS
请求URL:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRECT

参数解释:

corpid:企业id,每个企业微信都有唯一的一个corpid;

corpsecret:应用的凭证密钥,这个是你要发送消息给应用下的成员的corpsecret

返回值:

expires_in是有效时间,单位是秒

{
   "errcode":0,
   "errmsg":"",
   "access_token": "accesstoken000001",
   "expires_in": 7200
}

3、获取到access_token以后,你就可以向应用的成员推送企业微信消息了(这里我们以最简单的发送text为例子,其它的发送图片等消息大同小异,大家可以自己查看官方文档);

推送消息的接口:

请求方式:POST(HTTPS
请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN

请求示例:

{
   "touser" : "UserID1|UserID2|UserID3",//企业微信的唯一userid,非必输
   "toparty" : "PartyID1|PartyID2",//部门id,非必输,如果输入了就只给指定部门发送消息
   "totag" : "TagID1 | TagID2",//标签,非必输,传输了就只给指定的标签发送消息
   "msgtype" : "text",//消息类型,必输,text等
   "agentid" : 1,//应用id,必输,每个应用都有一个唯一的应用id
   "text" : {
       "content" : "你的快递已到,请携带工卡前往邮件中心领取。\n出发前可查看<a href=\"http://work.weixin.qq.com\">邮件中心视频实况</a>,聪明避开排队。"
   },//发送的消息
   "safe":0//是否安全传输
}

参数说明:

参数 是否必须 说明
touser 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向该企业应用的全部成员发送
toparty 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
totag 标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
msgtype 消息类型,此时固定为:text
agentid 企业应用的id,整型。可在应用的设置页面查看
content 消息内容,最长不超过2048个字节
safe 表示是否是保密消息,0表示否,1表示是,默认0

返回示例:

 {
   "errcode" : 0,
   "errmsg" : "ok",
   "invaliduser" : "userid1|userid2", // 不区分大小写,返回的列表都统一转为小写
   "invalidparty" : "partyid1|partyid2",
   "invalidtag":"tagid1|tagid2"
 }

如果部分接收人无权限或不存在,发送仍然执行,但会返回无效的部分(即invaliduser或invalidparty或invalidtag),常见的原因是接收人不在应用的可见范围内

注:企业微信推送消息的步骤就这么几步,很简单,用户也可以根据自己的实际需求参考企业微信的api实现更多的功能,着咯就不再赘述,接下来我们看看代码的实现:

基础消息类:

package company.sendmessage;


import lombok.Data;

/**
 * 消息基类(企业号 -> 普通用户)
 * @author 
 *
 */

@Data
public class BaseMessage {
    // 否 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向该企业应用的全部成员发送
    private String touser;
    // 否 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
    private String toparty;
    // 否 标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
    private String totag;
    // 是 消息类型
    private String msgtype;
    // 是 企业应用的id,整型。可在应用的设置页面查看
    private Integer agentid;
}

推送消息类:

/**
 * 文本消息
 * @author
 *
 */

@Data
public class TextMessage extends BaseMessage {
    //文本
    private Text text;
    //否     表示是否是保密消息,0表示否,1表示是,默认0
    private int safe;


}

具体要发送的消息:

/**
 * 文本
 * @author 
 *
 */

@Data
public class Text {
    //是    消息内容,最长不超过2048个字节
    private String content;

}

接收accesstoken类:

/**
 * @desc  : 微信通用接口凭证 
 * 
 * @author: 
 * @date  : 2018-8-17 下午9:35:11
 */
public class AccessToken {  
    // 获取到的凭证  
    private String token;  
    // 凭证有效时间,单位:秒  
    private int expiresIn;  
  
    public String getToken() {  
        return token;  
    }  
  
    public void setToken(String token) {  
        this.token = token;  
    }  
  
    public int getExpiresIn() {  
        return expiresIn;  
    }  
  
    public void setExpiresIn(int expiresIn) {  
        this.expiresIn = expiresIn;  
    }  
}  

异常处理类:

import lombok.Data;

@Data
public class BizException extends RuntimeException {

    private int code;

    private String msg;

    private EnumsUtils enumsUtils;

    public BizException(EnumsUtils enumsUtils) {
        this.enumsUti
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值