@@ -39,37 +39,37 @@ public class WxCpServiceApacheHttpClientImpl extends BaseWxCpServiceImpl<Closeab | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
if (this.configStorage.isAccessTokenExpired() || forceRefresh) { | |||
synchronized (this.globalAccessTokenRefreshLock) { | |||
if (this.configStorage.isAccessTokenExpired()) { | |||
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?" | |||
+ "&corpid=" + this.configStorage.getCorpId() | |||
+ "&corpsecret=" + this.configStorage.getCorpSecret(); | |||
try { | |||
HttpGet httpGet = new HttpGet(url); | |||
if (this.httpProxy != null) { | |||
RequestConfig config = RequestConfig.custom() | |||
.setProxy(this.httpProxy).build(); | |||
httpGet.setConfig(config); | |||
} | |||
String resultContent = null; | |||
try (CloseableHttpClient httpclient = getRequestHttpClient(); | |||
CloseableHttpResponse response = httpclient.execute(httpGet)) { | |||
resultContent = new BasicResponseHandler().handleResponse(response); | |||
} finally { | |||
httpGet.releaseConnection(); | |||
} | |||
WxError error = WxError.fromJson(resultContent, WxType.CP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.configStorage.updateAccessToken( | |||
accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
if (!this.configStorage.isAccessTokenExpired() && !forceRefresh) { | |||
return this.configStorage.getAccessToken(); | |||
} | |||
synchronized (this.globalAccessTokenRefreshLock) { | |||
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?" | |||
+ "&corpid=" + this.configStorage.getCorpId() | |||
+ "&corpsecret=" + this.configStorage.getCorpSecret(); | |||
try { | |||
HttpGet httpGet = new HttpGet(url); | |||
if (this.httpProxy != null) { | |||
RequestConfig config = RequestConfig.custom() | |||
.setProxy(this.httpProxy).build(); | |||
httpGet.setConfig(config); | |||
} | |||
String resultContent; | |||
try (CloseableHttpClient httpclient = getRequestHttpClient(); | |||
CloseableHttpResponse response = httpclient.execute(httpGet)) { | |||
resultContent = new BasicResponseHandler().handleResponse(response); | |||
} finally { | |||
httpGet.releaseConnection(); | |||
} | |||
WxError error = WxError.fromJson(resultContent, WxType.CP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.configStorage.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
return this.configStorage.getAccessToken(); | |||
@@ -30,30 +30,29 @@ public class WxCpServiceJoddHttpImpl extends BaseWxCpServiceImpl<HttpConnectionP | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
if (this.configStorage.isAccessTokenExpired() || forceRefresh) { | |||
synchronized (this.globalAccessTokenRefreshLock) { | |||
if (this.configStorage.isAccessTokenExpired()) { | |||
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?" | |||
+ "&corpid=" + this.configStorage.getCorpId() | |||
+ "&corpsecret=" + this.configStorage.getCorpSecret(); | |||
if (!this.configStorage.isAccessTokenExpired() && !forceRefresh) { | |||
return this.configStorage.getAccessToken(); | |||
} | |||
synchronized (this.globalAccessTokenRefreshLock) { | |||
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?" | |||
+ "&corpid=" + this.configStorage.getCorpId() | |||
+ "&corpsecret=" + this.configStorage.getCorpSecret(); | |||
HttpRequest request = HttpRequest.get(url); | |||
if (this.httpProxy != null) { | |||
httpClient.useProxy(this.httpProxy); | |||
} | |||
request.withConnectionProvider(httpClient); | |||
HttpResponse response = request.send(); | |||
HttpRequest request = HttpRequest.get(url); | |||
if (this.httpProxy != null) { | |||
httpClient.useProxy(this.httpProxy); | |||
} | |||
request.withConnectionProvider(httpClient); | |||
HttpResponse response = request.send(); | |||
String resultContent = response.bodyText(); | |||
WxError error = WxError.fromJson(resultContent, WxType.CP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.configStorage.updateAccessToken( | |||
accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
} | |||
String resultContent = response.bodyText(); | |||
WxError error = WxError.fromJson(resultContent, WxType.CP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.configStorage.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
} | |||
return this.configStorage.getAccessToken(); | |||
} | |||
@@ -33,34 +33,33 @@ public class WxCpServiceOkHttpImpl extends BaseWxCpServiceImpl<OkHttpClient, OkH | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
this.log.debug("WxCpServiceOkHttpImpl is running"); | |||
if (this.configStorage.isAccessTokenExpired() || forceRefresh) { | |||
synchronized (this.globalAccessTokenRefreshLock) { | |||
if (this.configStorage.isAccessTokenExpired()) { | |||
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?" | |||
+ "&corpid=" + this.configStorage.getCorpId() | |||
+ "&corpsecret=" + this.configStorage.getCorpSecret(); | |||
//得到httpClient | |||
OkHttpClient client = getRequestHttpClient(); | |||
//请求的request | |||
Request request = new Request.Builder().url(url).get().build(); | |||
String resultContent = null; | |||
try { | |||
Response response = client.newCall(request).execute(); | |||
resultContent = response.body().string(); | |||
} catch (IOException e) { | |||
this.log.error(e.getMessage(), e); | |||
} | |||
if (!this.configStorage.isAccessTokenExpired() && !forceRefresh) { | |||
return this.configStorage.getAccessToken(); | |||
} | |||
synchronized (this.globalAccessTokenRefreshLock) { | |||
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?" | |||
+ "&corpid=" + this.configStorage.getCorpId() | |||
+ "&corpsecret=" + this.configStorage.getCorpSecret(); | |||
//得到httpClient | |||
OkHttpClient client = getRequestHttpClient(); | |||
//请求的request | |||
Request request = new Request.Builder().url(url).get().build(); | |||
String resultContent = null; | |||
try { | |||
Response response = client.newCall(request).execute(); | |||
resultContent = response.body().string(); | |||
} catch (IOException e) { | |||
this.log.error(e.getMessage(), e); | |||
} | |||
WxError error = WxError.fromJson(resultContent, WxType.CP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.configStorage.updateAccessToken(accessToken.getAccessToken(), | |||
accessToken.getExpiresIn()); | |||
WxError error = WxError.fromJson(resultContent, WxType.CP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.configStorage.updateAccessToken(accessToken.getAccessToken(), | |||
accessToken.getExpiresIn()); | |||
} | |||
return this.configStorage.getAccessToken(); | |||
} | |||
@@ -1,31 +1,6 @@ | |||
package cn.binarywang.wx.miniapp.api.impl; | |||
import java.io.IOException; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
import java.util.concurrent.locks.Lock; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.apache.http.HttpHost; | |||
import org.apache.http.client.config.RequestConfig; | |||
import org.apache.http.client.methods.CloseableHttpResponse; | |||
import org.apache.http.client.methods.HttpGet; | |||
import org.apache.http.impl.client.BasicResponseHandler; | |||
import org.apache.http.impl.client.CloseableHttpClient; | |||
import cn.binarywang.wx.miniapp.api.WxMaAnalysisService; | |||
import cn.binarywang.wx.miniapp.api.WxMaCodeService; | |||
import cn.binarywang.wx.miniapp.api.WxMaJsapiService; | |||
import cn.binarywang.wx.miniapp.api.WxMaMediaService; | |||
import cn.binarywang.wx.miniapp.api.WxMaMsgService; | |||
import cn.binarywang.wx.miniapp.api.WxMaQrcodeService; | |||
import cn.binarywang.wx.miniapp.api.WxMaRunService; | |||
import cn.binarywang.wx.miniapp.api.WxMaSecCheckService; | |||
import cn.binarywang.wx.miniapp.api.WxMaService; | |||
import cn.binarywang.wx.miniapp.api.WxMaSettingService; | |||
import cn.binarywang.wx.miniapp.api.WxMaShareService; | |||
import cn.binarywang.wx.miniapp.api.WxMaTemplateService; | |||
import cn.binarywang.wx.miniapp.api.WxMaUserService; | |||
import cn.binarywang.wx.miniapp.api.*; | |||
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; | |||
import cn.binarywang.wx.miniapp.config.WxMaConfig; | |||
import com.google.common.base.Joiner; | |||
@@ -38,13 +13,21 @@ import me.chanjar.weixin.common.error.WxError; | |||
import me.chanjar.weixin.common.error.WxErrorException; | |||
import me.chanjar.weixin.common.util.DataUtils; | |||
import me.chanjar.weixin.common.util.crypto.SHA1; | |||
import me.chanjar.weixin.common.util.http.HttpType; | |||
import me.chanjar.weixin.common.util.http.RequestExecutor; | |||
import me.chanjar.weixin.common.util.http.RequestHttp; | |||
import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | |||
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | |||
import me.chanjar.weixin.common.util.http.*; | |||
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; | |||
import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.apache.http.HttpHost; | |||
import org.apache.http.client.config.RequestConfig; | |||
import org.apache.http.client.methods.CloseableHttpResponse; | |||
import org.apache.http.client.methods.HttpGet; | |||
import org.apache.http.impl.client.BasicResponseHandler; | |||
import org.apache.http.impl.client.CloseableHttpClient; | |||
import java.io.IOException; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
import java.util.concurrent.locks.Lock; | |||
import static cn.binarywang.wx.miniapp.constant.WxMaConstants.ErrorCode.*; | |||
@@ -118,40 +101,41 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
if (!this.getWxMaConfig().isAccessTokenExpired() && !forceRefresh) { | |||
return this.getWxMaConfig().getAccessToken(); | |||
} | |||
Lock lock = this.getWxMaConfig().getAccessTokenLock(); | |||
lock.lock(); | |||
try { | |||
lock.lock(); | |||
if (this.getWxMaConfig().isAccessTokenExpired() || forceRefresh) { | |||
String url = String.format(WxMaService.GET_ACCESS_TOKEN_URL, this.getWxMaConfig().getAppid(), | |||
this.getWxMaConfig().getSecret()); | |||
try { | |||
HttpGet httpGet = new HttpGet(url); | |||
if (this.getRequestHttpProxy() != null) { | |||
RequestConfig config = RequestConfig.custom().setProxy(this.getRequestHttpProxy()).build(); | |||
httpGet.setConfig(config); | |||
} | |||
try (CloseableHttpResponse response = getRequestHttpClient().execute(httpGet)) { | |||
String resultContent = new BasicResponseHandler().handleResponse(response); | |||
WxError error = WxError.fromJson(resultContent); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMaConfig().updateAccessToken(accessToken.getAccessToken(), | |||
accessToken.getExpiresIn()); | |||
} finally { | |||
httpGet.releaseConnection(); | |||
String url = String.format(WxMaService.GET_ACCESS_TOKEN_URL, this.getWxMaConfig().getAppid(), | |||
this.getWxMaConfig().getSecret()); | |||
try { | |||
HttpGet httpGet = new HttpGet(url); | |||
if (this.getRequestHttpProxy() != null) { | |||
RequestConfig config = RequestConfig.custom().setProxy(this.getRequestHttpProxy()).build(); | |||
httpGet.setConfig(config); | |||
} | |||
try (CloseableHttpResponse response = getRequestHttpClient().execute(httpGet)) { | |||
String resultContent = new BasicResponseHandler().handleResponse(response); | |||
WxError error = WxError.fromJson(resultContent); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMaConfig().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
return this.getWxMaConfig().getAccessToken(); | |||
} finally { | |||
httpGet.releaseConnection(); | |||
} | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} finally { | |||
lock.unlock(); | |||
} | |||
return this.getWxMaConfig().getAccessToken(); | |||
} | |||
@Override | |||
@@ -63,37 +63,38 @@ public class WxMpServiceHttpClientImpl extends BaseWxMpServiceImpl<CloseableHttp | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
if (!this.getWxMpConfigStorage().isAccessTokenExpired() && !forceRefresh) { | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
} | |||
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); | |||
lock.lock(); | |||
try { | |||
lock.lock(); | |||
if (this.getWxMpConfigStorage().isAccessTokenExpired() || forceRefresh) { | |||
String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL, | |||
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); | |||
try { | |||
HttpGet httpGet = new HttpGet(url); | |||
if (this.getRequestHttpProxy() != null) { | |||
RequestConfig config = RequestConfig.custom().setProxy(this.getRequestHttpProxy()).build(); | |||
httpGet.setConfig(config); | |||
} | |||
try (CloseableHttpResponse response = getRequestHttpClient().execute(httpGet)) { | |||
String resultContent = new BasicResponseHandler().handleResponse(response); | |||
WxError error = WxError.fromJson(resultContent, WxType.MP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), | |||
accessToken.getExpiresIn()); | |||
} finally { | |||
httpGet.releaseConnection(); | |||
String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL, | |||
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); | |||
try { | |||
HttpGet httpGet = new HttpGet(url); | |||
if (this.getRequestHttpProxy() != null) { | |||
RequestConfig config = RequestConfig.custom().setProxy(this.getRequestHttpProxy()).build(); | |||
httpGet.setConfig(config); | |||
} | |||
try (CloseableHttpResponse response = getRequestHttpClient().execute(httpGet)) { | |||
String resultContent = new BasicResponseHandler().handleResponse(response); | |||
WxError error = WxError.fromJson(resultContent, WxType.MP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
} finally { | |||
httpGet.releaseConnection(); | |||
} | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} finally { | |||
lock.unlock(); | |||
} | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
} | |||
} |
@@ -48,36 +48,37 @@ public class WxMpServiceJoddHttpImpl extends BaseWxMpServiceImpl<HttpConnectionP | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
if (!this.getWxMpConfigStorage().isAccessTokenExpired() && !forceRefresh) { | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
} | |||
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); | |||
lock.lock(); | |||
try { | |||
lock.lock(); | |||
if (this.getWxMpConfigStorage().isAccessTokenExpired() || forceRefresh) { | |||
String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL, | |||
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); | |||
HttpRequest request = HttpRequest.get(url); | |||
if (this.getRequestHttpProxy() != null) { | |||
SocketHttpConnectionProvider provider = new SocketHttpConnectionProvider(); | |||
provider.useProxy(getRequestHttpProxy()); | |||
request.withConnectionProvider(provider); | |||
} | |||
HttpResponse response = request.send(); | |||
String resultContent = response.bodyText(); | |||
WxError error = WxError.fromJson(resultContent, WxType.MP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), | |||
accessToken.getExpiresIn()); | |||
String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL, | |||
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); | |||
HttpRequest request = HttpRequest.get(url); | |||
if (this.getRequestHttpProxy() != null) { | |||
SocketHttpConnectionProvider provider = new SocketHttpConnectionProvider(); | |||
provider.useProxy(getRequestHttpProxy()); | |||
request.withConnectionProvider(provider); | |||
} | |||
HttpResponse response = request.send(); | |||
String resultContent = response.bodyText(); | |||
WxError error = WxError.fromJson(resultContent, WxType.MP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
} finally { | |||
lock.unlock(); | |||
} | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
} | |||
} |
@@ -36,38 +36,36 @@ public class WxMpServiceOkHttpImpl extends BaseWxMpServiceImpl<OkHttpClient, OkH | |||
@Override | |||
public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
this.log.debug("WxMpServiceOkHttpImpl is running"); | |||
if (!this.getWxMpConfigStorage().isAccessTokenExpired() && !forceRefresh) { | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
} | |||
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); | |||
lock.lock(); | |||
try { | |||
lock.lock(); | |||
if (this.getWxMpConfigStorage().isAccessTokenExpired() || forceRefresh) { | |||
String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL, | |||
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); | |||
String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL, | |||
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); | |||
Request request = new Request.Builder().url(url).get().build(); | |||
Response response = getRequestHttpClient().newCall(request).execute(); | |||
String resultContent = response.body().string(); | |||
WxError error = WxError.fromJson(resultContent, WxType.MP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), | |||
accessToken.getExpiresIn()); | |||
Request request = new Request.Builder().url(url).get().build(); | |||
Response response = getRequestHttpClient().newCall(request).execute(); | |||
String resultContent = response.body().string(); | |||
WxError error = WxError.fromJson(resultContent, WxType.MP); | |||
if (error.getErrorCode() != 0) { | |||
throw new WxErrorException(error); | |||
} | |||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
} catch (IOException e) { | |||
this.log.error(e.getMessage(), e); | |||
throw new RuntimeException(e); | |||
} finally { | |||
lock.unlock(); | |||
} | |||
return this.getWxMpConfigStorage().getAccessToken(); | |||
} | |||
@Override | |||
public void initHttp() { | |||
this.log.debug("WxMpServiceOkHttpImpl initHttp"); | |||
//设置代理 | |||
if (wxMpConfigStorage.getHttpProxyHost() != null && wxMpConfigStorage.getHttpProxyPort() > 0) { | |||
httpProxy = OkHttpProxyInfo.httpProxy(wxMpConfigStorage.getHttpProxyHost(), | |||