因为项目的业务逻辑需要向指定用户发送企业微信消息,所以在这里记录一下
目录
- 引入相关依赖
- 创建配置工具类
- 创建发送消息类
- 测试类
- 最终效果
引入相关依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 企业微信配置依赖 -->
<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-cp</artifactId><version>4.0.8.B</version>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.6.0</version>
</dependency>
其中,redis用于缓存token
创建配置工具类
@Component
public class WechatConfigUtil {// 要发送消息的应用的两个字段private static Integer agentId;private static String secret;// 企业idprivate static String corpId;// 用于访问redis的密码,没设置就不需要这个字段private static String redisPwd;@Value("${wx-cp-config.secret}")public void setSecret(String secret) {WechatConfigUtil.secret = secret;}@Value("${wx-cp-config.corpid}")public void setCorpId(String corpId) {WechatConfigUtil.corpId = corpId;}@Value("${wx-cp-config.redis-pwd}")public void setRedisPwd(String redisPwd) {WechatConfigUtil.redisPwd = redisPwd;}@Value("${wx-cp-config.agentid}")public void setAgentId(Integer agentId) {WechatConfigUtil.agentId = agentId;}/*** 配置企业微信服务* @return*/public static WxCpService getWxCpService() {WxCpService wxCpService = new WxCpServiceImpl();WxCpDefaultConfigImpl config =new WxCpDefaultConfigImpl();config.setAgentId(agentId);config.setCorpSecret(secret);config.setCorpId(corpId);resetTokenAndJsApi(wxCpService, config);return wxCpService;}/*** 重置token* @param wxCpService* @param wxCpDefaultConfig*/public static void resetTokenAndJsApi(WxCpService wxCpService, WxCpDefaultConfigImpl wxCpDefaultConfig) {Jedis jedis = new JedisPool().getResource();jedis.auth(redisPwd);wxCpService.setWxCpConfigStorage(wxCpDefaultConfig);String wxAccessToken = "wx"+agentId;String json = jedis.get(wxAccessToken); // 根据应用id获取对应tokenif(!StringUtils.isEmpty(json)){wxCpDefaultConfig = JSON.parseObject(json, WxCpDefaultConfigImpl.class);}if(wxCpDefaultConfig.isAccessTokenExpired()){ // token到期try {String accessToken = null;accessToken =wxCpService.getAccessToken(false);wxCpDefaultConfig.setAccessToken(accessToken);}catch (WxErrorException e){e.printStackTrace();}}jedis.set(wxAccessToken, JSON.toJSONString(wxCpDefaultConfig)); // 缓存tokenjedis.close();}
}
这里把几个关键字段都做了application.yml文件配置注入值
@Value给静态变量赋值
# 企业微信配置(msg-url: 消息卡片点击后跳转网页,可配置OA登录网站)
wx-cp-config:corpid: xxxagentid: 123456secret: xxxredis-pwd: 123456
corpid
需要你先以管理员身份创建一个企业,agentid
和secret
需要你创建一个应用获取
创建发送消息类
public class SendWxCpMsg {private static final Logger logger = LoggerFactory.getLogger(SendWxCpMsg.class);public static void sendToWxCp(String username) {//微信消息对象WxCpMessageServiceImpl wxCpMessageService = new WxCpMessageServiceImpl(WechatConfigUtil.getWxCpService());WxCpMessage wxCpMessage = new WxCpMessage();wxCpMessage.setSafe("0");wxCpMessage.setMsgType("textcard"); // 设置消息形式,这里设置为卡片消息SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");String time=sdf.format(new Date());//设置发送用户wxCpMessage.setToUser(username);//发送的标题wxCpMessage.setTitle("温馨提示");//发送内容wxCpMessage.setDescription("您的密码被检测为弱密码,请尽快修改!"+"\n"+"当前时间为:"+time+"\n"+"点击下方修改密码");//设置跳转urlwxCpMessage.setUrl("https://developer.work.weixin.qq.com/tutorial/detail/53");wxCpMessage.setBtnTxt("前往修改");try {wxCpMessageService.send(wxCpMessage); // 发送消息} catch (WxErrorException e) {logger.error("发送信息接口调用出错", e);}}
}
username
字段就是企业微信通讯录中企业成员的userid
测试类
@SpringBootTest
public class WxMsgTest {@Testvoid test() {SendWxCpMsg.sendToWxCp("chenyx");}
}
最终效果
参考文档:
官方应用消息接口文档
WxCpService文档