| @@ -9,6 +9,10 @@ public interface WxAuthorizerInfoMapper extends CommonMapper<WxAuthorizerInfo, L | |||
| List<WxAuthorizerInfo> findList(WxAuthorizerInfo wxAuthorizerInfo); | |||
| List<WxAuthorizerInfo> findWeappList(); | |||
| List<WxAuthorizerInfo> findWxMpList(); | |||
| List<WxWeappInfo> findVoList(WxWeappInfo wxWeappInfo); | |||
| int updateReleaseInfo(WxAuthorizerInfo wxAuthorizerInfo); | |||
| @@ -119,6 +119,16 @@ | |||
| <include refid="dynamicWhereConditions" /> | |||
| </select> | |||
| <select id="findWeappList" resultMap="BaseResultMap"> | |||
| select <include refid="allColumns" /> from wx_authorizer_info | |||
| where type = 1 or type = 2 | |||
| </select> | |||
| <select id="findWxMpList" resultMap="BaseResultMap"> | |||
| select <include refid="allColumns" /> from wx_authorizer_info | |||
| where type = 3 or type = 4 | |||
| </select> | |||
| <update id="updateReleaseInfo" parameterType="com.iformall.domain.po.WxAuthorizerInfo" > | |||
| update wx_authorizer_info | |||
| set `current_version` = #{currentVersion}, `current_desc` = #{currentDesc}, `release_time` = #{releaseTime}, `update_time` = #{updateTime} | |||
| @@ -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()); | |||
| } | |||
| @@ -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); | |||
| } | |||
| @@ -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<WxAuthorizerInfo> weappList = authorizerInfoMapper.findWeappList(); | |||
| weappList.stream().forEach(wxAuthorizerInfo -> { | |||
| try { | |||
| openService.getWxOpenComponentService().getAuthorizerAccessToken(wxAuthorizerInfo.getAuthorizerAppid(), true); | |||
| } catch (WxErrorException e) { | |||
| logger.error(e.getMessage()); | |||
| } | |||
| }); | |||
| // 微信公众号 | |||
| List<WxAuthorizerInfo> wxmpList = authorizerInfoMapper.findWxMpList(); | |||
| wxmpList.stream().forEach(wxAuthorizerInfo -> { | |||
| try { | |||
| openService.getWxOpenComponentService().getAuthorizerAccessToken(wxAuthorizerInfo.getAuthorizerAppid(), true); | |||
| } catch (WxErrorException e) { | |||
| logger.error(e.getMessage()); | |||
| } | |||
| }); | |||
| } | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||