@@ -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; | ||||
} | } | ||||
} | } |