Переглянути джерело

#293 重构OkHttp的实现代码,同时修复JSApi的bug

* update travis settings

* feat(okhttp): 修改okhttp底层调用方法

直接用OkHttpClient代替connect.使客户端单一化.Okhttp 自动管理连接池优化

* feat(log,jsApi): 添加log debug 标记明确下调用底层效果,修复jsAPI Lock 为null 问题

添加log debug 标记明确下调用底层效果,修复jsAPI Lock 为null 问题

#293
master
dylanleung 7 роки тому
committed by Binary Wang
джерело
коміт
0a06c4d1a1
17 змінених файлів з 159 додано та 280 видалено
  1. +13
    -20
      weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java
  2. +6
    -17
      weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaUploadRequestExecutor.java
  3. +6
    -19
      weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java
  4. +6
    -21
      weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimplePostRequestExecutor.java
  5. +25
    -25
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceOkHttpImpl.java
  6. +1
    -2
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/AbstractWxMpServiceImpl.java
  7. +28
    -24
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceOkHttpImpl.java
  8. +6
    -17
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialDeleteRequestExecutor.java
  9. +3
    -17
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java
  10. +10
    -17
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialUploadRequestExecutor.java
  11. +7
    -17
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVideoInfoRequestExecutor.java
  12. +18
    -41
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVoiceAndImageDownloadRequestExecutor.java
  13. +8
    -17
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMediaImgUploadRequestExecutor.java
  14. +13
    -20
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpQrCodeRequestExecutor.java
  15. +6
    -0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpBaseAPITest.java
  16. +1
    -5
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpJsAPITest.java
  17. +2
    -1
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/test/ApiTestModule.java

+ 13
- 20
weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java Переглянути файл

@@ -6,7 +6,11 @@ import me.chanjar.weixin.common.util.fs.FileUtils;
import me.chanjar.weixin.common.util.http.MediaDownloadRequestExecutor;
import me.chanjar.weixin.common.util.http.RequestHttp;
import okhttp3.*;
import okio.BufferedSink;
import okio.Okio;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.File;
@@ -18,7 +22,8 @@ import java.util.regex.Pattern;
/**
* Created by ecoolper on 2017/5/5.
*/
public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());


