diff --git a/src/main/java/com/wechat/pay/contrib/apache/httpclient/WechatPayHttpClientBuilder.java b/src/main/java/com/wechat/pay/contrib/apache/httpclient/WechatPayHttpClientBuilder.java index 0c9ef9f..2fd3c21 100644 --- a/src/main/java/com/wechat/pay/contrib/apache/httpclient/WechatPayHttpClientBuilder.java +++ b/src/main/java/com/wechat/pay/contrib/apache/httpclient/WechatPayHttpClientBuilder.java @@ -10,6 +10,7 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.execchain.ClientExecChain; +import org.apache.http.HttpHost; /** * @author xy-peng @@ -21,6 +22,7 @@ public class WechatPayHttpClientBuilder extends HttpClientBuilder { private Credentials credentials; private Validator validator; + private WechatPayHttpClientBuilder() { super(); @@ -51,6 +53,13 @@ public WechatPayHttpClientBuilder withWechatPay(List certificat return this; } + public WechatPayHttpClientBuilder withProxy(HttpHost proxy) { + if (proxy != null) { + this.setProxy(proxy); + } + return this; + } + /** * Please use {@link #withWechatPay(List)} instead * diff --git a/src/main/java/com/wechat/pay/contrib/apache/httpclient/cert/CertificatesManager.java b/src/main/java/com/wechat/pay/contrib/apache/httpclient/cert/CertificatesManager.java index 3c8cac1..4b69897 100644 --- a/src/main/java/com/wechat/pay/contrib/apache/httpclient/cert/CertificatesManager.java +++ b/src/main/java/com/wechat/pay/contrib/apache/httpclient/cert/CertificatesManager.java @@ -32,6 +32,7 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.util.EntityUtils; +import org.apache.http.HttpHost; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,6 +54,8 @@ public class CertificatesManager { private volatile static CertificatesManager instance = null; private ConcurrentHashMap apiV3Keys = new ConcurrentHashMap<>(); + private HttpHost proxy; + private ConcurrentHashMap> certificates = new ConcurrentHashMap<>(); private ConcurrentHashMap credentialsMap = new ConcurrentHashMap<>(); @@ -158,6 +161,15 @@ public synchronized void putMerchant(String merchantId, Credentials credentials, } } + /*** + * 代理配置 + * + * @param proxy 代理host + **/ + public synchronized void setProxy(HttpHost proxy) { + this.proxy = proxy; + } + /** * 停止自动更新平台证书,停止后无法再重新启动 */ @@ -257,6 +269,7 @@ private synchronized void downloadAndUpdateCert(String merchantId, Verifier veri .withCredentials(credentials) .withValidator(verifier == null ? (response) -> true : new WechatPay2Validator(verifier)) + .withProxy(proxy) .build()) { HttpGet httpGet = new HttpGet(CERT_DOWNLOAD_PATH); httpGet.addHeader(ACCEPT, APPLICATION_JSON.toString()); diff --git a/src/test/java/com/wechat/pay/contrib/apache/httpclient/CertificatesManagerTest.java b/src/test/java/com/wechat/pay/contrib/apache/httpclient/CertificatesManagerTest.java index ee32788..3db8659 100644 --- a/src/test/java/com/wechat/pay/contrib/apache/httpclient/CertificatesManagerTest.java +++ b/src/test/java/com/wechat/pay/contrib/apache/httpclient/CertificatesManagerTest.java @@ -25,6 +25,7 @@ import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.util.EntityUtils; +import org.apache.http.HttpHost; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -41,11 +42,15 @@ public class CertificatesManagerTest { CertificatesManager certificatesManager; Verifier verifier; + private static final HttpHost proxy = null; + @Before public void setup() throws Exception { PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(privateKey); // 获取证书管理器实例 certificatesManager = CertificatesManager.getInstance(); + // 添加代理服务器 + certificatesManager.setProxy(proxy); // 向证书管理器增加需要自动更新平台证书的商户信息 certificatesManager.putMerchant(merchantId, new WechatPay2Credentials(merchantId, new PrivateKeySigner(merchantSerialNumber, merchantPrivateKey)), diff --git a/src/test/java/com/wechat/pay/contrib/apache/httpclient/HttpClientBuilderTest.java b/src/test/java/com/wechat/pay/contrib/apache/httpclient/HttpClientBuilderTest.java index 67e017a..4de249e 100644 --- a/src/test/java/com/wechat/pay/contrib/apache/httpclient/HttpClientBuilderTest.java +++ b/src/test/java/com/wechat/pay/contrib/apache/httpclient/HttpClientBuilderTest.java @@ -25,6 +25,7 @@ import org.apache.http.entity.InputStreamEntity; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.HttpHost; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -47,6 +48,8 @@ public class HttpClientBuilderTest { + "-----END CERTIFICATE-----"; private CloseableHttpClient httpClient; + private static final HttpHost proxy = null; + @Before public void setup() { PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(privateKey); @@ -59,6 +62,7 @@ public void setup() { httpClient = WechatPayHttpClientBuilder.create() .withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey) .withWechatPay(wechatPayCertificates) + .withProxy(proxy) .build(); }