| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.fzzy.igds.utils; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.fzzy.igds.data.ConfigData; |
| | | import com.fzzy.igds.data.Template; |
| | | import com.fzzy.igds.data.TemplateParam; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.ResponseEntity; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | |
| | | @Slf4j |
| | | @Component |
| | | public class WxUtil { |
| | | |
| | | /** |
| | | * å
¬ä¼å·è°ç¨å
¨å±æ¥å£çæ è¯ACCESS_TOKENç¼åkey |
| | | */ |
| | | public static final String ACCESS_TOKEN = "ACCESS_TOKEN"; |
| | | |
| | | /** |
| | | * æ¨¡æ¿æ¶æ¯åéurl |
| | | */ |
| | | public static final String TEMPLATE_URL = |
| | | "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN"; |
| | | |
| | | /** |
| | | * è·åaccess_tokençæ¥å£å°å(GET , 2000次/天) |
| | | */ |
| | | public static final String ACCESS_TOKEN_URL = |
| | | "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; |
| | | |
| | | @Autowired |
| | | private RestTemplate restTemplate; |
| | | |
| | | @Autowired |
| | | private ConfigData configData; |
| | | |
| | | @Resource |
| | | private RedisCache redisCache; |
| | | |
| | | |
| | | |
| | | /** |
| | | * å鿍¡æ¿æ¶æ¯ |
| | | * @param openid ç¨æ·openid |
| | | * @param warnId è¦åid |
| | | * @param companyId ç»ç»id |
| | | * @param title è¦åæ é¢ |
| | | * @param keyword1 è¦å对象 |
| | | * @param keyword2 è¦åç±»å |
| | | * @param keyword3 è¦åæ¶é´ |
| | | * @param keyword4 è¦åå
容 |
| | | * @param remark è¦å详æ
|
| | | * @return |
| | | */ |
| | | public boolean sendMessage(String openid, String warnId, String companyId, String title, |
| | | String keyword1, String keyword2, String keyword3, |
| | | String keyword4,String remark, String userName){ |
| | | |
| | | Template tem = new Template(); |
| | | tem.setTemplate_id(configData.getWxTempId()); |
| | | tem.setTopcolor("#FF0000"); |
| | | |
| | | tem.setTouser(openid); |
| | | tem.setUrl(configData.getWxServeUrl() + "/wx/view-gateway?state=warn-detail1&id=" + warnId + "&companyId=" + companyId + "&userName=" + userName); |
| | | |
| | | Map<String, TemplateParam> params = new HashMap<>(); |
| | | params.put("first",new TemplateParam(title,"#173177")); |
| | | //è¦å对象 |
| | | params.put("keyword1",new TemplateParam( keyword1, "#173177")); |
| | | //è¦åç±»å |
| | | params.put("keyword2",new TemplateParam( keyword2, "#173177")); |
| | | //è¦åæ¶é´ |
| | | params.put("keyword3",new TemplateParam( keyword3, "#173177")); |
| | | //è¦åå
容 |
| | | params.put("keyword4",new TemplateParam( keyword4, "#173177")); |
| | | params.put("remark",new TemplateParam( remark, "#173177")); |
| | | |
| | | tem.setData(params); |
| | | log.debug("------微信éç¥å¼å§æ¨é------"); |
| | | //æ¨éæ¶æ¯ |
| | | return sendTemplateMsg(tem); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ¨éæ¨¡æ¿æ¶æ¯ |
| | | * |
| | | * @param template |
| | | * @return |
| | | */ |
| | | public boolean sendTemplateMsg(Template template) { |
| | | //è·åAccessToken |
| | | String accessToken = getAccessToken(); |
| | | if(StringUtils.isEmpty(accessToken)){ |
| | | log.debug("------è·åAccessToken失败------"); |
| | | return false; |
| | | } |
| | | |
| | | boolean flag = false; |
| | | String url = WxUtil.TEMPLATE_URL.replace("ACCESS_TOKEN",accessToken); |
| | | String str = JSONObject.toJSONString(template); |
| | | JSONObject jsonObject = doPost(url, str); |
| | | if (jsonObject != null) { |
| | | int errorCode = jsonObject.getIntValue("errcode"); |
| | | String errorMessage = jsonObject.getString("errmsg"); |
| | | if (errorCode == 0) { |
| | | log.debug("æ¨éå¾®ä¿¡æ¶æ¯æåï¼" + str); |
| | | flag = true; |
| | | } else { |
| | | log.info("æ¨¡æ¿æ¶æ¯åé失败{},{}", errorCode, errorMessage); |
| | | log.error("ACCESS_TOKEN:" + accessToken); |
| | | flag = false; |
| | | } |
| | | } |
| | | |
| | | log.debug("æ¨éå¾®ä¿¡æ¶æ¯å¤±è´¥ï¼" ); |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * è·åå
¨å±AccessToken |
| | | * |
| | | * @return |
| | | */ |
| | | public String getAccessToken() { |
| | | |
| | | //å
ä»ç¼åè·åï¼è¥ä¸åå¨åéè¿æ¥å£è·å |
| | | String accessToken = (String)redisCache.getCacheObject(WxUtil.ACCESS_TOKEN); |
| | | if(StringUtils.isNotEmpty(accessToken)){ |
| | | return accessToken; |
| | | } |
| | | |
| | | //请æ±è·åAccessTokenç微信æ¥å£ |
| | | String resp = doGet(WxUtil.ACCESS_TOKEN_URL.replace("APPID", |
| | | configData.getWxAppId()).replace("APPSECRET", configData.getWxSecret())); |
| | | JSONObject json = JSONObject.parseObject(resp); |
| | | if (json != null) { |
| | | //è·åaccessToken |
| | | accessToken = json.getString("access_token"); |
| | | //è·åaccessTokenæææ¶é¿ï¼ä¸º7200s |
| | | int expiresIn = json.getIntValue("expires_in"); |
| | | //å°accessTokenåå
¥ç¼åï¼æææ¶é¿ä¸ºexpiresInï¼å³2å°æ¶ |
| | | redisCache.setCacheObject(WxUtil.ACCESS_TOKEN, accessToken,expiresIn, TimeUnit.SECONDS); |
| | | return accessToken; |
| | | } |
| | | log.error("è·åaccess_token失败"); |
| | | return null; |
| | | } |
| | | /** |
| | | * postè¯·æ± |
| | | * @param url |
| | | * @param data |
| | | * @return |
| | | */ |
| | | public JSONObject doPost(String url, String data){ |
| | | ResponseEntity<JSONObject> jsonObject = restTemplate.postForEntity(url, data, JSONObject.class); |
| | | return jsonObject.getBody(); |
| | | } |
| | | |
| | | /** |
| | | * getè¯·æ± |
| | | * |
| | | * @param url |
| | | * @return |
| | | */ |
| | | public String doGet(String url) { |
| | | return restTemplate.getForObject(url, String.class); |
| | | } |
| | | } |