| @@ -39,7 +39,9 @@ public interface WxOpenComponentService { | |||||
| String MINIAPP_JSCODE_2_SESSION = "https://api.weixin.qq.com/sns/component/jscode2session?appid=%s&js_code=%s&grant_type=authorization_code&component_appid=%s"; | String MINIAPP_JSCODE_2_SESSION = "https://api.weixin.qq.com/sns/component/jscode2session?appid=%s&js_code=%s&grant_type=authorization_code&component_appid=%s"; | ||||
| WxMpService getWxMpServiceByAppid(String appid); | WxMpService getWxMpServiceByAppid(String appid); | ||||
| WxMaService getWxMaServiceByAppid(String appid); | WxMaService getWxMaServiceByAppid(String appid); | ||||
| WxOpenConfigStorage getWxOpenConfigStorage(); | WxOpenConfigStorage getWxOpenConfigStorage(); | ||||
| boolean checkSignature(String timestamp, String nonce, String signature); | boolean checkSignature(String timestamp, String nonce, String signature); | ||||
| @@ -52,6 +54,7 @@ public interface WxOpenComponentService { | |||||
| String getPreAuthUrl(String redirectURI) throws WxErrorException; | String getPreAuthUrl(String redirectURI) throws WxErrorException; | ||||
| String route(WxOpenXmlMessage wxMessage) throws WxErrorException; | String route(WxOpenXmlMessage wxMessage) throws WxErrorException; | ||||
| /** | /** | ||||
| * 使用授权码换取公众号或小程序的接口调用凭据和授权信息 | * 使用授权码换取公众号或小程序的接口调用凭据和授权信息 | ||||
| */ | */ | ||||
| @@ -81,6 +84,7 @@ public interface WxOpenComponentService { | |||||
| WxMpOAuth2AccessToken oauth2refreshAccessToken(String appid, String refreshToken) throws WxErrorException; | WxMpOAuth2AccessToken oauth2refreshAccessToken(String appid, String refreshToken) throws WxErrorException; | ||||
| String oauth2buildAuthorizationUrl(String appid, String redirectURI, String scope, String state); | String oauth2buildAuthorizationUrl(String appid, String redirectURI, String scope, String state); | ||||
| WxMaJscode2SessionResult miniappJscode2Session(String appid, String jsCode, String appId) throws WxErrorException; | WxMaJscode2SessionResult miniappJscode2Session(String appid, String jsCode, String appId) throws WxErrorException; | ||||
| } | } | ||||
| @@ -37,6 +37,7 @@ public interface WxOpenConfigStorage { | |||||
| void updateComponentAccessTokent(WxOpenComponentAccessToken componentAccessToken); | void updateComponentAccessTokent(WxOpenComponentAccessToken componentAccessToken); | ||||
| WxMpConfigStorage getWxMpConfigStorage(String appId); | WxMpConfigStorage getWxMpConfigStorage(String appId); | ||||
| WxMaConfig getWxMaConfig(String appId); | WxMaConfig getWxMaConfig(String appId); | ||||
| /** | /** | ||||
| @@ -52,14 +53,12 @@ public interface WxOpenConfigStorage { | |||||
| */ | */ | ||||
| boolean autoRefreshToken(); | boolean autoRefreshToken(); | ||||
| String getAuthorizerRefreshToken(String appId); | String getAuthorizerRefreshToken(String appId); | ||||
| void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken); | void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken); | ||||
| String getAuthorizerAccessToken(String appId); | String getAuthorizerAccessToken(String appId); | ||||
| boolean isAuthorizerAccessTokenExpired(String appId); | boolean isAuthorizerAccessTokenExpired(String appId); | ||||
| /** | /** | ||||
| @@ -72,6 +72,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { | |||||
| } | } | ||||
| return wxMaService; | return wxMaService; | ||||
| } | } | ||||
| public WxOpenService getWxOpenService() { | public WxOpenService getWxOpenService() { | ||||
| return wxOpenService; | return wxOpenService; | ||||
| } | } | ||||
| @@ -238,7 +239,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { | |||||
| } | } | ||||
| @Override | @Override | ||||
| public WxMaJscode2SessionResult miniappJscode2Session(String appid, String jsCode, String appId) throws WxErrorException { | |||||
| public WxMaJscode2SessionResult miniappJscode2Session(String appid, String jsCode, String appId) throws WxErrorException { | |||||
| String url = String.format(MINIAPP_JSCODE_2_SESSION, appId, jsCode, getWxOpenConfigStorage().getComponentAppId()); | String url = String.format(MINIAPP_JSCODE_2_SESSION, appId, jsCode, getWxOpenConfigStorage().getComponentAppId()); | ||||
| String responseContent = get(url); | String responseContent = get(url); | ||||
| return WxMaJscode2SessionResult.fromJson(responseContent); | return WxMaJscode2SessionResult.fromJson(responseContent); | ||||
| @@ -228,12 +228,14 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||||
| private String token; | private String token; | ||||
| private Long expiresTime; | private Long expiresTime; | ||||
| } | } | ||||
| private static class WxOpenInnerConfigStorage implements WxMpConfigStorage, WxMaConfig { | private static class WxOpenInnerConfigStorage implements WxMpConfigStorage, WxMaConfig { | ||||
| private WxOpenConfigStorage wxOpenConfigStorage; | private WxOpenConfigStorage wxOpenConfigStorage; | ||||
| private String appId; | private String appId; | ||||
| private Lock accessTokenLock = new ReentrantLock(); | private Lock accessTokenLock = new ReentrantLock(); | ||||
| private Lock jsapiTicketLock = new ReentrantLock(); | private Lock jsapiTicketLock = new ReentrantLock(); | ||||
| private Lock cardApiTicketLock = new ReentrantLock(); | private Lock cardApiTicketLock = new ReentrantLock(); | ||||
| private WxOpenInnerConfigStorage(WxOpenConfigStorage wxOpenConfigStorage, String appId) { | private WxOpenInnerConfigStorage(WxOpenConfigStorage wxOpenConfigStorage, String appId) { | ||||
| this.wxOpenConfigStorage = wxOpenConfigStorage; | this.wxOpenConfigStorage = wxOpenConfigStorage; | ||||
| this.appId = appId; | this.appId = appId; | ||||
| @@ -3,9 +3,6 @@ package me.chanjar.weixin.open.api.impl; | |||||
| import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; | import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; | ||||
| import cn.binarywang.wx.miniapp.config.WxMaConfig; | import cn.binarywang.wx.miniapp.config.WxMaConfig; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.mp.api.WxMpConfigStorage; | |||||
| import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; | |||||
| import me.chanjar.weixin.open.api.WxOpenComponentService; | import me.chanjar.weixin.open.api.WxOpenComponentService; | ||||
| /** | /** | ||||
| @@ -10,6 +10,7 @@ import java.util.Map; | |||||
| public class WxOpenMessageRouter extends WxMpMessageRouter { | public class WxOpenMessageRouter extends WxMpMessageRouter { | ||||
| private WxOpenService wxOpenService; | private WxOpenService wxOpenService; | ||||
| public WxOpenMessageRouter(WxOpenService wxOpenService) { | public WxOpenMessageRouter(WxOpenService wxOpenService) { | ||||
| super(null); | super(null); | ||||
| this.wxOpenService = wxOpenService; | this.wxOpenService = wxOpenService; | ||||
| @@ -18,6 +19,7 @@ public class WxOpenMessageRouter extends WxMpMessageRouter { | |||||
| public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage, String appId) { | public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage, String appId) { | ||||
| return route(wxMessage, new HashMap<String, Object>(), appId); | return route(wxMessage, new HashMap<String, Object>(), appId); | ||||
| } | } | ||||
| public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage, final Map<String, Object> context, String appId) { | public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage, final Map<String, Object> context, String appId) { | ||||
| return route(wxMessage, context, wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId)); | return route(wxMessage, context, wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId)); | ||||
| } | } | ||||
| @@ -36,11 +36,6 @@ import me.chanjar.weixin.open.api.WxOpenComponentService; | |||||
| return wxOpenComponentService.oauth2getAccessToken(appId, code); | return wxOpenComponentService.oauth2getAccessToken(appId, code); | ||||
| } | } | ||||
| // @Override | |||||
| // public boolean checkSignature(String timestamp, String nonce, String signature) { | |||||
| // return wxOpenComponentService.checkSignature(appId, timestamp, nonce, signature); | |||||
| // } | |||||
| @Override | @Override | ||||
| public WxMpOAuth2AccessToken oauth2refreshAccessToken(String refreshToken) throws WxErrorException { | public WxMpOAuth2AccessToken oauth2refreshAccessToken(String refreshToken) throws WxErrorException { | ||||
| return wxOpenComponentService.oauth2refreshAccessToken(appId, refreshToken); | return wxOpenComponentService.oauth2refreshAccessToken(appId, refreshToken); | ||||
| @@ -42,18 +42,6 @@ public abstract class WxOpenServiceAbstractImpl<H, P> implements WxOpenService, | |||||
| return result; | return result; | ||||
| } catch (WxErrorException e) { | } catch (WxErrorException e) { | ||||
| WxError error = e.getError(); | WxError error = e.getError(); | ||||
| // /* | |||||
| // * 发生以下情况时尝试刷新access_token | |||||
| // * 40001 获取access_token时AppSecret错误,或者access_token无效 | |||||
| // * 42001 access_token超时 | |||||
| // * 40014 不合法的access_token,请开发者认真比对access_token的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口 | |||||
| // */ | |||||
| // if (error.getErrorCode() == 42001 || error.getErrorCode() == 40001 || error.getErrorCode() == 40014) { | |||||
| // // 强制设置wxCpConfigStorage它的access token过期了,这样在下一次请求里就会刷新access token | |||||
| // this.configStorage.expireAccessToken(); | |||||
| // return execute(executor, uri, data); | |||||
| // } | |||||
| if (error.getErrorCode() != 0) { | if (error.getErrorCode() != 0) { | ||||
| this.log.error("\n【请求地址】: {}\n【请求参数】:{}\n【错误信息】:{}", uri, data, error); | this.log.error("\n【请求地址】: {}\n【请求参数】:{}\n【错误信息】:{}", uri, data, error); | ||||
| throw new WxErrorException(error, e); | throw new WxErrorException(error, e); | ||||
| @@ -53,7 +53,7 @@ public class WxOpenXmlMessage implements Serializable { | |||||
| @XStreamConverter(value = XStreamCDataConverter.class) | @XStreamConverter(value = XStreamCDataConverter.class) | ||||
| private String preAuthCode; | private String preAuthCode; | ||||
| public static String wxMpOutXmlMessageToEncryptedXml(WxMpXmlOutMessage message, WxOpenConfigStorage wxOpenConfigStorage){ | |||||
| public static String wxMpOutXmlMessageToEncryptedXml(WxMpXmlOutMessage message, WxOpenConfigStorage wxOpenConfigStorage) { | |||||
| String plainXml = message.toXml(); | String plainXml = message.toXml(); | ||||
| WxOpenCryptUtil pc = new WxOpenCryptUtil(wxOpenConfigStorage); | WxOpenCryptUtil pc = new WxOpenCryptUtil(wxOpenConfigStorage); | ||||
| return pc.encrypt(plainXml); | return pc.encrypt(plainXml); | ||||
| @@ -15,7 +15,8 @@ public class WxOpenAuthorizerInfoResult implements Serializable { | |||||
| private WxOpenAuthorizationInfo authorizationInfo; | private WxOpenAuthorizationInfo authorizationInfo; | ||||
| private WxOpenAuthorizerInfo authorizerInfo; | private WxOpenAuthorizerInfo authorizerInfo; | ||||
| public boolean isMiniProgram(){ | |||||
| public boolean isMiniProgram() { | |||||
| return authorizerInfo != null && authorizerInfo.getMiniProgramInfo() != null; | return authorizerInfo != null && authorizerInfo.getMiniProgramInfo() != null; | ||||
| } | } | ||||
| } | } | ||||