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 1356a33..5e7d636 100644 --- a/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java +++ b/mallinkService/src/main/java/com/iformall/service/wechat/FmOpenInRedisDBConfigStorage.java @@ -1,6 +1,8 @@ package com.iformall.service.wechat; import com.iformall.common.FmHttpClientBuilder; +import com.iformall.domain.po.WxAuthorizerInfo; +import com.iformall.domain.po.WxComponentVerifyTicket; import com.iformall.mapper.WxAuthorizerInfoMapper; import com.iformall.mapper.WxComponentVerifyTicketMapper; import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; @@ -9,10 +11,13 @@ 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; +import java.util.Date; + public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { private final static String COMPONENT_VERIFY_TICKET_KEY = "wechat_component_verify_ticket:"; private final static String COMPONENT_ACCESS_TOKEN_KEY = "wechat_component_access_token:"; @@ -73,7 +78,27 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { public String getComponentVerifyTicket() { try (Jedis jedis = this.jedisPool.getResource()) { logger.info("getComponentVerifyTicket " + this.componentVerifyTicketKey); - return jedis.get(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; } } @@ -110,18 +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); - /* - 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); - */ logger.info("updateComponentVerifyTicketAccessToken " + componentAccessToken); + + 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,17 +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); - /* - - WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo(); - authorizerInfo.setAuthorizerAppid(appId); - authorizerInfo.setRefreshToken(authorizerRefreshToken); - int num = wxAuthorizerInfoMapper.updateRefreshToken(authorizerInfo); - */ logger.info("setAuthorizerRefreshToken " + appId); + + 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()) { @@ -172,15 +204,20 @@ public class FmOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { @Override 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()); authorizerInfo.setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + (authorizerAccessToken.getExpiresIn() * 1000)))); int num = wxAuthorizerInfoMapper.updateAccessToken(authorizerInfo); logger.info("updateAuthorizerAccessToken " + appId + " rows: " + num); - */ - logger.info("updateAuthorizerAccessToken " + appId); } @Override diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index 7ecceab..fb1e0c2 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -89,7 +89,13 @@ public class WechatCalllbackController extends BaseController { * @return */ private void handleTicket(WxOpenXmlMessage inMessage) { - if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.COMPONENT_VERIFY_TICKET.getMessage())) { + 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() { { @@ -99,8 +105,8 @@ public class WechatCalllbackController extends BaseController { setDeadline(new Date(Long.valueOf(System.currentTimeMillis() + (60 * 60 * 1000)))); } }); - } 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())) { // 审核通过 handleWeappAuditedMessage(inMessage); } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UNAUTHORIZED.getMessage())) { @@ -113,13 +119,6 @@ public class WechatCalllbackController extends BaseController { } }); } - - try { - String out = openService.getWxOpenComponentService().route(inMessage); - this.logger.info("组装回复信息:{}", out); - } catch (WxErrorException e) { - this.logger.error("notify", e); - } } /**