From 81c25fcbfda4c808748ba8d2bba0365e7f58bec6 Mon Sep 17 00:00:00 2001 From: zhangheng <3226558941@qq.com> Date: Tue, 4 Jun 2024 09:38:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E4=BC=97=E5=8F=B7=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MobileTestController.java | 12 +- .../utils/WeChatOfficialAccountUtils.java | 121 +++++++++++++++--- .../impl/subscribeTaskServiceImpl.java | 2 +- 3 files changed, 114 insertions(+), 21 deletions(-) diff --git a/postdischarge-mobile/src/main/java/com/xinelu/mobile/controller/MobileTestController.java b/postdischarge-mobile/src/main/java/com/xinelu/mobile/controller/MobileTestController.java index c3809788..8c4fd0e1 100644 --- a/postdischarge-mobile/src/main/java/com/xinelu/mobile/controller/MobileTestController.java +++ b/postdischarge-mobile/src/main/java/com/xinelu/mobile/controller/MobileTestController.java @@ -43,7 +43,15 @@ public class MobileTestController { * 测试微信公众号模板消息发送 */ @GetMapping("/sendOfficialAccountTemplate") - public void sendOfficialAccountTemplateMessage(PatientVO patientVO) { - weChatOfficialAccountUtils.sendOfficialAccountTemplateMessage(patientVO); + public void sendOfficialAccountTemplateMessage() { + weChatOfficialAccountUtils.sendOfficialAccountTemplateMessage(); + } + + /** + * 测试微信小程序模板消息发送 + */ + @GetMapping("/sendAppletTemplate") + public void sendAppletTemplate(PatientVO patientVO) { + weChatOfficialAccountUtils.sendAppletTemplateMessage(patientVO); } } diff --git a/postdischarge-mobile/src/main/java/com/xinelu/mobile/utils/WeChatOfficialAccountUtils.java b/postdischarge-mobile/src/main/java/com/xinelu/mobile/utils/WeChatOfficialAccountUtils.java index 934b3779..ba8ec775 100644 --- a/postdischarge-mobile/src/main/java/com/xinelu/mobile/utils/WeChatOfficialAccountUtils.java +++ b/postdischarge-mobile/src/main/java/com/xinelu/mobile/utils/WeChatOfficialAccountUtils.java @@ -51,18 +51,14 @@ public class WeChatOfficialAccountUtils { */ public String getWeChatOfficialAccountAccessToken() { String accessToken; - //小程序 - String accessTokenRedisKey = Constants.NURSE_STATION_APPLET_ACCESS_TOKEN + "accessToken"; //公众号 - //String accessTokenRedisKey = Constants.WE_CHAT_OFFICIAL_ACCOUNT_ACCESS_TOKEN + "accessToken"; + String accessTokenRedisKey = Constants.WE_CHAT_OFFICIAL_ACCOUNT_ACCESS_TOKEN + "accessToken"; //从Redis中取出accessToken Object object = redisTemplate.opsForValue().get(accessTokenRedisKey); if (Objects.isNull(object)) { //没有,获取accessToken - //小程序 - String accessTokenUrl = Constants.WE_CHAT_ACCESS_TOKEN_URL + "&appid=" + weChatAppletChatConfig.getAppletId() + "&secret=" + weChatAppletChatConfig.getSecret(); //公众号 - //String accessTokenUrl = Constants.WE_CHAT_ACCESS_TOKEN_URL + "&appid=" + weChatOfficialAccountConfig.getOfficialAccountAppId() + "&secret=" + weChatOfficialAccountConfig.getOfficialAccountAppSecret(); + String accessTokenUrl = Constants.WE_CHAT_ACCESS_TOKEN_URL + "&appid=" + weChatOfficialAccountConfig.getOfficialAccountAppId() + "&secret=" + weChatOfficialAccountConfig.getOfficialAccountAppSecret(); //发送请求 String result = HttpUtils.sendGet(accessTokenUrl); if (StringUtils.isBlank(result)) { @@ -87,29 +83,118 @@ public class WeChatOfficialAccountUtils { return accessToken; } + /** + * 获取院后小程序accessToken + * + * @return 微信小程序的accessToken + */ + public String getWeChatAppletAccessToken() { + String accessToken; + //小程序 + String accessTokenRedisKey = Constants.WE_CHAT_APPLET_ACCESS_TOKEN + "accessToken"; + //从Redis中取出accessToken + Object object = redisTemplate.opsForValue().get(accessTokenRedisKey); + if (Objects.isNull(object)) { + //没有,获取accessToken + //小程序 + String accessTokenUrl = Constants.WE_CHAT_ACCESS_TOKEN_URL + "&appid=" + weChatAppletChatConfig.getAppletId() + "&secret=" + weChatAppletChatConfig.getSecret(); + //发送请求 + String result = HttpUtils.sendGet(accessTokenUrl); + if (StringUtils.isBlank(result)) { + throw new ServiceException("获取微信小程序accessToken信息失败", 201); + } + AccessToken officialAccountAccessToken = JSON.parseObject(result, AccessToken.class); + if (Objects.isNull(officialAccountAccessToken)) { + throw new ServiceException("获取微信小程序accessToken信息失败"); + } + if (Objects.nonNull(officialAccountAccessToken.getErrcode()) && officialAccountAccessToken.getErrcode() != SUCCESS_CODE) { + throw new ServiceException("获取微信小程序accessToken信息失败,失败信息为:" + officialAccountAccessToken.getErrmsg(), 201); + } + if (StringUtils.isBlank(officialAccountAccessToken.getAccessToken())) { + throw new ServiceException("微信小程序accessToken信息为空"); + } + accessToken = officialAccountAccessToken.getAccessToken(); + //存入Redis中 + redisTemplate.opsForValue().set(accessTokenRedisKey, accessToken, 3600, TimeUnit.SECONDS); + } else { + accessToken = (String) object; + } + return accessToken; + } + /** * 微信公众号模板消息发送 */ - public void sendOfficialAccountTemplateMessage(PatientVO patientVO) { + public void sendOfficialAccountTemplateMessage() { //获取微信公众号的accessToken String accessToken = this.getWeChatOfficialAccountAccessToken(); //定义模板内容,公众模板内容 Map paramsMap = new LinkedHashMap<>(); + paramsMap.put("touser", "oSwvX5qknp3DrAXfBgFjoMvG6WCI"); + paramsMap.put("template_id", "WUCYtSbH-QFRV_fMcfmn86QLsz1zo881QW7fQNTWOjc"); + //微信小程序跳转内容 + Map miniprogramMap = new LinkedHashMap<>(); + miniprogramMap.put("appid", "wxdc32268eca6b78f9"); + miniprogramMap.put("pagepath", "pages/startup/startup"); + //微信小程序模板data内容 + Map dataMap = new LinkedHashMap<>(); + dataMap.put("phrase7", new MessageValueEntity("泉医陪护")); + dataMap.put("character_string3", new MessageValueEntity("000026315412331612100")); + dataMap.put("time6", new MessageValueEntity("2024-03-25 16:21:32")); + dataMap.put("time10", new MessageValueEntity("2024-03-27 10:00:00")); + dataMap.put("thing11", new MessageValueEntity("济南市槐荫区首诺城市之光东座22楼E10")); + paramsMap.put("miniprogram", miniprogramMap); + paramsMap.put("data", dataMap); + //拼接请求地址并发送 + String messageUrl = Constants.OFFICIAL_ACCOUNT_TEMPLATE_SEND_URL + accessToken; + String param = JSON.toJSONString(paramsMap); + String result = HttpUtils.sendPostJson(messageUrl, param); + //返回参数映射 + AccessToken errCode = JSON.parseObject(result, AccessToken.class); + if (Objects.nonNull(errCode) && Objects.nonNull(errCode.getErrcode())) { + switch (errCode.getErrcode()) { + case Constants.SUCCESS_ERROR_CODE: + log.info("发送消息成功!"); + break; + case Constants.INVALID_CREDENTIAL_ACCESS_TOKEN_ISINVALID_OR_NOT_LATEST: + log.error("取 access_token 时 AppSecret 错误,或者 access_token 无效!"); + break; + case Constants.INVALID_OPENID: + log.error("不合法的 OpenId!"); + break; + case Constants.INVALID_ACCESS_TOKEN: + log.error("合法的 access_token!"); + break; + case Constants.INVALID_TEMPLATE_ID: + log.error("不合法的 template_id!"); + break; + case Constants.ARGUMENT_INVALID: + log.error("参数无效!"); + break; + case Constants.API_UNAUTHORIZED: + log.error("API 功能未授权!"); + break; + case Constants.DENY_SUBSCRIPTION: + log.error("用户拒接订阅!"); + break; + default: + break; + } + } + } + + /** + * 微信小程序模板消息发送 + */ + public void sendAppletTemplateMessage(PatientVO patientVO) { + //获取微信小程序的accessToken + String accessToken = this.getWeChatAppletAccessToken(); + //定义模板内容 + Map paramsMap = new LinkedHashMap<>(); paramsMap.put("touser", patientVO.getOpenId()); paramsMap.put("template_id", "S_c9bR4znSWpXg-6ACIMn7AkaR11dzo113XM8w4CKz0"); paramsMap.put("page", "/postDischarge/homePage/subscriptionMessage?id =" + patientVO.getSignPatientManageRouteNodeId()); - //微信小程序跳转内容 - // Map miniprogramMap = new LinkedHashMap<>(); - //miniprogramMap.put("appid", "wxdc32268eca6b78f9"); - // miniprogramMap.put("pagepath", "/postDischarge/homePage/subscriptionMessage?id =" + patientVO.getSignPatientManageRouteNodeId()); - //微信小程序模板data内容 Map dataMap = new LinkedHashMap<>(); -// dataMap.put("phrase7", new MessageValueEntity("泉医陪护")); -// dataMap.put("character_string3", new MessageValueEntity("000026315412331612100")); -// dataMap.put("time6", new MessageValueEntity("2024-03-25 16:21:32")); -// dataMap.put("time10", new MessageValueEntity("2024-03-27 10:00:00")); -// dataMap.put("thing11", new MessageValueEntity("济南市槐荫区首诺城市之光东座22楼E10")); - //paramsMap.put("miniprogram", miniprogramMap); dataMap.put("thing1", new MessageValueEntity("每日签到")); dataMap.put("thing2", new MessageValueEntity(LocalDate.now().getYear() + "年" + LocalDate.now().getMonthValue() + "月" + LocalDate.now().getDayOfMonth() + "日签到成功")); dataMap.put("thing3", new MessageValueEntity(patientVO.getRouteNodeName() + "第" + patientVO.getRouteNodeDay())); diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java index d8d25949..3e9fe107 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java @@ -77,7 +77,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { } } for (PatientVO patientVO : patientVOS) { - weChatOfficialAccountUtils.sendOfficialAccountTemplateMessage(patientVO); + weChatOfficialAccountUtils.sendAppletTemplateMessage(patientVO); } } }