| @@ -9,6 +9,10 @@ public interface WxAuthorizerInfoMapper extends CommonMapper<WxAuthorizerInfo, L | |||||
| List<WxAuthorizerInfo> findList(WxAuthorizerInfo wxAuthorizerInfo); | List<WxAuthorizerInfo> findList(WxAuthorizerInfo wxAuthorizerInfo); | ||||
| List<WxAuthorizerInfo> findWeappList(); | |||||
| List<WxAuthorizerInfo> findWxMpList(); | |||||
| List<WxWeappInfo> findVoList(WxWeappInfo wxWeappInfo); | List<WxWeappInfo> findVoList(WxWeappInfo wxWeappInfo); | ||||
| int updateReleaseInfo(WxAuthorizerInfo wxAuthorizerInfo); | int updateReleaseInfo(WxAuthorizerInfo wxAuthorizerInfo); | ||||
| @@ -119,6 +119,16 @@ | |||||
| <include refid="dynamicWhereConditions" /> | <include refid="dynamicWhereConditions" /> | ||||
| </select> | </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 id="updateReleaseInfo" parameterType="com.iformall.domain.po.WxAuthorizerInfo" > | ||||
| update wx_authorizer_info | update wx_authorizer_info | ||||
| set `current_version` = #{currentVersion}, `current_desc` = #{currentDesc}, `release_time` = #{releaseTime}, `update_time` = #{updateTime} | set `current_version` = #{currentVersion}, `current_desc` = #{currentDesc}, `release_time` = #{releaseTime}, `update_time` = #{updateTime} | ||||
| @@ -75,6 +75,9 @@ public class WechatAuthController { | |||||
| setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias()); | setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias()); | ||||
| setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg()); | setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg()); | ||||
| setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl()); | 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()); | setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode()); | ||||
| setAuthTime(new Date()); | setAuthTime(new Date()); | ||||
| } | } | ||||
| @@ -129,6 +129,9 @@ public class WechatCalllbackController extends BaseController { | |||||
| setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias()); | setAlias(openAuthorizerInfoResult.getAuthorizerInfo().getAlias()); | ||||
| setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg()); | setHeadImg(openAuthorizerInfoResult.getAuthorizerInfo().getHeadImg()); | ||||
| setQrcodeUrl(openAuthorizerInfoResult.getAuthorizerInfo().getQrcodeUrl()); | 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()); | setAuthorizationStatus(EnumWxAuthorizationStatus.AUTHORIZED.getCode()); | ||||
| setAuthTime(new Date()); | setAuthTime(new Date()); | ||||
| } | } | ||||
| @@ -137,7 +140,7 @@ public class WechatCalllbackController extends BaseController { | |||||
| logger.error(e.getMessage()); | logger.error(e.getMessage()); | ||||
| } | } | ||||
| } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UNAUTHORIZED.getMessage())) { | } else if (inMessage.getInfoType().equals(EnumWxAuthorizationInfoType.UNAUTHORIZED.getMessage())) { | ||||
| // 审核未通过 | |||||
| // 授权取消 | |||||
| authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo() { | authorizerInfoService.saveOrUpdate(new WxAuthorizerInfo() { | ||||
| { | { | ||||
| setAuthorizerAppid(inMessage.getAuthorizerAppid()); | setAuthorizerAppid(inMessage.getAuthorizerAppid()); | ||||
| @@ -233,8 +236,8 @@ public class WechatCalllbackController extends BaseController { | |||||
| printWriter.close(); | printWriter.close(); | ||||
| return; | return; | ||||
| } | } | ||||
| out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml(outMessage, openService.getWxOpenConfigStorage()); | |||||
| logger.info(out); | |||||
| // out = WxOpenXmlMessage.wxMpOutXmlMessageToEncryptedXml(outMessage, openService.getWxOpenConfigStorage()); | |||||
| // logger.info(out); | |||||
| break; | break; | ||||
| default: | default: | ||||
| printWriter.print("success"); | printWriter.print("success"); | ||||
| @@ -254,9 +257,9 @@ public class WechatCalllbackController extends BaseController { | |||||
| printWriter.close(); | printWriter.close(); | ||||
| return; | 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) { | } catch (Exception e) { | ||||
| logger.error("路由消息时出现异常!", 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.WxAuthorizerInfoMapper; | ||||
| import com.iformall.mapper.WxComponentVerifyTicketMapper; | import com.iformall.mapper.WxComponentVerifyTicketMapper; | ||||
| import me.chanjar.weixin.open.api.impl.WxOpenInMemoryConfigStorage; | import me.chanjar.weixin.open.api.impl.WxOpenInMemoryConfigStorage; | ||||
| import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken; | |||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | 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 | @Override | ||||
| public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { | public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { | ||||
| try (Jedis jedis = this.jedisPool.getResource()) { | try (Jedis jedis = this.jedisPool.getResource()) { | ||||
| jedis.setex(this.getKey(this.authorizerAccessTokenKey, appId), expiresInSeconds - 200, authorizerAccessToken); | 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); | |||||
| } | } | ||||
| } | } | ||||