🎨 #2467 【微信支付】微信支付V3接口请求增加代理设置参数的支持

This commit is contained in:
无处不在2015 2021-12-27 15:53:14 +00:00 committed by Binary Wang
parent 7116fe5ae2
commit 1bda3eee15
2 changed files with 52 additions and 3 deletions

View File

@ -9,7 +9,13 @@ import lombok.*;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.ssl.SSLContexts; import org.apache.http.ssl.SSLContexts;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
@ -259,11 +265,15 @@ public class WxPayConfig {
new WxPayCredentials(mchId, new PrivateKeySigner(certSerialNo, merchantPrivateKey)), new WxPayCredentials(mchId, new PrivateKeySigner(certSerialNo, merchantPrivateKey)),
apiV3Key.getBytes(StandardCharsets.UTF_8), this.getCertAutoUpdateTime()); apiV3Key.getBytes(StandardCharsets.UTF_8), this.getCertAutoUpdateTime());
CloseableHttpClient httpClient = WxPayV3HttpClientBuilder.create() WxPayV3HttpClientBuilder wxPayV3HttpClientBuilder = WxPayV3HttpClientBuilder.create()
.withMerchant(mchId, certSerialNo, merchantPrivateKey) .withMerchant(mchId, certSerialNo, merchantPrivateKey)
.withWechatpay(Collections.singletonList(certificate)) .withWechatpay(Collections.singletonList(certificate))
.withValidator(new WxPayValidator(verifier)) .withValidator(new WxPayValidator(verifier));
.build(); //初始化V3接口正向代理设置
initHttpProxy(wxPayV3HttpClientBuilder);
CloseableHttpClient httpClient = wxPayV3HttpClientBuilder.build();
this.apiV3HttpClient = httpClient; this.apiV3HttpClient = httpClient;
this.verifier=verifier; this.verifier=verifier;
this.privateKey = merchantPrivateKey; this.privateKey = merchantPrivateKey;
@ -274,7 +284,25 @@ public class WxPayConfig {
} }
} }
/**
* 配置 http 正向代理
* 参考代码: WxPayServiceApacheHttpImpl 中的方法 createHttpClientBuilder
* @param httpClientBuilder http构造参数
*/
private void initHttpProxy(HttpClientBuilder httpClientBuilder) {
if (StringUtils.isNotBlank(this.getHttpProxyHost()) && this.getHttpProxyPort() > 0) {
if (StringUtils.isEmpty(this.getHttpProxyUsername())) {
this.setHttpProxyUsername("whatever");
}
// 使用代理服务器 需要用户认证的代理服务器
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(new AuthScope(this.getHttpProxyHost(), this.getHttpProxyPort()),
new UsernamePasswordCredentials(this.getHttpProxyUsername(), this.getHttpProxyPassword()));
httpClientBuilder.setDefaultCredentialsProvider(provider);
httpClientBuilder.setProxy(new HttpHost(this.getHttpProxyHost(), this.getHttpProxyPort()));
}
}
private InputStream loadConfigInputStream(String configPath, byte[] configContent, String fileName) throws WxPayException { private InputStream loadConfigInputStream(String configPath, byte[] configContent, String fileName) throws WxPayException {
InputStream inputStream; InputStream inputStream;

View File

@ -10,6 +10,7 @@ import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
import com.github.binarywang.wxpay.bean.request.*; import com.github.binarywang.wxpay.bean.request.*;
import com.github.binarywang.wxpay.bean.result.*; import com.github.binarywang.wxpay.bean.result.*;
import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum; import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.constant.WxPayConstants.AccountType; import com.github.binarywang.wxpay.constant.WxPayConstants.AccountType;
import com.github.binarywang.wxpay.constant.WxPayConstants.BillType; import com.github.binarywang.wxpay.constant.WxPayConstants.BillType;
import com.github.binarywang.wxpay.constant.WxPayConstants.SignType; import com.github.binarywang.wxpay.constant.WxPayConstants.SignType;
@ -775,4 +776,24 @@ public class BaseWxPayServiceImplTest {
System.out.println(GSON.toJson(result)); System.out.println(GSON.toJson(result));
} }
/**
* 测试包含正向代理的测试
* @throws WxPayException
*/
@Test
public void testQueryOrderV3WithProxy() {
try {
WxPayOrderQueryV3Request request = new WxPayOrderQueryV3Request();
request.setOutTradeNo("n1ZvYqjAg3D3LUBa");
WxPayConfig config = this.payService.getConfig();
config.setPayBaseUrl("http://api.mch.weixin.qq.com");
config.setHttpProxyHost("12.11.1.113");
config.setHttpProxyPort(8015);
WxPayOrderQueryV3Result result = this.payService.queryOrderV3(request);
System.out.println(GSON.toJson(result));
} catch (WxPayException e) {
}
}
} }