首先我们要知道企业微信推送消息的步骤,企业微信官方提供了多个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