public OkHttpMediaDownloadRequestExecutor(RequestHttp requestHttp, File tmpDirFile) {
@@ -27,6 +32,7 @@ public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExec

@Override
public File execute(String uri, String queryParam) throws WxErrorException, IOException {
logger.debug("OkHttpMediaDownloadRequestExecutor is running");
if (queryParam != null) {
if (uri.indexOf('?') == -1) {
uri += '?';
@@ -34,23 +40,8 @@ public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExec
uri += uri.endsWith("?") ? queryParam : '&' + queryParam;
}

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
//得到httpClient
OkHttpClient client = clientBuilder.build();
OkHttpClient client = requestHttp.getRequestHttpClient();

Request request = new Request.Builder().url(uri).get().build();

@@ -66,10 +57,12 @@ public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExec
if (StringUtils.isBlank(fileName)) {
return null;
}

InputStream inputStream = new ByteArrayInputStream(response.body().bytes());
String[] nameAndExt = fileName.split("\\.");
return FileUtils.createTmpFile(inputStream, nameAndExt[0], nameAndExt[1], super.tmpDirFile);
File file = File.createTempFile(nameAndExt[0], nameAndExt[1], super.tmpDirFile);
try (BufferedSink sink = Okio.buffer(Okio.sink(file))) {
sink.writeAll(response.body().source());
}
return file;
}

private String getFileName(Response response) throws WxErrorException {


+ 6
- 17
weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaUploadRequestExecutor.java Переглянути файл

@@ -6,6 +6,8 @@ import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
import me.chanjar.weixin.common.util.http.RequestHttp;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;
@@ -13,7 +15,8 @@ import java.io.IOException;
/**
* Created by ecoolper on 2017/5/5.
*/
public class OkHttpMediaUploadRequestExecutor extends MediaUploadRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkHttpMediaUploadRequestExecutor extends MediaUploadRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

public OkHttpMediaUploadRequestExecutor(RequestHttp requestHttp) {
super(requestHttp);
@@ -21,23 +24,9 @@ public class OkHttpMediaUploadRequestExecutor extends MediaUploadRequestExecutor

@Override
public WxMediaUploadResult execute(String uri, File file) throws WxErrorException, IOException {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
logger.debug("OkHttpMediaUploadRequestExecutor is running");
//得到httpClient
OkHttpClient client = clientBuilder.build();
OkHttpClient client = requestHttp.getRequestHttpClient();

RequestBody body = new MultipartBody.Builder()
.setType(MediaType.parse("multipart/form-data"))


+ 6
- 19
weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java Переглянути файл

@@ -5,13 +5,16 @@ import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.util.http.RequestHttp;
import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

/**
* Created by ecoolper on 2017/5/4.
*/
public class OkHttpSimpleGetRequestExecutor extends SimpleGetRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkHttpSimpleGetRequestExecutor extends SimpleGetRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

public OkHttpSimpleGetRequestExecutor(RequestHttp requestHttp) {
super(requestHttp);
@@ -19,6 +22,7 @@ public class OkHttpSimpleGetRequestExecutor extends SimpleGetRequestExecutor<Con

@Override
public String execute(String uri, String queryParam) throws WxErrorException, IOException {
logger.debug("OkHttpSimpleGetRequestExecutor is running");
if (queryParam != null) {
if (uri.indexOf('?') == -1) {
uri += '?';
@@ -26,26 +30,9 @@ public class OkHttpSimpleGetRequestExecutor extends SimpleGetRequestExecutor<Con
uri += uri.endsWith("?") ? queryParam : '&' + queryParam;
}

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
//得到httpClient
OkHttpClient client = clientBuilder.build();

OkHttpClient client = requestHttp.getRequestHttpClient();
Request request = new Request.Builder().url(uri).build();

Response response = client.newCall(request).execute();
String responseContent = response.body().string();
WxError error = WxError.fromJson(responseContent);


+ 6
- 21
weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimplePostRequestExecutor.java Переглянути файл

@@ -5,13 +5,16 @@ import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.util.http.RequestHttp;
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

/**
* Created by ecoolper on 2017/5/4.
*/
public class OkHttpSimplePostRequestExecutor extends SimplePostRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkHttpSimplePostRequestExecutor extends SimplePostRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

public OkHttpSimplePostRequestExecutor(RequestHttp requestHttp) {
super(requestHttp);
@@ -19,27 +22,9 @@ public class OkHttpSimplePostRequestExecutor extends SimplePostRequestExecutor<C

@Override
public String execute(String uri, String postEntity) throws WxErrorException, IOException {
ConnectionPool pool = requestHttp.getRequestHttpClient();
final OkHttpProxyInfo proxyInfo = requestHttp.getRequestHttpProxy();

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(pool);
//设置代理
if (proxyInfo != null) {
clientBuilder.proxy(proxyInfo.getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(proxyInfo.getProxyUsername(), proxyInfo.getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
logger.debug("OkHttpSimplePostRequestExecutor running");
//得到httpClient
OkHttpClient client = clientBuilder.build();

OkHttpClient client = requestHttp.getRequestHttpClient();

MediaType mediaType = MediaType.parse("text/plain; charset=utf-8");
RequestBody body = RequestBody.create(mediaType, postEntity);


+ 25
- 25
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpServiceOkHttpImpl.java Переглянути файл

@@ -7,16 +7,20 @@ import me.chanjar.weixin.common.util.http.HttpType;
import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo;
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

public class WxCpServiceOkHttpImpl extends AbstractWxCpServiceImpl<ConnectionPool, OkHttpProxyInfo> {
protected ConnectionPool httpClient;
public class WxCpServiceOkHttpImpl extends AbstractWxCpServiceImpl<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

protected OkHttpClient httpClient;
protected OkHttpProxyInfo httpProxy;


@Override
public ConnectionPool getRequestHttpClient() {
public OkHttpClient getRequestHttpClient() {
return httpClient;
}

@@ -32,6 +36,7 @@ public class WxCpServiceOkHttpImpl extends AbstractWxCpServiceImpl<ConnectionPoo

@Override
public String getAccessToken(boolean forceRefresh) throws WxErrorException {
logger.debug("WxCpServiceOkHttpImpl is running");
if (forceRefresh) {
this.configStorage.expireAccessToken();
}
@@ -41,24 +46,8 @@ public class WxCpServiceOkHttpImpl extends AbstractWxCpServiceImpl<ConnectionPoo
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?"
+ "&corpid=" + this.configStorage.getCorpId()
+ "&corpsecret=" + this.configStorage.getCorpSecret();

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(httpClient);
//设置代理
if (httpProxy != null) {
clientBuilder.proxy(getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(httpProxy.getProxyUsername(), httpProxy.getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
//得到httpClient
OkHttpClient client = clientBuilder.build();
OkHttpClient client = getRequestHttpClient();
//请求的request
Request request = new Request.Builder().url(url).get().build();
Response response = null;
@@ -88,13 +77,24 @@ public class WxCpServiceOkHttpImpl extends AbstractWxCpServiceImpl<ConnectionPoo

@Override
public void initHttp() {
WxCpConfigStorage configStorage = this.configStorage;
logger.debug("WxCpServiceOkHttpImpl initHttp");
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
//设置代理
if (httpProxy != null) {
clientBuilder.proxy(getRequestHttpProxy().getProxy());

if (configStorage.getHttpProxyHost() != null && configStorage.getHttpProxyPort() > 0) {
httpProxy = new OkHttpProxyInfo(OkHttpProxyInfo.ProxyType.SOCKS5, configStorage.getHttpProxyHost(), configStorage.getHttpProxyPort(), configStorage.getHttpProxyUsername(), configStorage.getHttpProxyPassword());
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(httpProxy.getProxyUsername(), httpProxy.getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
}

httpClient = new ConnectionPool();
httpClient = clientBuilder.build();
}

@Override


+ 1
- 2
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/AbstractWxMpServiceImpl.java Переглянути файл

@@ -66,10 +66,9 @@ public abstract class AbstractWxMpServiceImpl<H, P> implements WxMpService, Requ

@Override
public String getJsapiTicket(boolean forceRefresh) throws WxErrorException {
Lock lock = this.getWxMpConfigStorage().getJsapiTicketLock();
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock();
try {
lock.lock();

if (forceRefresh) {
this.getWxMpConfigStorage().expireJsapiTicket();
}


+ 28
- 24
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceOkHttpImpl.java Переглянути файл

@@ -8,16 +8,21 @@ import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.concurrent.locks.Lock;

public class WxMpServiceOkHttpImpl extends AbstractWxMpServiceImpl<ConnectionPool, OkHttpProxyInfo> {
private ConnectionPool httpClient;
public class WxMpServiceOkHttpImpl extends AbstractWxMpServiceImpl<OkHttpClient, OkHttpProxyInfo> {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

private OkHttpClient httpClient;
private OkHttpProxyInfo httpProxy;

@Override
public ConnectionPool getRequestHttpClient() {
public OkHttpClient getRequestHttpClient() {
return httpClient;
}

@@ -33,6 +38,7 @@ public class WxMpServiceOkHttpImpl extends AbstractWxMpServiceImpl<ConnectionPoo

@Override
public String getAccessToken(boolean forceRefresh) throws WxErrorException {
logger.debug("WxMpServiceOkHttpImpl is running");
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock();
try {
lock.lock();
@@ -45,26 +51,8 @@ public class WxMpServiceOkHttpImpl extends AbstractWxMpServiceImpl<ConnectionPoo
String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL,
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret());

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(httpClient);
//设置代理
if (httpProxy != null) {
clientBuilder.proxy(getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(httpProxy.getProxyUsername(), httpProxy.getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
//得到httpClient
OkHttpClient client = clientBuilder.build();

Request request = new Request.Builder().url(url).get().build();
Response response = client.newCall(request).execute();
Response response = getRequestHttpClient().newCall(request).execute();
String resultContent = response.body().string();
WxError error = WxError.fromJson(resultContent);
if (error.getErrorCode() != 0) {
@@ -84,13 +72,29 @@ public class WxMpServiceOkHttpImpl extends AbstractWxMpServiceImpl<ConnectionPoo

@Override
public void initHttp() {
logger.debug("WxMpServiceOkHttpImpl initHttp");
WxMpConfigStorage configStorage = this.getWxMpConfigStorage();

if (configStorage.getHttpProxyHost() != null && configStorage.getHttpProxyPort() > 0) {
httpProxy = new OkHttpProxyInfo(OkHttpProxyInfo.ProxyType.SOCKS5, configStorage.getHttpProxyHost(), configStorage.getHttpProxyPort(), configStorage.getHttpProxyUsername(), configStorage.getHttpProxyPassword());
httpProxy = OkHttpProxyInfo.socks5Proxy(configStorage.getHttpProxyHost(), configStorage.getHttpProxyPort(), configStorage.getHttpProxyUsername(), configStorage.getHttpProxyPassword());
}
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
//设置代理
if (httpProxy != null) {
clientBuilder.proxy(getRequestHttpProxy().getProxy());

httpClient = new ConnectionPool();
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(httpProxy.getProxyUsername(), httpProxy.getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
}
httpClient = clientBuilder.build();
}

}

+ 6
- 17
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialDeleteRequestExecutor.java Переглянути файл

@@ -6,13 +6,16 @@ import me.chanjar.weixin.common.util.http.RequestHttp;
import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo;
import me.chanjar.weixin.mp.util.http.MaterialDeleteRequestExecutor;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

/**
* Created by ecoolper on 2017/5/5.
*/
public class OkhttpMaterialDeleteRequestExecutor extends MaterialDeleteRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkhttpMaterialDeleteRequestExecutor extends MaterialDeleteRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());


public OkhttpMaterialDeleteRequestExecutor(RequestHttp requestHttp) {
@@ -21,23 +24,9 @@ public class OkhttpMaterialDeleteRequestExecutor extends MaterialDeleteRequestEx

@Override
public Boolean execute(String uri, String materialId) throws WxErrorException, IOException {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
logger.debug("OkhttpMaterialDeleteRequestExecutor is running");
//得到httpClient
OkHttpClient client = clientBuilder.build();
OkHttpClient client = requestHttp.getRequestHttpClient();

RequestBody requestBody = new FormBody.Builder().add("media_id", materialId).build();
Request request = new Request.Builder().url(uri).post(requestBody).build();


+ 3
- 17
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java Переглянути файл

@@ -16,7 +16,7 @@ import java.io.IOException;
/**
* Created by ecoolper on 2017/5/5.
*/
public class OkhttpMaterialNewsInfoRequestExecutor extends MaterialNewsInfoRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkhttpMaterialNewsInfoRequestExecutor extends MaterialNewsInfoRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public OkhttpMaterialNewsInfoRequestExecutor(RequestHttp requestHttp) {
super(requestHttp);
@@ -24,23 +24,9 @@ public class OkhttpMaterialNewsInfoRequestExecutor extends MaterialNewsInfoReque

@Override
public WxMpMaterialNews execute(String uri, String materialId) throws WxErrorException, IOException {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});

//得到httpClient
OkHttpClient client = clientBuilder.build();
OkHttpClient client = requestHttp.getRequestHttpClient();

RequestBody requestBody = new FormBody.Builder().add("media_id", materialId).build();
Request request = new Request.Builder().url(uri).post(requestBody).build();


+ 10
- 17
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialUploadRequestExecutor.java Переглянути файл

@@ -9,6 +9,8 @@ import me.chanjar.weixin.mp.bean.material.WxMpMaterial;
import me.chanjar.weixin.mp.bean.material.WxMpMaterialUploadResult;
import me.chanjar.weixin.mp.util.http.MaterialUploadRequestExecutor;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileNotFoundException;
@@ -18,13 +20,16 @@ import java.util.Map;
/**
* Created by ecoolper on 2017/5/5.
*/
public class OkhttpMaterialUploadRequestExecutor extends MaterialUploadRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkhttpMaterialUploadRequestExecutor extends MaterialUploadRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

public OkhttpMaterialUploadRequestExecutor(RequestHttp requestHttp) {
super(requestHttp);
}

@Override
public WxMpMaterialUploadResult execute(String uri, WxMpMaterial material) throws WxErrorException, IOException {
logger.debug("OkhttpMaterialUploadRequestExecutor is running");
if (material == null) {
throw new WxErrorException(WxError.newBuilder().setErrorMsg("非法请求,material参数为空").build());
}
@@ -33,21 +38,9 @@ public class OkhttpMaterialUploadRequestExecutor extends MaterialUploadRequestEx
throw new FileNotFoundException();
}

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
//得到httpClient

OkHttpClient client = requestHttp.getRequestHttpClient();

MultipartBody.Builder bodyBuilder = new MultipartBody.Builder()
.setType(MediaType.parse("multipart/form-data"))
@@ -60,7 +53,7 @@ public class OkhttpMaterialUploadRequestExecutor extends MaterialUploadRequestEx
}

Request request = new Request.Builder().url(uri).post(bodyBuilder.build()).build();
Response response = clientBuilder.build().newCall(request).execute();
Response response = client.newCall(request).execute();
String responseContent = response.body().string();
WxError error = WxError.fromJson(responseContent);
if (error.getErrorCode() != 0) {


+ 7
- 17
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVideoInfoRequestExecutor.java Переглянути файл

@@ -7,36 +7,26 @@ import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo;
import me.chanjar.weixin.mp.bean.material.WxMpMaterialVideoInfoResult;
import me.chanjar.weixin.mp.util.http.MaterialVideoInfoRequestExecutor;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

/**
* Created by ecoolper on 2017/5/5.
*/
public class OkhttpMaterialVideoInfoRequestExecutor extends MaterialVideoInfoRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkhttpMaterialVideoInfoRequestExecutor extends MaterialVideoInfoRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

public OkhttpMaterialVideoInfoRequestExecutor(RequestHttp requestHttp) {
super(requestHttp);
}

@Override
public WxMpMaterialVideoInfoResult execute(String uri, String materialId) throws WxErrorException, IOException {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
logger.debug("OkhttpMaterialVideoInfoRequestExecutor is running");
//得到httpClient
OkHttpClient client = clientBuilder.build();
OkHttpClient client = requestHttp.getRequestHttpClient();

RequestBody requestBody = new FormBody.Builder().add("media_id", materialId).build();
Request request = new Request.Builder().url(uri).post(requestBody).build();


+ 18
- 41
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVoiceAndImageDownloadRequestExecutor.java Переглянути файл

@@ -7,62 +7,39 @@ import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import me.chanjar.weixin.mp.util.http.MaterialVoiceAndImageDownloadRequestExecutor;
import okhttp3.*;
import okio.BufferedSink;
import okio.Okio;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.io.*;

/**
* Created by ecoolper on 2017/5/5.
*/
public class OkhttpMaterialVoiceAndImageDownloadRequestExecutor extends MaterialVoiceAndImageDownloadRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkhttpMaterialVoiceAndImageDownloadRequestExecutor extends MaterialVoiceAndImageDownloadRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

public OkhttpMaterialVoiceAndImageDownloadRequestExecutor(RequestHttp requestHttp, File tmpDirFile) {
super(requestHttp, tmpDirFile);
}

@Override
public InputStream execute(String uri, String materialId) throws WxErrorException, IOException {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
//得到httpClient
OkHttpClient client = clientBuilder.build();

logger.debug("OkhttpMaterialVoiceAndImageDownloadRequestExecutor is running");
OkHttpClient client = requestHttp.getRequestHttpClient();
RequestBody requestBody = new FormBody.Builder().add("media_id", materialId).build();
Request request = new Request.Builder().url(uri).get().post(requestBody).build();
Response response = client.newCall(request).execute();

try (InputStream inputStream = new ByteArrayInputStream(response.body().bytes())) {

// 下载媒体文件出错
byte[] responseContent = IOUtils.toByteArray(inputStream);
String responseContentString = new String(responseContent, StandardCharsets.UTF_8);
if (responseContentString.length() < 100) {
try {
WxError wxError = WxGsonBuilder.create().fromJson(responseContentString, WxError.class);
if (wxError.getErrorCode() != 0) {
throw new WxErrorException(wxError);
}
} catch (com.google.gson.JsonSyntaxException ex) {
return new ByteArrayInputStream(responseContent);
}
}
return new ByteArrayInputStream(responseContent);
String contentTypeHeader = response.header("Content-Type");
if ("text/plain".equals(contentTypeHeader)) {
String responseContent = response.body().string();
throw new WxErrorException(WxError.fromJson(responseContent));
}
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BufferedSink sink = Okio.buffer(Okio.sink(outputStream))) {
sink.writeAll(response.body().source());
return new ByteArrayInputStream(outputStream.toByteArray());
}
}
}

+ 8
- 17
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMediaImgUploadRequestExecutor.java Переглянути файл

@@ -7,6 +7,8 @@ import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo;
import me.chanjar.weixin.mp.bean.material.WxMediaImgUploadResult;
import me.chanjar.weixin.mp.util.http.MediaImgUploadRequestExecutor;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;
@@ -14,7 +16,8 @@ import java.io.IOException;
/**
* Created by ecoolper on 2017/5/5.
*/
public class OkhttpMediaImgUploadRequestExecutor extends MediaImgUploadRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkhttpMediaImgUploadRequestExecutor extends MediaImgUploadRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

public OkhttpMediaImgUploadRequestExecutor(RequestHttp requestHttp) {
super(requestHttp);
@@ -22,21 +25,9 @@ public class OkhttpMediaImgUploadRequestExecutor extends MediaImgUploadRequestEx

@Override
public WxMediaImgUploadResult execute(String uri, File file) throws WxErrorException, IOException {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
logger.debug("OkhttpMediaImgUploadRequestExecutor is running");
//得到httpClient
OkHttpClient client = requestHttp.getRequestHttpClient();

RequestBody body = new MultipartBody.Builder()
.setType(MediaType.parse("multipart/form-data"))
@@ -46,7 +37,7 @@ public class OkhttpMediaImgUploadRequestExecutor extends MediaImgUploadRequestEx
.build();

Request request = new Request.Builder().url(uri).post(body).build();
Response response = clientBuilder.build().newCall(request).execute();
Response response = client.newCall(request).execute();
String responseContent = response.body().string();
WxError error = WxError.fromJson(responseContent);
if (error.getErrorCode() != 0) {


+ 13
- 20
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpQrCodeRequestExecutor.java Переглянути файл

@@ -9,6 +9,10 @@ import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
import me.chanjar.weixin.mp.util.http.QrCodeRequestExecutor;

import okhttp3.*;
import okio.BufferedSink;
import okio.Okio;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.File;
@@ -19,31 +23,18 @@ import java.util.UUID;
/**
* Created by ecoolper on 2017/5/5.
*/
public class OkhttpQrCodeRequestExecutor extends QrCodeRequestExecutor<ConnectionPool, OkHttpProxyInfo> {
public class OkhttpQrCodeRequestExecutor extends QrCodeRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

public OkhttpQrCodeRequestExecutor(RequestHttp requestHttp) {
super(requestHttp);
}

@Override
public File execute(String uri, WxMpQrCodeTicket data) throws WxErrorException, IOException {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient());
//设置代理
if (requestHttp.getRequestHttpProxy() != null) {
clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy());
}
//设置授权
clientBuilder.authenticator(new Authenticator() {
@Override
public Request authenticate(Route route, Response response) throws IOException {
String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword());
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
});
logger.debug("OkhttpQrCodeRequestExecutor is running");
//得到httpClient
OkHttpClient client = clientBuilder.build();

OkHttpClient client = requestHttp.getRequestHttpClient();
Request request = new Request.Builder().url(uri).get().build();
Response response = client.newCall(request).execute();
String contentTypeHeader = response.header("Content-Type");
@@ -51,8 +42,10 @@ public class OkhttpQrCodeRequestExecutor extends QrCodeRequestExecutor<Connectio
String responseContent = response.body().string();
throw new WxErrorException(WxError.fromJson(responseContent));
}
try (InputStream inputStream = new ByteArrayInputStream(response.body().bytes())) {
return FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), "jpg");
File temp = File.createTempFile(UUID.randomUUID().toString(), ".png");
try (BufferedSink sink = Okio.buffer(Okio.sink(temp))) {
sink.writeAll(response.body().source());
}
return temp;
}
}

+ 6
- 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpBaseAPITest.java Переглянути файл

@@ -29,4 +29,10 @@ public class WxMpBaseAPITest {
Assert.assertTrue(StringUtils.isNotBlank(after));
}

public void testJsapiTicket() throws WxErrorException {
String jsapiTicket = this.wxService.getJsapiTicket(false);
System.out.println(jsapiTicket);
Assert.assertNotNull(jsapiTicket);
}

}

+ 1
- 5
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpJsAPITest.java Переглянути файл

@@ -20,11 +20,7 @@ public class WxMpJsAPITest {
protected WxMpService wxService;


public void testJsapiTicket() throws WxErrorException {
String jsapiTicket = this.wxService.getJsapiTicket(false);
System.out.println(jsapiTicket);
Assert.assertNotNull(jsapiTicket);
}


public void test() {
long timestamp = 1419835025l;


+ 2
- 1
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/test/ApiTestModule.java Переглянути файл

@@ -7,6 +7,7 @@ import me.chanjar.weixin.common.util.xml.XStreamInitializer;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceApacheHttpClientImpl;
import me.chanjar.weixin.mp.api.impl.WxMpServiceOkHttpImpl;

import java.io.IOException;
import java.io.InputStream;
@@ -19,7 +20,7 @@ public class ApiTestModule implements Module {
try (InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml")) {
TestConfigStorage config = this.fromXml(TestConfigStorage.class, is1);
config.setAccessTokenLock(new ReentrantLock());
WxMpService wxService = new WxMpServiceApacheHttpClientImpl();
WxMpService wxService = new WxMpServiceOkHttpImpl();
wxService.setWxMpConfigStorage(config);

binder.bind(WxMpService.class).toInstance(wxService);


Завантаження…
Відмінити
Зберегти