package com.ruoyi.system.utils.util; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.core.utils.HttpUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.system.utils.wx.model.WeixinProperties; import com.ruoyi.system.utils.wx.template.Template; import com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult.WxOfficeTemplateAppLiveResultRequest; import com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult.WxOfficeTemplateAppLiveResultRequestData; import com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult.WxTemplateAppLiveResultRequest; import com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult.WxTemplateAppLiveResultRequestData; import com.ruoyi.system.utils.wx.tools.WxAppletTools; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.io.Serializable; /** * 消息模板发送 */ @Slf4j @Component public class TemplateMessageSendUtil implements Serializable { private final static String ACCESS_TOKEN_CACHE_KEY = "accessToken:"; @Autowired private RedisCache redisCache; @Autowired private RestTemplate wxRestTemplate; @Autowired private WeixinProperties weixinProperties; @Resource private RedisService redisService; /** * 直播开始小程序订阅通知 * @param openId 用户openId * @param liveTitle 标题 * @param startTime 开始时间 */ public String wxTemplateAppLiveResultRequest(String openId,String liveTitle,String startTime) { WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, weixinProperties, redisService); // 1,获取access_token String accessToken = redisCache.getCacheObject(ACCESS_TOKEN_CACHE_KEY); if (!StringUtils.hasLength(accessToken)) { accessToken = appletTools.getAccessToken(); } try { log.info("直播开始提醒通知:------------------------"); // 创建请求实体 WxTemplateAppLiveResultRequest wxTemplateAppLiveResultRequest = new WxTemplateAppLiveResultRequest(); wxTemplateAppLiveResultRequest.setTouser(openId); wxTemplateAppLiveResultRequest.setTemplate_id(weixinProperties.getAppLiveResultTemplateId()); // 标题 Template thing1 = new Template(); thing1.setValue(liveTitle); // 开始时间 Template time2 = new Template(); time2.setValue(startTime); // 发送模板消息参数实体封装 WxTemplateAppLiveResultRequestData wxTemplateAppLiveResultRequestData = new WxTemplateAppLiveResultRequestData(); wxTemplateAppLiveResultRequestData.setThing1(thing1); wxTemplateAppLiveResultRequestData.setTime2(time2); wxTemplateAppLiveResultRequest.setData(wxTemplateAppLiveResultRequestData); // 4,发送消息给用户 String url = Constants.TEMPLATE_URL.replace("ACCESS_TOKEN", accessToken); String result = HttpUtils.sendPost(url, JsonUtils.toJsonString(wxTemplateAppLiveResultRequest)); log.info("直播开始通知模板消息返回数据:{}", result); return result; } catch (Exception e) { log.error("直播开始通知失败;"); } return null; } /** * 微信公众号模板消息发送 * @param openId 用户openId * @param liveTitle 标题 * @param startTime 开始时间 */ public String wxOfficeTemplateAppLiveRequest(String openId,String liveTitle,String startTime) { WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, weixinProperties, redisService); // 1,获取access_token String accessToken = redisCache.getCacheObject(ACCESS_TOKEN_CACHE_KEY); if (!StringUtils.hasLength(accessToken)) { accessToken = appletTools.getAccessToken(); } try { log.info("模板消息发送提醒通知:------------------------"); // 创建请求实体 WxOfficeTemplateAppLiveResultRequest wxOfficeTemplateAppLiveResultRequest = new WxOfficeTemplateAppLiveResultRequest(); wxOfficeTemplateAppLiveResultRequest.setTouser(openId); wxOfficeTemplateAppLiveResultRequest.setTemplate_id(weixinProperties.getOfficeAppLiveResultTemplateId()); // 标题 Template thing1 = new Template(); thing1.setValue(liveTitle); // 开始时间 Template time18 = new Template(); time18.setValue(startTime); // 发送模板消息参数实体封装 WxOfficeTemplateAppLiveResultRequestData wxOfficeTemplateAppLiveResultRequestData = new WxOfficeTemplateAppLiveResultRequestData(); wxOfficeTemplateAppLiveResultRequestData.setThing1(thing1); wxOfficeTemplateAppLiveResultRequestData.setTime18(time18); wxOfficeTemplateAppLiveResultRequest.setData(wxOfficeTemplateAppLiveResultRequestData); // 4,发送消息给用户 String url = Constants.OFFICIAL_ACCOUNT_TEMPLATE_URL.replace("ACCESS_TOKEN", accessToken); String result = HttpUtils.sendPost(url, JsonUtils.toJsonString(wxOfficeTemplateAppLiveResultRequest)); log.info("模板消息发送通知模板消息返回数据:{}", result); return result; } catch (Exception e) { log.error("模板消息发送通知失败;"); } return null; } }