mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-05-04 20:57:47 +08:00
🎨 优化代码,抽取方法,减少重复代码
This commit is contained in:
parent
06c8ae81d2
commit
ebc8f0e346
@ -3,8 +3,9 @@ package me.chanjar.weixin.common.util.http;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import me.chanjar.weixin.common.WxType;
|
import me.chanjar.weixin.common.WxType;
|
||||||
|
import me.chanjar.weixin.common.error.WxError;
|
||||||
import me.chanjar.weixin.common.error.WxErrorException;
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientSimpleGetRequestExecutor;
|
import me.chanjar.weixin.common.util.http.apache.ApacheSimpleGetRequestExecutor;
|
||||||
import me.chanjar.weixin.common.util.http.jodd.JoddHttpSimpleGetRequestExecutor;
|
import me.chanjar.weixin.common.util.http.jodd.JoddHttpSimpleGetRequestExecutor;
|
||||||
import me.chanjar.weixin.common.util.http.okhttp.OkHttpSimpleGetRequestExecutor;
|
import me.chanjar.weixin.common.util.http.okhttp.OkHttpSimpleGetRequestExecutor;
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ public abstract class SimpleGetRequestExecutor<H, P> implements RequestExecutor<
|
|||||||
public static RequestExecutor<String, String> create(RequestHttp requestHttp) {
|
public static RequestExecutor<String, String> create(RequestHttp requestHttp) {
|
||||||
switch (requestHttp.getRequestType()) {
|
switch (requestHttp.getRequestType()) {
|
||||||
case APACHE_HTTP:
|
case APACHE_HTTP:
|
||||||
return new ApacheHttpClientSimpleGetRequestExecutor(requestHttp);
|
return new ApacheSimpleGetRequestExecutor(requestHttp);
|
||||||
case JODD_HTTP:
|
case JODD_HTTP:
|
||||||
return new JoddHttpSimpleGetRequestExecutor(requestHttp);
|
return new JoddHttpSimpleGetRequestExecutor(requestHttp);
|
||||||
case OK_HTTP:
|
case OK_HTTP:
|
||||||
@ -39,4 +40,12 @@ public abstract class SimpleGetRequestExecutor<H, P> implements RequestExecutor<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String handleResponse(WxType wxType, String responseContent) throws WxErrorException {
|
||||||
|
WxError error = WxError.fromJson(responseContent, wxType);
|
||||||
|
if (error.getErrorCode() != 0) {
|
||||||
|
throw new WxErrorException(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return responseContent;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package me.chanjar.weixin.common.util.http;
|
package me.chanjar.weixin.common.util.http;
|
||||||
|
|
||||||
import me.chanjar.weixin.common.WxType;
|
import me.chanjar.weixin.common.WxType;
|
||||||
|
import me.chanjar.weixin.common.error.WxError;
|
||||||
import me.chanjar.weixin.common.error.WxErrorException;
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
import me.chanjar.weixin.common.util.http.apache.ApacheSimplePostRequestExecutor;
|
import me.chanjar.weixin.common.util.http.apache.ApacheSimplePostRequestExecutor;
|
||||||
import me.chanjar.weixin.common.util.http.jodd.JoddHttpSimplePostRequestExecutor;
|
import me.chanjar.weixin.common.util.http.jodd.JoddHttpSimplePostRequestExecutor;
|
||||||
import me.chanjar.weixin.common.util.http.okhttp.OkHttpSimplePostRequestExecutor;
|
import me.chanjar.weixin.common.util.http.okhttp.OkHttpSimplePostRequestExecutor;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@ -39,4 +41,21 @@ public abstract class SimplePostRequestExecutor<H, P> implements RequestExecutor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public String handleResponse(WxType wxType, String responseContent) throws WxErrorException {
|
||||||
|
if (responseContent.isEmpty()) {
|
||||||
|
throw new WxErrorException(WxError.builder().errorCode(9999).errorMsg("无响应内容").build());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseContent.startsWith("<xml>")) {
|
||||||
|
//xml格式输出直接返回
|
||||||
|
return responseContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
WxError error = WxError.fromJson(responseContent, wxType);
|
||||||
|
if (error.getErrorCode() != 0) {
|
||||||
|
throw new WxErrorException(error);
|
||||||
|
}
|
||||||
|
return responseContent;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,8 +19,8 @@ import java.io.IOException;
|
|||||||
* @author ecoolper
|
* @author ecoolper
|
||||||
* @date 2017/5/4
|
* @date 2017/5/4
|
||||||
*/
|
*/
|
||||||
public class ApacheHttpClientSimpleGetRequestExecutor extends SimpleGetRequestExecutor<CloseableHttpClient, HttpHost> {
|
public class ApacheSimpleGetRequestExecutor extends SimpleGetRequestExecutor<CloseableHttpClient, HttpHost> {
|
||||||
public ApacheHttpClientSimpleGetRequestExecutor(RequestHttp requestHttp) {
|
public ApacheSimpleGetRequestExecutor(RequestHttp requestHttp) {
|
||||||
super(requestHttp);
|
super(requestHttp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,11 +40,7 @@ public class ApacheHttpClientSimpleGetRequestExecutor extends SimpleGetRequestEx
|
|||||||
|
|
||||||
try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpGet)) {
|
try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpGet)) {
|
||||||
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
|
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
|
||||||
WxError error = WxError.fromJson(responseContent, wxType);
|
return handleResponse(wxType, responseContent);
|
||||||
if (error.getErrorCode() != 0) {
|
|
||||||
throw new WxErrorException(error);
|
|
||||||
}
|
|
||||||
return responseContent;
|
|
||||||
} finally {
|
} finally {
|
||||||
httpGet.releaseConnection();
|
httpGet.releaseConnection();
|
||||||
}
|
}
|
@ -12,6 +12,7 @@ import org.apache.http.client.methods.CloseableHttpResponse;
|
|||||||
import org.apache.http.client.methods.HttpPost;
|
import org.apache.http.client.methods.HttpPost;
|
||||||
import org.apache.http.entity.StringEntity;
|
import org.apache.http.entity.StringEntity;
|
||||||
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@ -42,22 +43,10 @@ public class ApacheSimplePostRequestExecutor extends SimplePostRequestExecutor<C
|
|||||||
|
|
||||||
try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) {
|
try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) {
|
||||||
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
|
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
|
||||||
if (responseContent.isEmpty()) {
|
return this.handleResponse(wxType, responseContent);
|
||||||
throw new WxErrorException(WxError.builder().errorCode(9999).errorMsg("无响应内容").build());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (responseContent.startsWith("<xml>")) {
|
|
||||||
//xml格式输出直接返回
|
|
||||||
return responseContent;
|
|
||||||
}
|
|
||||||
|
|
||||||
WxError error = WxError.fromJson(responseContent, wxType);
|
|
||||||
if (error.getErrorCode() != 0) {
|
|
||||||
throw new WxErrorException(error);
|
|
||||||
}
|
|
||||||
return responseContent;
|
|
||||||
} finally {
|
} finally {
|
||||||
httpPost.releaseConnection();
|
httpPost.releaseConnection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package me.chanjar.weixin.common.util.http.apache;
|
package me.chanjar.weixin.common.util.http.apache;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.HttpHost;
|
import org.apache.http.HttpHost;
|
||||||
import org.apache.http.annotation.NotThreadSafe;
|
import org.apache.http.annotation.NotThreadSafe;
|
||||||
@ -23,8 +25,6 @@ import org.apache.http.impl.client.HttpClients;
|
|||||||
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||||
import org.apache.http.protocol.HttpContext;
|
import org.apache.http.protocol.HttpContext;
|
||||||
import org.apache.http.ssl.SSLContexts;
|
import org.apache.http.ssl.SSLContexts;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -41,26 +41,65 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
*
|
*
|
||||||
* @author kakotor
|
* @author kakotor
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Data
|
||||||
@NotThreadSafe
|
@NotThreadSafe
|
||||||
public class DefaultApacheHttpClientBuilder implements ApacheHttpClientBuilder {
|
public class DefaultApacheHttpClientBuilder implements ApacheHttpClientBuilder {
|
||||||
protected final Logger log = LoggerFactory.getLogger(DefaultApacheHttpClientBuilder.class);
|
|
||||||
private final AtomicBoolean prepared = new AtomicBoolean(false);
|
private final AtomicBoolean prepared = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取链接的超时时间设置
|
||||||
|
* <p>
|
||||||
|
* 设置为零时不超时,一直等待.
|
||||||
|
* 设置为负数是使用系统默认设置(非3000ms的默认值,而是httpClient的默认设置).
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
private int connectionRequestTimeout = -1;
|
private int connectionRequestTimeout = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 建立链接的超时时间,默认为5000ms.由于是在链接池获取链接,此设置应该并不起什么作用
|
||||||
|
* <p>
|
||||||
|
* 设置为零时不超时,一直等待.
|
||||||
|
* 设置为负数是使用系统默认设置(非上述的5000ms的默认值,而是httpclient的默认设置).
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
private int connectionTimeout = 5000;
|
private int connectionTimeout = 5000;
|
||||||
|
/**
|
||||||
|
* 默认NIO的socket超时设置,默认5000ms.
|
||||||
|
*/
|
||||||
private int soTimeout = 5000;
|
private int soTimeout = 5000;
|
||||||
|
/**
|
||||||
|
* 空闲链接的超时时间,默认60000ms.
|
||||||
|
* <p>
|
||||||
|
* 超时的链接将在下一次空闲链接检查是被销毁
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
private int idleConnTimeout = 60000;
|
private int idleConnTimeout = 60000;
|
||||||
|
/**
|
||||||
|
* 检查空间链接的间隔周期,默认60000ms.
|
||||||
|
*/
|
||||||
private int checkWaitTime = 60000;
|
private int checkWaitTime = 60000;
|
||||||
|
/**
|
||||||
|
* 每路的最大链接数,默认10
|
||||||
|
*/
|
||||||
private int maxConnPerHost = 10;
|
private int maxConnPerHost = 10;
|
||||||
|
/**
|
||||||
|
* 最大总连接数,默认50
|
||||||
|
*/
|
||||||
private int maxTotalConn = 50;
|
private int maxTotalConn = 50;
|
||||||
|
/**
|
||||||
|
* 自定义httpclient的User Agent
|
||||||
|
*/
|
||||||
private String userAgent;
|
private String userAgent;
|
||||||
private HttpRequestRetryHandler httpRequestRetryHandler = new HttpRequestRetryHandler() {
|
|
||||||
|
private final HttpRequestRetryHandler httpRequestRetryHandler = new HttpRequestRetryHandler() {
|
||||||
@Override
|
@Override
|
||||||
public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
|
public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory();
|
private SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory();
|
||||||
private PlainConnectionSocketFactory plainConnectionSocketFactory = PlainConnectionSocketFactory.getSocketFactory();
|
private final PlainConnectionSocketFactory plainConnectionSocketFactory = PlainConnectionSocketFactory.getSocketFactory();
|
||||||
private String httpProxyHost;
|
private String httpProxyHost;
|
||||||
private int httpProxyPort;
|
private int httpProxyPort;
|
||||||
private String httpProxyUsername;
|
private String httpProxyUsername;
|
||||||
@ -111,90 +150,6 @@ public class DefaultApacheHttpClientBuilder implements ApacheHttpClientBuilder {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取链接的超时时间设置,默认3000ms
|
|
||||||
* <p>
|
|
||||||
* 设置为零时不超时,一直等待.
|
|
||||||
* 设置为负数是使用系统默认设置(非上述的3000ms的默认值,而是httpclient的默认设置).
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param connectionRequestTimeout 获取链接的超时时间设置(单位毫秒),默认3000ms
|
|
||||||
*/
|
|
||||||
public void setConnectionRequestTimeout(int connectionRequestTimeout) {
|
|
||||||
this.connectionRequestTimeout = connectionRequestTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 建立链接的超时时间,默认为5000ms.由于是在链接池获取链接,此设置应该并不起什么作用
|
|
||||||
* <p>
|
|
||||||
* 设置为零时不超时,一直等待.
|
|
||||||
* 设置为负数是使用系统默认设置(非上述的5000ms的默认值,而是httpclient的默认设置).
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param connectionTimeout 建立链接的超时时间设置(单位毫秒),默认5000ms
|
|
||||||
*/
|
|
||||||
public void setConnectionTimeout(int connectionTimeout) {
|
|
||||||
this.connectionTimeout = connectionTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 默认NIO的socket超时设置,默认5000ms.
|
|
||||||
*
|
|
||||||
* @param soTimeout 默认NIO的socket超时设置,默认5000ms.
|
|
||||||
* @see java.net.SocketOptions#SO_TIMEOUT
|
|
||||||
*/
|
|
||||||
public void setSoTimeout(int soTimeout) {
|
|
||||||
this.soTimeout = soTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 空闲链接的超时时间,默认60000ms.
|
|
||||||
* <p>
|
|
||||||
* 超时的链接将在下一次空闲链接检查是被销毁
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param idleConnTimeout 空闲链接的超时时间,默认60000ms.
|
|
||||||
*/
|
|
||||||
public void setIdleConnTimeout(int idleConnTimeout) {
|
|
||||||
this.idleConnTimeout = idleConnTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 检查空间链接的间隔周期,默认60000ms.
|
|
||||||
*
|
|
||||||
* @param checkWaitTime 检查空间链接的间隔周期,默认60000ms.
|
|
||||||
*/
|
|
||||||
public void setCheckWaitTime(int checkWaitTime) {
|
|
||||||
this.checkWaitTime = checkWaitTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 每路的最大链接数,默认10
|
|
||||||
*
|
|
||||||
* @param maxConnPerHost 每路的最大链接数,默认10
|
|
||||||
*/
|
|
||||||
public void setMaxConnPerHost(int maxConnPerHost) {
|
|
||||||
this.maxConnPerHost = maxConnPerHost;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 最大总连接数,默认50
|
|
||||||
*
|
|
||||||
* @param maxTotalConn 最大总连接数,默认50
|
|
||||||
*/
|
|
||||||
public void setMaxTotalConn(int maxTotalConn) {
|
|
||||||
this.maxTotalConn = maxTotalConn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 自定义httpclient的User Agent
|
|
||||||
*
|
|
||||||
* @param userAgent User Agent
|
|
||||||
*/
|
|
||||||
public void setUserAgent(String userAgent) {
|
|
||||||
this.userAgent = userAgent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IdleConnectionMonitorThread getIdleConnectionMonitorThread() {
|
public IdleConnectionMonitorThread getIdleConnectionMonitorThread() {
|
||||||
return this.idleConnectionMonitorThread;
|
return this.idleConnectionMonitorThread;
|
||||||
}
|
}
|
||||||
@ -268,7 +223,7 @@ public class DefaultApacheHttpClientBuilder implements ApacheHttpClientBuilder {
|
|||||||
null,
|
null,
|
||||||
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
|
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
|
||||||
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
|
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
|
||||||
this.log.error(e.getMessage(), e);
|
log.error("构建SSL连接工厂时发生异常!", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -41,13 +41,7 @@ public class JoddHttpSimpleGetRequestExecutor extends SimpleGetRequestExecutor<H
|
|||||||
HttpResponse response = request.send();
|
HttpResponse response = request.send();
|
||||||
response.charset(StringPool.UTF_8);
|
response.charset(StringPool.UTF_8);
|
||||||
|
|
||||||
String responseContent = response.bodyText();
|
return handleResponse(wxType, response.bodyText());
|
||||||
|
|
||||||
WxError error = WxError.fromJson(responseContent, wxType);
|
|
||||||
if (error.getErrorCode() != 0) {
|
|
||||||
throw new WxErrorException(error);
|
|
||||||
}
|
|
||||||
return responseContent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import jodd.http.HttpResponse;
|
|||||||
import jodd.http.ProxyInfo;
|
import jodd.http.ProxyInfo;
|
||||||
import jodd.util.StringPool;
|
import jodd.util.StringPool;
|
||||||
import me.chanjar.weixin.common.WxType;
|
import me.chanjar.weixin.common.WxType;
|
||||||
import me.chanjar.weixin.common.error.WxError;
|
|
||||||
import me.chanjar.weixin.common.error.WxErrorException;
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
import me.chanjar.weixin.common.util.http.RequestHttp;
|
import me.chanjar.weixin.common.util.http.RequestHttp;
|
||||||
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
|
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
|
||||||
@ -40,21 +39,7 @@ public class JoddHttpSimplePostRequestExecutor extends SimplePostRequestExecutor
|
|||||||
HttpResponse response = request.send();
|
HttpResponse response = request.send();
|
||||||
response.charset(StringPool.UTF_8);
|
response.charset(StringPool.UTF_8);
|
||||||
|
|
||||||
String responseContent = response.bodyText();
|
return this.handleResponse(wxType, response.bodyText());
|
||||||
if (responseContent.isEmpty()) {
|
|
||||||
throw new WxErrorException(WxError.builder().errorCode(9999).errorMsg("无响应内容").build());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (responseContent.startsWith("<xml>")) {
|
|
||||||
//xml格式输出直接返回
|
|
||||||
return responseContent;
|
|
||||||
}
|
|
||||||
|
|
||||||
WxError error = WxError.fromJson(responseContent, wxType);
|
|
||||||
if (error.getErrorCode() != 0) {
|
|
||||||
throw new WxErrorException(error);
|
|
||||||
}
|
|
||||||
return responseContent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,12 +35,7 @@ public class OkHttpSimpleGetRequestExecutor extends SimpleGetRequestExecutor<OkH
|
|||||||
OkHttpClient client = requestHttp.getRequestHttpClient();
|
OkHttpClient client = requestHttp.getRequestHttpClient();
|
||||||
Request request = new Request.Builder().url(uri).build();
|
Request request = new Request.Builder().url(uri).build();
|
||||||
Response response = client.newCall(request).execute();
|
Response response = client.newCall(request).execute();
|
||||||
String responseContent = response.body().string();
|
return this.handleResponse(wxType, response.body().string());
|
||||||
WxError error = WxError.fromJson(responseContent, wxType);
|
|
||||||
if (error.getErrorCode() != 0) {
|
|
||||||
throw new WxErrorException(error);
|
|
||||||
}
|
|
||||||
return responseContent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,13 @@ package me.chanjar.weixin.common.util.http.okhttp;
|
|||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import me.chanjar.weixin.common.WxType;
|
import me.chanjar.weixin.common.WxType;
|
||||||
import me.chanjar.weixin.common.error.WxError;
|
|
||||||
import me.chanjar.weixin.common.error.WxErrorException;
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||||||
import me.chanjar.weixin.common.util.http.RequestHttp;
|
import me.chanjar.weixin.common.util.http.RequestHttp;
|
||||||
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
|
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
|
||||||
import okhttp3.*;
|
import okhttp3.*;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* .
|
* .
|
||||||
@ -24,16 +24,10 @@ public class OkHttpSimplePostRequestExecutor extends SimplePostRequestExecutor<O
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String execute(String uri, String postEntity, WxType wxType) throws WxErrorException, IOException {
|
public String execute(String uri, String postEntity, WxType wxType) throws WxErrorException, IOException {
|
||||||
RequestBody body = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"), postEntity);
|
RequestBody body = RequestBody.Companion.create(postEntity, MediaType.parse("text/plain; charset=utf-8"));
|
||||||
Request request = new Request.Builder().url(uri).post(body).build();
|
Request request = new Request.Builder().url(uri).post(body).build();
|
||||||
Response response = requestHttp.getRequestHttpClient().newCall(request).execute();
|
Response response = requestHttp.getRequestHttpClient().newCall(request).execute();
|
||||||
String responseContent = response.body().string();
|
return this.handleResponse(wxType, Objects.requireNonNull(response.body()).string());
|
||||||
WxError error = WxError.fromJson(responseContent, wxType);
|
|
||||||
if (error.getErrorCode() != 0) {
|
|
||||||
throw new WxErrorException(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
return responseContent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import lombok.Getter;
|
|||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import me.chanjar.weixin.common.WxType;
|
import me.chanjar.weixin.common.WxType;
|
||||||
|
import me.chanjar.weixin.common.bean.WxAccessToken;
|
||||||
import me.chanjar.weixin.common.bean.WxJsapiSignature;
|
import me.chanjar.weixin.common.bean.WxJsapiSignature;
|
||||||
import me.chanjar.weixin.common.bean.WxNetCheckResult;
|
import me.chanjar.weixin.common.bean.WxNetCheckResult;
|
||||||
import me.chanjar.weixin.common.enums.TicketType;
|
import me.chanjar.weixin.common.enums.TicketType;
|
||||||
@ -400,6 +401,17 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH
|
|||||||
return this.configStorageMap.get(WxMpConfigStorageHolder.get());
|
return this.configStorageMap.get(WxMpConfigStorageHolder.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String extractAccessToken(String resultContent) throws WxErrorException {
|
||||||
|
WxMpConfigStorage config = this.getWxMpConfigStorage();
|
||||||
|
WxError error = WxError.fromJson(resultContent, WxType.MP);
|
||||||
|
if (error.getErrorCode() != 0) {
|
||||||
|
throw new WxErrorException(error);
|
||||||
|
}
|
||||||
|
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent);
|
||||||
|
config.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
|
||||||
|
return config.getAccessToken();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setWxMpConfigStorage(WxMpConfigStorage wxConfigProvider) {
|
public void setWxMpConfigStorage(WxMpConfigStorage wxConfigProvider) {
|
||||||
final String defaultMpId = WxMpConfigStorageHolder.get();
|
final String defaultMpId = WxMpConfigStorageHolder.get();
|
||||||
|
@ -85,14 +85,7 @@ public class WxMpServiceHttpClientImpl extends BaseWxMpServiceImpl<CloseableHttp
|
|||||||
httpGet.setConfig(requestConfig);
|
httpGet.setConfig(requestConfig);
|
||||||
}
|
}
|
||||||
try (CloseableHttpResponse response = getRequestHttpClient().execute(httpGet)) {
|
try (CloseableHttpResponse response = getRequestHttpClient().execute(httpGet)) {
|
||||||
String resultContent = new BasicResponseHandler().handleResponse(response);
|
return this.extractAccessToken(new BasicResponseHandler().handleResponse(response));
|
||||||
WxError error = WxError.fromJson(resultContent, WxType.MP);
|
|
||||||
if (error.getErrorCode() != 0) {
|
|
||||||
throw new WxErrorException(error);
|
|
||||||
}
|
|
||||||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent);
|
|
||||||
config.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
|
|
||||||
return config.getAccessToken();
|
|
||||||
} finally {
|
} finally {
|
||||||
httpGet.releaseConnection();
|
httpGet.releaseConnection();
|
||||||
}
|
}
|
||||||
@ -103,4 +96,5 @@ public class WxMpServiceHttpClientImpl extends BaseWxMpServiceImpl<CloseableHttp
|
|||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -65,23 +65,14 @@ public class WxMpServiceJoddHttpImpl extends BaseWxMpServiceImpl<HttpConnectionP
|
|||||||
String url = String.format(GET_ACCESS_TOKEN_URL.getUrl(config), config.getAppId(), config.getSecret());
|
String url = String.format(GET_ACCESS_TOKEN_URL.getUrl(config), config.getAppId(), config.getSecret());
|
||||||
|
|
||||||
HttpRequest request = HttpRequest.get(url);
|
HttpRequest request = HttpRequest.get(url);
|
||||||
|
|
||||||
if (this.getRequestHttpProxy() != null) {
|
if (this.getRequestHttpProxy() != null) {
|
||||||
SocketHttpConnectionProvider provider = new SocketHttpConnectionProvider();
|
SocketHttpConnectionProvider provider = new SocketHttpConnectionProvider();
|
||||||
provider.useProxy(getRequestHttpProxy());
|
provider.useProxy(getRequestHttpProxy());
|
||||||
|
|
||||||
request.withConnectionProvider(provider);
|
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);
|
|
||||||
config.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
|
|
||||||
|
|
||||||
return config.getAccessToken();
|
return this.extractAccessToken(request.send().bodyText());
|
||||||
} finally {
|
} finally {
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import me.chanjar.weixin.mp.config.WxMpConfigStorage;
|
|||||||
import okhttp3.*;
|
import okhttp3.*;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.Lock;
|
||||||
|
|
||||||
import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Other.GET_ACCESS_TOKEN_URL;
|
import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Other.GET_ACCESS_TOKEN_URL;
|
||||||
@ -55,15 +56,7 @@ public class WxMpServiceOkHttpImpl extends BaseWxMpServiceImpl<OkHttpClient, OkH
|
|||||||
|
|
||||||
Request request = new Request.Builder().url(url).get().build();
|
Request request = new Request.Builder().url(url).get().build();
|
||||||
Response response = getRequestHttpClient().newCall(request).execute();
|
Response response = getRequestHttpClient().newCall(request).execute();
|
||||||
String resultContent = response.body().string();
|
return this.extractAccessToken(Objects.requireNonNull(response.body()).string());
|
||||||
WxError error = WxError.fromJson(resultContent, WxType.MP);
|
|
||||||
if (error.getErrorCode() != 0) {
|
|
||||||
throw new WxErrorException(error);
|
|
||||||
}
|
|
||||||
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent);
|
|
||||||
config.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
|
|
||||||
|
|
||||||
return config.getAccessToken();
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
Loading…
Reference in New Issue
Block a user