zengfanpei 2019-12-17
@Slf4j @Component public class WxMessageTask { @Autowired private CorpWechatConfig corpWechatConfig; @Autowired private RedisService redisService; @Autowired private RestTemplate restTemplate; /** * @Description: 企业微信消息推送 每天9点推送一次 * @Param: [] * @return: void * @Date: 2019-12-17 */ // @Scheduled(cron = "0 0 9 1/1 * ? *") public void pushMessage(){ log.info("消息发送开始 时间:[{}]", LocalDateTime.now()); //1.获取access_token 这里是讲access_token 放到缓存中了,也可以自己通过企业id 和 企业secret去获取 String accessToken = (String) redisService.get(WxMsgConstant.TOKEN); if (StringUtils.isBlank(accessToken)){ //添加重试 throw new BusinessException("access_token无法获取"); } //2.构造请求 String url = String.format(corpWechatConfig.getSendMessageUrl(), accessToken); HttpHeaders headers=new HttpHeaders(); MultiValueMap<String, Object> map= new LinkedMultiValueMap<>(); //发送用户 map.add(WxMsgConstant.TO_USER,"@all"); //消息类型 map.add(WxMsgConstant.MSG_TYPE,"text"); // 企业应用id 整形 map.add(WxMsgConstant.AGENT_ID, corpWechatConfig.getAgentId()); //消息内容 map.add(WxMsgConstant.CONTENT, "企业日报已生成,请及时查看"); HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, headers); //3.发送 ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class); String body = responseEntity.getBody(); Map resultMap = JSON.parseObject(body, Map.class); if ((Integer)resultMap.get("errcode")==0) { log.error("消息发送失败"); } log.info("消息发送成功 时间:[{}]", LocalDateTime.now()); } }
相关参数配置
@Data @Component @ConfigurationProperties(prefix = "corpwechat") public class CorpWechatConfig { /** 企业Id */ private String corpid; /** 企业号密钥 */ private String corpsecret; /** 企业应用的id */ private Integer agentId; /** 消息推送url */ private String sendMessageUrl; }
微信消息推送相关常量
public class WxMsgConstant { /** 接收消息的成员 */ public static final String TO_USER="toUser"; /** 消息类型 */ public static final String MSG_TYPE="msgtype"; /** 企业应用的id */ public static final String AGENT_ID="agentid"; /** 消息内容 */ public static final String CONTENT="content"; /** 微信access_token */ public static final String TOKEN="WX_ACCESS_TOKEN"; }