@@ -1,12 +1,13 @@ | |||
package me.chanjar.weixin.mp.api; | |||
import java.io.File; | |||
import java.util.concurrent.locks.Lock; | |||
import me.chanjar.weixin.common.bean.WxAccessToken; | |||
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; | |||
import me.chanjar.weixin.mp.bean.WxMpHostConfig; | |||
import me.chanjar.weixin.mp.enums.TicketType; | |||
import java.io.File; | |||
import java.util.concurrent.locks.Lock; | |||
/** | |||
* 微信客户端配置存储. | |||
* | |||
@@ -96,4 +97,8 @@ public interface WxMpConfigStorage { | |||
*/ | |||
boolean autoRefreshToken(); | |||
/** | |||
* 得到微信接口地址域名部分的自定义设置信息. | |||
*/ | |||
WxMpHostConfig getHostConfig(); | |||
} |
@@ -8,6 +8,7 @@ import java.util.concurrent.locks.ReentrantLock; | |||
import lombok.Data; | |||
import me.chanjar.weixin.common.bean.WxAccessToken; | |||
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; | |||
import me.chanjar.weixin.mp.bean.WxMpHostConfig; | |||
import me.chanjar.weixin.mp.enums.TicketType; | |||
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | |||
@@ -179,4 +180,9 @@ public class WxMpInMemoryConfigStorage implements WxMpConfigStorage, Serializabl | |||
return true; | |||
} | |||
@Override | |||
public WxMpHostConfig getHostConfig() { | |||
return null; | |||
} | |||
} |
@@ -157,13 +157,13 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | |||
@Override | |||
public String oauth2buildAuthorizationUrl(String redirectURI, String scope, String state) { | |||
return String.format(CONNECT_OAUTH2_AUTHORIZE_URL.getUrl(), | |||
return String.format(CONNECT_OAUTH2_AUTHORIZE_URL.getUrl(this.getWxMpConfigStorage()), | |||
this.getWxMpConfigStorage().getAppId(), URIUtil.encodeURIComponent(redirectURI), scope, StringUtils.trimToEmpty(state)); | |||
} | |||
@Override | |||
public String buildQrConnectUrl(String redirectURI, String scope, String state) { | |||
return String.format(QRCONNECT_URL.getUrl(), this.getWxMpConfigStorage().getAppId(), | |||
return String.format(QRCONNECT_URL.getUrl(this.getWxMpConfigStorage()), this.getWxMpConfigStorage().getAppId(), | |||
URIUtil.encodeURIComponent(redirectURI), scope, StringUtils.trimToEmpty(state)); | |||
} | |||
@@ -179,14 +179,14 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | |||
@Override | |||
public WxMpOAuth2AccessToken oauth2getAccessToken(String code) throws WxErrorException { | |||
String url = String.format(OAUTH2_ACCESS_TOKEN_URL.getUrl(), this.getWxMpConfigStorage().getAppId(), | |||
String url = String.format(OAUTH2_ACCESS_TOKEN_URL.getUrl(this.getWxMpConfigStorage()), this.getWxMpConfigStorage().getAppId(), | |||
this.getWxMpConfigStorage().getSecret(), code); | |||
return this.getOAuth2AccessToken(url); | |||
} | |||
@Override | |||
public WxMpOAuth2AccessToken oauth2refreshAccessToken(String refreshToken) throws WxErrorException { | |||
String url = String.format(OAUTH2_REFRESH_TOKEN_URL.getUrl(), this.getWxMpConfigStorage().getAppId(), refreshToken); | |||
String url = String.format(OAUTH2_REFRESH_TOKEN_URL.getUrl(this.getWxMpConfigStorage()), this.getWxMpConfigStorage().getAppId(), refreshToken); | |||
return this.getOAuth2AccessToken(url); | |||
} | |||
@@ -196,7 +196,7 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | |||
lang = "zh_CN"; | |||
} | |||
String url = String.format(OAUTH2_USERINFO_URL.getUrl(), token.getAccessToken(), token.getOpenId(), lang); | |||
String url = String.format(OAUTH2_USERINFO_URL.getUrl(this.getWxMpConfigStorage()), token.getAccessToken(), token.getOpenId(), lang); | |||
try { | |||
RequestExecutor<String, String> executor = SimpleGetRequestExecutor.create(this); | |||
@@ -209,7 +209,7 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | |||
@Override | |||
public boolean oauth2validateAccessToken(WxMpOAuth2AccessToken token) { | |||
String url = String.format(OAUTH2_VALIDATE_TOKEN_URL.getUrl(), token.getAccessToken(), token.getOpenId()); | |||
String url = String.format(OAUTH2_VALIDATE_TOKEN_URL.getUrl(this.getWxMpConfigStorage()), token.getAccessToken(), token.getOpenId()); | |||
try { | |||
SimpleGetRequestExecutor.create(this).execute(url, null); | |||
@@ -252,7 +252,7 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | |||
@Override | |||
public String get(WxMpApiUrl url, String queryParam) throws WxErrorException { | |||
return this.get(url.getUrl(), queryParam); | |||
return this.get(url.getUrl(this.getWxMpConfigStorage()), queryParam); | |||
} | |||
@Override | |||
@@ -262,12 +262,12 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | |||
@Override | |||
public String post(WxMpApiUrl url, String postData) throws WxErrorException { | |||
return this.post(url.getUrl(), postData); | |||
return this.post(url.getUrl(this.getWxMpConfigStorage()), postData); | |||
} | |||
@Override | |||
public <T, E> T execute(RequestExecutor<T, E> executor, WxMpApiUrl url, E data) throws WxErrorException { | |||
return this.execute(executor, url.getUrl(), data); | |||
return this.execute(executor, url.getUrl(this.getWxMpConfigStorage()), data); | |||
} | |||
/** | |||
@@ -8,7 +8,6 @@ import me.chanjar.weixin.common.error.WxErrorException; | |||
import me.chanjar.weixin.mp.api.WxMpAiOpenService; | |||
import me.chanjar.weixin.mp.api.WxMpService; | |||
import me.chanjar.weixin.mp.enums.AiLangType; | |||
import me.chanjar.weixin.mp.enums.WxMpApiUrl; | |||
import me.chanjar.weixin.mp.util.requestexecuter.voice.VoiceUploadRequestExecutor; | |||
import java.io.File; | |||
@@ -34,7 +33,7 @@ public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { | |||
} | |||
this.wxMpService.execute(VoiceUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), | |||
String.format(VOICE_UPLOAD_URL.getUrl(), "mp3", voiceId, lang.getCode()), | |||
String.format(VOICE_UPLOAD_URL.getUrl(this.wxMpService.getWxMpConfigStorage()), "mp3", voiceId, lang.getCode()), | |||
voiceFile); | |||
} | |||
@@ -46,7 +45,8 @@ public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { | |||
@Override | |||
public String translate(AiLangType langFrom, AiLangType langTo, String content) throws WxErrorException { | |||
String response = this.wxMpService.post(String.format(TRANSLATE_URL.getUrl(), langFrom.getCode(), langTo.getCode()), content); | |||
String response = this.wxMpService.post(String.format(TRANSLATE_URL.getUrl(this.wxMpService.getWxMpConfigStorage()), | |||
langFrom.getCode(), langTo.getCode()), content); | |||
WxError error = WxError.fromJson(response, WxType.MP); | |||
if (error.getErrorCode() != 0) { | |||
@@ -13,7 +13,6 @@ import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | |||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfSessionRequest; | |||
import me.chanjar.weixin.mp.bean.kefu.result.*; | |||
import me.chanjar.weixin.mp.enums.WxMpApiUrl; | |||
import java.io.File; | |||
import java.util.Date; | |||
@@ -68,13 +67,14 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||
public boolean kfAccountUploadHeadImg(String kfAccount, File imgFile) throws WxErrorException { | |||
WxMediaUploadResult responseContent = this.wxMpService | |||
.execute(MediaUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), | |||
String.format(KFACCOUNT_UPLOAD_HEAD_IMG.getUrl(), kfAccount), imgFile); | |||
String.format(KFACCOUNT_UPLOAD_HEAD_IMG.getUrl(this.wxMpService.getWxMpConfigStorage()), kfAccount), imgFile); | |||
return responseContent != null; | |||
} | |||
@Override | |||
public boolean kfAccountDel(String kfAccount) throws WxErrorException { | |||
String responseContent = this.wxMpService.get(String.format(KFACCOUNT_DEL.getUrl(), kfAccount), null); | |||
String responseContent = this.wxMpService.get(String.format(KFACCOUNT_DEL.getUrl(this.wxMpService.getWxMpConfigStorage()), | |||
kfAccount), null); | |||
return responseContent != null; | |||
} | |||
@@ -94,13 +94,15 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||
@Override | |||
public WxMpKfSessionGetResult kfSessionGet(String openid) throws WxErrorException { | |||
String responseContent = this.wxMpService.get(String.format(KFSESSION_GET_SESSION.getUrl(), openid), null); | |||
String responseContent = this.wxMpService.get(String.format(KFSESSION_GET_SESSION | |||
.getUrl(this.wxMpService.getWxMpConfigStorage()), openid), null); | |||
return WxMpKfSessionGetResult.fromJson(responseContent); | |||
} | |||
@Override | |||
public WxMpKfSessionList kfSessionList(String kfAccount) throws WxErrorException { | |||
String responseContent = this.wxMpService.get(String.format(KFSESSION_GET_SESSION_LIST.getUrl(), kfAccount), null); | |||
String responseContent = this.wxMpService.get(String.format(KFSESSION_GET_SESSION_LIST | |||
.getUrl(this.wxMpService.getWxMpConfigStorage()), kfAccount), null); | |||
return WxMpKfSessionList.fromJson(responseContent); | |||
} | |||
@@ -53,7 +53,7 @@ public class WxMpMaterialServiceImpl implements WxMpMaterialService { | |||
@Override | |||
public WxMediaUploadResult mediaUpload(String mediaType, File file) throws WxErrorException { | |||
String url = String.format(MEDIA_UPLOAD_URL.getUrl(), mediaType); | |||
String url = String.format(MEDIA_UPLOAD_URL.getUrl(this.wxMpService.getWxMpConfigStorage()), mediaType); | |||
return this.wxMpService.execute(MediaUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), url, file); | |||
} | |||
@@ -72,7 +72,7 @@ public class WxMpMaterialServiceImpl implements WxMpMaterialService { | |||
@Override | |||
public WxMpMaterialUploadResult materialFileUpload(String mediaType, WxMpMaterial material) throws WxErrorException { | |||
String url = String.format(MATERIAL_ADD_URL.getUrl(), mediaType); | |||
String url = String.format(MATERIAL_ADD_URL.getUrl(this.wxMpService.getWxMpConfigStorage()), mediaType); | |||
return this.wxMpService.execute(MaterialUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), url, material); | |||
} | |||
@@ -105,7 +105,8 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService { | |||
@Override | |||
public String qrCodePictureUrl(String ticket, boolean needShortUrl) throws WxErrorException { | |||
try { | |||
String resultUrl = String.format(SHOW_QRCODE_WITH_TICKET.getUrl(), URLEncoder.encode(ticket, StandardCharsets.UTF_8.name())); | |||
String resultUrl = String.format(SHOW_QRCODE_WITH_TICKET.getUrl(this.wxMpService.getWxMpConfigStorage()), | |||
URLEncoder.encode(ticket, StandardCharsets.UTF_8.name())); | |||
if (needShortUrl) { | |||
return this.wxMpService.shortUrl(resultUrl); | |||
} | |||
@@ -8,7 +8,6 @@ import me.chanjar.weixin.common.util.http.HttpType; | |||
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; | |||
import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder; | |||
import me.chanjar.weixin.mp.api.WxMpConfigStorage; | |||
import me.chanjar.weixin.mp.enums.WxMpApiUrl; | |||
import org.apache.http.HttpHost; | |||
import org.apache.http.client.config.RequestConfig; | |||
import org.apache.http.client.methods.CloseableHttpResponse; | |||
@@ -19,7 +18,7 @@ import org.apache.http.impl.client.CloseableHttpClient; | |||
import java.io.IOException; | |||
import java.util.concurrent.locks.Lock; | |||
import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Other.*; | |||
import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Other.GET_ACCESS_TOKEN_URL; | |||
/** | |||
* apache http client方式实现. | |||
@@ -67,20 +66,20 @@ public class WxMpServiceHttpClientImpl extends BaseWxMpServiceImpl<CloseableHttp | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
if (!this.getWxMpConfigStorage().isAccessTokenExpired() && !forceRefresh) { | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
final WxMpConfigStorage config = this.getWxMpConfigStorage(); | |||
if (!config.isAccessTokenExpired() && !forceRefresh) { | |||
return config.getAccessToken(); | |||
} | |||
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); | |||
Lock lock = config.getAccessTokenLock(); | |||
lock.lock(); | |||
try { | |||
String url = String.format(GET_ACCESS_TOKEN_URL.getUrl(), | |||
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); | |||
String url = String.format(GET_ACCESS_TOKEN_URL.getUrl(config), config.getAppId(), config.getSecret()); | |||
try { | |||
HttpGet httpGet = new HttpGet(url); | |||
if (this.getRequestHttpProxy() != null) { | |||
RequestConfig config = RequestConfig.custom().setProxy(this.getRequestHttpProxy()).build(); | |||
httpGet.setConfig(config); | |||
RequestConfig requestConfig = RequestConfig.custom().setProxy(this.getRequestHttpProxy()).build(); | |||
httpGet.setConfig(requestConfig); | |||
} | |||
try (CloseableHttpResponse response = getRequestHttpClient().execute(httpGet)) { | |||
String resultContent = new BasicResponseHandler().handleResponse(response); | |||
@@ -89,8 +88,8 @@ public class WxMpServiceHttpClientImpl extends BaseWxMpServiceImpl<CloseableHttp | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
config.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
return config.getAccessToken(); | |||
} finally { | |||
httpGet.releaseConnection(); | |||
} | |||
@@ -51,15 +51,15 @@ public class WxMpServiceJoddHttpImpl extends BaseWxMpServiceImpl<HttpConnectionP | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
if (!this.getWxMpConfigStorage().isAccessTokenExpired() && !forceRefresh) { | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
final WxMpConfigStorage config = this.getWxMpConfigStorage(); | |||
if (!config.isAccessTokenExpired() && !forceRefresh) { | |||
return config.getAccessToken(); | |||
} | |||
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); | |||
Lock lock = config.getAccessTokenLock(); | |||
lock.lock(); | |||
try { | |||
String url = String.format(GET_ACCESS_TOKEN_URL.getUrl(), | |||
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); | |||
String url = String.format(GET_ACCESS_TOKEN_URL.getUrl(config), config.getAppId(), config.getSecret()); | |||
HttpRequest request = HttpRequest.get(url); | |||
@@ -76,9 +76,9 @@ public class WxMpServiceJoddHttpImpl extends BaseWxMpServiceImpl<HttpConnectionP | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
config.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
return config.getAccessToken(); | |||
} finally { | |||
lock.unlock(); | |||
} | |||
@@ -7,13 +7,12 @@ import me.chanjar.weixin.common.error.WxErrorException; | |||
import me.chanjar.weixin.common.util.http.HttpType; | |||
import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; | |||
import me.chanjar.weixin.mp.api.WxMpConfigStorage; | |||
import me.chanjar.weixin.mp.enums.WxMpApiUrl; | |||
import okhttp3.*; | |||
import java.io.IOException; | |||
import java.util.concurrent.locks.Lock; | |||
import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Other.*; | |||
import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Other.GET_ACCESS_TOKEN_URL; | |||
/** | |||
* okhttp实现. | |||
@@ -41,15 +40,15 @@ public class WxMpServiceOkHttpImpl extends BaseWxMpServiceImpl<OkHttpClient, OkH | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
if (!this.getWxMpConfigStorage().isAccessTokenExpired() && !forceRefresh) { | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
final WxMpConfigStorage config = this.getWxMpConfigStorage(); | |||
if (!config.isAccessTokenExpired() && !forceRefresh) { | |||
return config.getAccessToken(); | |||
} | |||
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); | |||
Lock lock = config.getAccessTokenLock(); | |||
lock.lock(); | |||
try { | |||
String url = String.format(GET_ACCESS_TOKEN_URL.getUrl(), | |||
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); | |||
String url = String.format(GET_ACCESS_TOKEN_URL.getUrl(config), config.getAppId(), config.getSecret()); | |||
Request request = new Request.Builder().url(url).get().build(); | |||
Response response = getRequestHttpClient().newCall(request).execute(); | |||
@@ -59,9 +58,9 @@ public class WxMpServiceOkHttpImpl extends BaseWxMpServiceImpl<OkHttpClient, OkH | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
config.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
return config.getAccessToken(); | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} finally { | |||
@@ -24,7 +24,7 @@ public class WxMpSubscribeMsgServiceImpl implements WxMpSubscribeMsgService { | |||
@Override | |||
public String subscribeMsgAuthorizationUrl(String redirectURI, int scene, String reserved) { | |||
WxMpConfigStorage storage = this.wxMpService.getWxMpConfigStorage(); | |||
return String.format(SUBSCRIBE_MESSAGE_AUTHORIZE_URL.getUrl(), storage.getAppId(), scene, storage.getTemplateId(), | |||
return String.format(SUBSCRIBE_MESSAGE_AUTHORIZE_URL.getUrl(storage), storage.getAppId(), scene, storage.getTemplateId(), | |||
URIUtil.encodeURIComponent(redirectURI), reserved); | |||
} | |||
@@ -0,0 +1,56 @@ | |||
package me.chanjar.weixin.mp.bean; | |||
import lombok.AllArgsConstructor; | |||
import lombok.Builder; | |||
import lombok.Data; | |||
import lombok.NoArgsConstructor; | |||
/** | |||
* 微信接口地址域名部分的自定义设置信息. | |||
* | |||
* @author <a href="https://github.com/binarywang">Binary Wang</a> | |||
* @date 2019-06-09 | |||
*/ | |||
@Data | |||
@Builder | |||
@NoArgsConstructor | |||
@AllArgsConstructor | |||
public class WxMpHostConfig { | |||
public static final String API_DEFAULT_HOST_URL = "https://api.weixin.qq.com"; | |||
public static final String MP_DEFAULT_HOST_URL = "https://mp.weixin.qq.com"; | |||
public static final String OPEN_DEFAULT_HOST_URL = "https://open.weixin.qq.com"; | |||
/** | |||
* 对应于:https://api.weixin.qq.com | |||
*/ | |||
private String apiHost; | |||
/** | |||
* 对应于:https://open.weixin.qq.com | |||
*/ | |||
private String openHost; | |||
/** | |||
* 对应于:https://mp.weixin.qq.com | |||
*/ | |||
private String mpHost; | |||
public static String buildUrl(WxMpHostConfig hostConfig, String prefix, String path) { | |||
if (hostConfig == null) { | |||
return prefix + path; | |||
} | |||
if (hostConfig.getApiHost() != null && prefix.equals(API_DEFAULT_HOST_URL)) { | |||
return hostConfig.getApiHost() + path; | |||
} | |||
if (hostConfig.getMpHost() != null && prefix.equals(MP_DEFAULT_HOST_URL)) { | |||
return hostConfig.getMpHost() + path; | |||
} | |||
if (hostConfig.getOpenHost() != null && prefix.equals(OPEN_DEFAULT_HOST_URL)) { | |||
return hostConfig.getOpenHost() + path; | |||
} | |||
return prefix + path; | |||
} | |||
} |
@@ -17,6 +17,9 @@ import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage; | |||
import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; | |||
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; | |||
/** | |||
* @author someone | |||
*/ | |||
public class WxMpGsonBuilder { | |||
private static final GsonBuilder INSTANCE = new GsonBuilder(); | |||
@@ -11,6 +11,7 @@ import cn.binarywang.wx.miniapp.config.WxMaConfig; | |||
import me.chanjar.weixin.common.bean.WxAccessToken; | |||
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; | |||
import me.chanjar.weixin.mp.api.WxMpConfigStorage; | |||
import me.chanjar.weixin.mp.bean.WxMpHostConfig; | |||
import me.chanjar.weixin.mp.enums.TicketType; | |||
import me.chanjar.weixin.open.api.WxOpenConfigStorage; | |||
import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken; | |||
@@ -543,10 +544,14 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||
return wxOpenConfigStorage.getApacheHttpClientBuilder(); | |||
} | |||
@Override | |||
public boolean autoRefreshToken() { | |||
return true; | |||
} | |||
@Override | |||
public WxMpHostConfig getHostConfig() { | |||
return null; | |||
} | |||
} | |||
} |
@@ -9,7 +9,7 @@ import me.chanjar.weixin.open.api.WxOpenComponentService; | |||
/** | |||
* @author <a href="https://github.com/007gzs">007</a> | |||
*/ | |||
/* package */ class WxOpenMpServiceImpl extends WxMpServiceImpl { | |||
/* package(无需对外暴露) */ class WxOpenMpServiceImpl extends WxMpServiceImpl { | |||
private WxOpenComponentService wxOpenComponentService; | |||
private WxMpConfigStorage wxMpConfigStorage; | |||
private String appId; | |||