diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java index a6af65e..80132c3 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java @@ -9,6 +9,10 @@ public interface WxAuthorizerInfoMapper extends CommonMapper findList(WxAuthorizerInfo wxAuthorizerInfo); + List findWeappList(); + + List findWxMpList(); + List findVoList(WxWeappInfo wxWeappInfo); int updateReleaseInfo(WxAuthorizerInfo wxAuthorizerInfo); diff --git a/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml index 35d5ad8..ed9ce1e 100644 --- a/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml @@ -119,6 +119,16 @@ + + + + update wx_authorizer_info set `current_version` = #{currentVersion}, `current_desc` = #{currentDesc}, `release_time` = #{releaseTime}, `update_time` = #{updateTime} diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatAuthController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatAuthController.java index a0a3023..e172fae 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatAuthController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatAuthController.java @@ -75,6 +75,9 @@ public class WechatAuthController { setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias()); setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg()); setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl()); + setRefreshToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerRefreshToken()); + setAccessToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAccessToken()); + setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + openAuthorizerInfoResult.getAuthorizationInfo().getExpiresIn()*1000))); setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode()); setAuthTime(new Date()); } diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java index c118037..885ce61 100644 --- a/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -129,6 +129,9 @@ public class WechatCalllbackController extends BaseController { setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias()); setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg()); setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl()); + setRefreshToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerRefreshToken()); + setAccessToken(openAuthorizerInfoResult.getAuthorizationInfo().getAuthorizerAccessToken()); + setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + openAuthorizerInfoResult.getAuthorizationInfo().getExpiresIn()*1000))); setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode()); setAuthTime(new Date()); } @@ -137,7 +140,7 @@ public class WechatCalllbackController extends BaseController { logger.error(e.getMessage()); } } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UNAUTHORIZED.getMessage())) { - // 审核未通过 + // 授权取消 authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo() { { setAuthorizerAppid(inMessage.getAuthorizerAppid()); @@ -233,8 +236,8 @@ public class WechatCalllbackController extends BaseController { printWriter.close(); return; } - out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml(outMessage, openService.getWxOpenConfigStorage()); - logger.info(out); + // out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml(outMessage, openService.getWxOpenConfigStorage()); + // logger.info(out); break; default: printWriter.print("success"); @@ -254,9 +257,9 @@ public class WechatCalllbackController extends BaseController { printWriter.close(); return; } - logger.info("组装回复" + outMessage.toXml()); - out = outMessage.toEncryptedXml(mpService.getWxMpConfigStorage()); - logger.info("组装回复消息-->"+out); + // logger.info("组装回复" + outMessage.toXml()); + // out = outMessage.toEncryptedXml(mpService.getWxMpConfigStorage()); + // logger.info("组装回复消息-->"+out); } catch (Exception e) { logger.error("路由消息时出现异常!", e); } diff --git a/mlWechatOpen/src/main/java/com/iformall/schedule/AppAccessTokenSchedule.java b/mlWechatOpen/src/main/java/com/iformall/schedule/AppAccessTokenSchedule.java new file mode 100644 index 0000000..2dc8948 --- /dev/null +++ b/mlWechatOpen/src/main/java/com/iformall/schedule/AppAccessTokenSchedule.java @@ -0,0 +1,49 @@ +package com.iformall.schedule; + +import com.iformall.domain.po.WxAuthorizerInfo; +import com.iformall.mapper.WxAuthorizerInfoMapper; +import com.iformall.service.wechat.WxOpenService; +import me.chanjar.weixin.common.error.WxErrorException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class AppAccessTokenSchedule { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxAuthorizerInfoMapper authorizerInfoMapper; + + @Autowired + private WxOpenService openService; + + // @Scheduled(cron = "0 */30 * * * *?") // 每30分钟更新一次 + //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 + public void updateAppAccessToken() { + // 微信小程序 + List weappList = authorizerInfoMapper.findWeappList(); + weappList.stream().forEach(wxAuthorizerInfo -> { + try { + openService.getWxOpenComponentService().getAuthorizerAccessToken(wxAuthorizerInfo.getAuthorizerAppid(), true); + } catch (WxErrorException e) { + logger.error(e.getMessage()); + } + }); + + // 微信公众号 + List wxmpList = authorizerInfoMapper.findWxMpList(); + wxmpList.stream().forEach(wxAuthorizerInfo -> { + try { + openService.getWxOpenComponentService().getAuthorizerAccessToken(wxAuthorizerInfo.getAuthorizerAppid(), true); + } catch (WxErrorException e) { + logger.error(e.getMessage()); + } + }); + + } +} \ No newline at end of file diff --git a/mlWechatOpen/src/main/java/com/iformall/service/wechat/WxOpenInRedisDBConfigStorage.java b/mlWechatOpen/src/main/java/com/iformall/service/wechat/WxOpenInRedisDBConfigStorage.java index 9941015..191d31c 100644 --- a/mlWechatOpen/src/main/java/com/iformall/service/wechat/WxOpenInRedisDBConfigStorage.java +++ b/mlWechatOpen/src/main/java/com/iformall/service/wechat/WxOpenInRedisDBConfigStorage.java @@ -5,6 +5,7 @@ import com.iformall.domain.po.WxComponentVerifyTicket; import com.iformall.mapper.WxAuthorizerInfoMapper; import com.iformall.mapper.WxComponentVerifyTicketMapper; import me.chanjar.weixin.open.api.impl.WxOpenInMemoryConfigStorage; +import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -164,16 +165,22 @@ public class WxOpenInRedisDBConfigStorage extends WxOpenInMemoryConfigStorage { } } + @Override + public void updateAuthorizerAccessToken(String appId, WxOpenAuthorizerAccessToken authorizerAccessToken) { + this.updateAuthorizerAccessToken(appId, authorizerAccessToken.getAuthorizerAccessToken(), authorizerAccessToken.getExpiresIn()); + + 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); + } + @Override public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { try (Jedis jedis = this.jedisPool.getResource()) { jedis.setex(this.getKey(this.authorizerAccessTokenKey, appId), expiresInSeconds - 200, authorizerAccessToken); - WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo(); - authorizerInfo.setAuthorizerAppid(appId); - authorizerInfo.setAccessToken(authorizerAccessToken); - authorizerInfo.setAccessTokenExpire(new Date(Long.valueOf(System.currentTimeMillis() + (expiresInSeconds * 1000)))); - int num = wxAuthorizerInfoMapper.updateAccessToken(authorizerInfo); - logger.info("updateAuthorizerAccessToken " + appId + " rows: " + num); } }