diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java b/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java index eb5228c..5e7d636 100644 --- a/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java @@ -11,6 +11,7 @@ import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Async; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.util.Pool; @@ -76,7 +77,28 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { @Override public String getComponentVerifyTicket() { try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.get(this.componentVerifyTicketKey); + logger.info("getComponentVerifyTicket " + this.componentVerifyTicketKey); + String ticket = jedis.get(this.componentVerifyTicketKey); + if(StringUtils.isBlank(ticket)) { + String appId; + String [] keys = componentAccessTokenKey.split(":"); + if(StringUtils.isBlank(keyPrefix)) { + appId = keys[1]; + } else { + appId = keys[2]; + } + WxComponentVerifyTicket wxComponentVerifyTicket = new WxComponentVerifyTicket(); + wxComponentVerifyTicket.setComponentAppid(getComponentAppId()); + try { + wxComponentVerifyTicket = wxComponentVerifyTicketMapper.selectOne(wxComponentVerifyTicket); + if(wxComponentVerifyTicket != null) { + ticket = wxComponentVerifyTicket.getComponentVerifyTicket(); + } + }catch (Exception e) { + logger.error(e.getMessage()); + } + } + return ticket; } } @@ -84,6 +106,7 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { public void setComponentVerifyTicket(String componentVerifyTicket) { try (Jedis jedis = this.jedisPool.getResource()) { jedis.set(this.componentVerifyTicketKey, componentVerifyTicket); + logger.info("setComponentVerifyTicket " + componentVerifyTicket); } } @@ -112,16 +135,22 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { public void updateComponentAccessTokent(String componentAccessToken, int expiresInSeconds) { try (Jedis jedis = this.jedisPool.getResource()) { jedis.setex(this.componentAccessTokenKey, expiresInSeconds - 200, componentAccessToken); + logger.info("updateComponentVerifyTicketAccessToken " + componentAccessToken); - WxComponentVerifyTicket ticket = new WxComponentVerifyTicket(); - ticket.setComponentAppid(getComponentAppId()); - ticket.setAccessToken(componentAccessToken); - ticket.setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + (expiresInSeconds * 1000)))); - int num = wxComponentVerifyTicketMapper.updateAccessToken(ticket); - logger.info("updateComponentVerifyTicketAccessToken rows: " + num); + saveComponentVerifyTicket(componentAccessToken, expiresInSeconds); } } + @Async + public void saveComponentVerifyTicket(String componentAccessToken, int expiresInSeconds) { + WxComponentVerifyTicket ticket = new WxComponentVerifyTicket(); + ticket.setComponentAppid(getComponentAppId()); + ticket.setAccessToken(componentAccessToken); + ticket.setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + (expiresInSeconds * 1000)))); + int num = wxComponentVerifyTicketMapper.updateAccessToken(ticket); + logger.info("updateComponentVerifyTicketAccessToken rows: " + num); + } + private String getKey(String prefix, String appId) { return prefix.endsWith(":") ? prefix.concat(appId) : prefix.concat(":").concat(appId); } @@ -137,15 +166,20 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) { try (Jedis jedis = this.jedisPool.getResource()) { jedis.set(this.getKey(this.authorizerRefreshTokenKey, appId), authorizerRefreshToken); + logger.info("setAuthorizerRefreshToken " + appId); - WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo(); - authorizerInfo.setAuthorizerAppid(appId); - authorizerInfo.setRefreshToken(authorizerRefreshToken); - int num = wxAuthorizerInfoMapper.updateRefreshToken(authorizerInfo); - logger.info("setAuthorizerRefreshToken " + appId + " rows: " + num); + saveAuthorizerRefreshToken(appId, authorizerRefreshToken); } } + @Async + public void saveAuthorizerRefreshToken(String appId, String authorizerRefreshToken) { + WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo(); + authorizerInfo.setAuthorizerAppid(appId); + authorizerInfo.setRefreshToken(authorizerRefreshToken); + int num = wxAuthorizerInfoMapper.updateRefreshToken(authorizerInfo); + } + @Override public String getAuthorizerAccessToken(String appId) { try (Jedis jedis = this.jedisPool.getResource()) { @@ -171,6 +205,13 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { public void updateAuthorizerAccessToken(String appId, WxOpenAuthorizerAccessToken authorizerAccessToken) { this.updateAuthorizerAccessToken(appId, authorizerAccessToken.getAuthorizerAccessToken(), authorizerAccessToken.getExpiresIn()); + logger.info("updateAuthorizerAccessToken " + appId); + + dbUpdateAccessToken(appId, authorizerAccessToken); + } + + @Async + public void dbUpdateAccessToken(String appId, WxOpenAuthorizerAccessToken authorizerAccessToken) { WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo(); authorizerInfo.setAuthorizerAppid(appId); authorizerInfo.setAccessToken(authorizerAccessToken.getAuthorizerAccessToken()); diff --git a/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java b/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java index 182eab2..48e9a4d 100644 --- a/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenService.java @@ -72,14 +72,7 @@ public class FmOpenService extends WxOpenServiceImpl { wxOpenMessageRouter = new WxOpenMessageRouter(this); wxOpenMessageRouter.rule().handler((wxMpXmlMessage, map, wxMpService, wxSessionManager) -> { String appId = wxMpService.getWxMpConfigStorage().getAppId(); - WxAuthorizerInfo authorizerInfo = authorizerInfoMapper.findByAppid(appId); - String appType; - if(authorizerInfo.getType() <= EnumAppType.C.getCode()) { - appType = "小程序"; - } else { - appType = "公众号"; - } - logger.info("\n接收到{}{}请求消息,内容:{}", appId, appType, wxMpXmlMessage); + logger.info("\n接收到 {} 请求消息,内容:{}", appId, wxMpXmlMessage); return null; }).next(); diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index 8987ab4..fb1e0c2 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -79,7 +79,8 @@ public class WechatCalllbackController extends BaseController { this.logger.info("接收微信回调,消息解密后内容为:{} ", inMessage.toString()); // 处理 - return handleTicket(inMessage); + handleTicket(inMessage); + return "success"; } /** @@ -87,8 +88,14 @@ public class WechatCalllbackController extends BaseController { * @param inMessage * @return */ - private String handleTicket(WxOpenXmlMessage inMessage) { - if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.COMPONENT_VERIFY_TICKET.getMessage())) { + private void handleTicket(WxOpenXmlMessage inMessage) { + try { + String out = openService.getWxOpenComponentService().route(inMessage); + this.logger.info("组装回复信息:{}", out); + } catch (WxErrorException e) { + this.logger.error("notify", e); + } + if (inMessage.getInfoType().equalsIgnoreCase(EnumWxAuthorizationInfoType.COMPONENT_VERIFY_TICKET.getMessage())) { // 保存component_verify_ticket componentVerifyTicketService.saveOrUpdate(new WxComponentVerifyTicket() { { @@ -98,11 +105,10 @@ public class WechatCalllbackController extends BaseController { setDeadline(new Date(Long.valueOf(System.currentTimeMillis() + (60 * 60 * 1000)))); } }); - return "success"; - } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.AUTHORIZED.getMessage()) || - inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UPDATEAUTHORIZED.getMessage())) { + } else if (inMessage.getInfoType().equalsIgnoreCase(EnumWxAuthorizationInfoType.AUTHORIZED.getMessage()) || + inMessage.getInfoType().equalsIgnoreCase(EnumWxAuthorizationInfoType.UPDATEAUTHORIZED.getMessage())) { // 审核通过 - if (handleWeappAuditedMessage(inMessage)) return "success"; + handleWeappAuditedMessage(inMessage); } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UNAUTHORIZED.getMessage())) { // 授权取消 authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo() { @@ -112,16 +118,7 @@ public class WechatCalllbackController extends BaseController { setAuthTime(new Date()); } }); - return "success"; } - - try { - String out = openService.getWxOpenComponentService().route(inMessage); - this.logger.info("组装回复信息:{}", out); - } catch (WxErrorException e) { - this.logger.error("notify", e); - } - return "success"; } /** diff --git a/mlWechatOpen/src/main/resources/application-dev.yml b/mlWechatOpen/src/main/resources/application-dev.yml index 9d13e8e..c56aab3 100644 --- a/mlWechatOpen/src/main/resources/application-dev.yml +++ b/mlWechatOpen/src/main/resources/application-dev.yml @@ -32,7 +32,7 @@ spring: password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA) timeout: 3600 expire: 1800 #30分钟 - database: 10 + database: 1 defaultExpiration: 2592000 # 默认生命周期30天 jedis: pool: