ソースを参照

优化简化微信支付请求代码

master
Binary Wang 8年前
コミット
c3cb050a8a
1個のファイルの変更30行の追加45行の削除
  1. +30
    -45
      weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java

+ 30
- 45
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java ファイルの表示

@@ -57,7 +57,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/secapi/pay/refund"; String url = this.getPayBaseUrl() + "/secapi/pay/refund";
String responseContent = this.postWithKey(url, request.toXML());
String responseContent = this.post(url, request.toXML(), true);
WxPayRefundResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundResult.class); WxPayRefundResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundResult.class);
result.checkResult(this); result.checkResult(this);
return result; return result;
@@ -75,7 +75,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/pay/refundquery"; String url = this.getPayBaseUrl() + "/pay/refundquery";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
WxPayRefundQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundQueryResult.class); WxPayRefundQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundQueryResult.class);
result.composeRefundRecords(); result.composeRefundRecords();
result.checkResult(this); result.checkResult(this);
@@ -109,7 +109,7 @@ public class WxPayServiceImpl implements WxPayService {
url = this.getPayBaseUrl() + "/mmpaymkttransfers/sendgroupredpack"; url = this.getPayBaseUrl() + "/mmpaymkttransfers/sendgroupredpack";
} }


String responseContent = this.postWithKey(url, request.toXML());
String responseContent = this.post(url, request.toXML(), true);
WxPaySendRedpackResult result = WxPayBaseResult.fromXML(responseContent, WxPaySendRedpackResult.class); WxPaySendRedpackResult result = WxPayBaseResult.fromXML(responseContent, WxPaySendRedpackResult.class);
//毋须校验,因为没有返回签名信息 //毋须校验,因为没有返回签名信息
// this.checkResult(result); // this.checkResult(result);
@@ -124,7 +124,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/mmpaymkttransfers/gethbinfo"; String url = this.getPayBaseUrl() + "/mmpaymkttransfers/gethbinfo";
String responseContent = this.postWithKey(url, request.toXML());
String responseContent = this.post(url, request.toXML(), true);
WxPayRedpackQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRedpackQueryResult.class); WxPayRedpackQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRedpackQueryResult.class);
result.checkResult(this); result.checkResult(this);
return result; return result;
@@ -138,7 +138,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/pay/orderquery"; String url = this.getPayBaseUrl() + "/pay/orderquery";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
if (StringUtils.isBlank(responseContent)) { if (StringUtils.isBlank(responseContent)) {
throw new WxPayException("无响应结果"); throw new WxPayException("无响应结果");
} }
@@ -160,7 +160,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/pay/closeorder"; String url = this.getPayBaseUrl() + "/pay/closeorder";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
WxPayOrderCloseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderCloseResult.class); WxPayOrderCloseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderCloseResult.class);
result.checkResult(this); result.checkResult(this);


@@ -172,7 +172,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/pay/unifiedorder"; String url = this.getPayBaseUrl() + "/pay/unifiedorder";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
WxPayUnifiedOrderResult result = WxPayBaseResult.fromXML(responseContent, WxPayUnifiedOrderResult.class); WxPayUnifiedOrderResult result = WxPayBaseResult.fromXML(responseContent, WxPayUnifiedOrderResult.class);
result.checkResult(this); result.checkResult(this);
return result; return result;
@@ -227,7 +227,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());
String url = this.getPayBaseUrl() + "/mmpaymkttransfers/promotion/transfers"; String url = this.getPayBaseUrl() + "/mmpaymkttransfers/promotion/transfers";


String responseContent = this.postWithKey(url, request.toXML());
String responseContent = this.post(url, request.toXML(), true);
WxEntPayResult result = WxPayBaseResult.fromXML(responseContent, WxEntPayResult.class); WxEntPayResult result = WxPayBaseResult.fromXML(responseContent, WxEntPayResult.class);
result.checkResult(this); result.checkResult(this);
return result; return result;
@@ -240,7 +240,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/mmpaymkttransfers/gettransferinfo"; String url = this.getPayBaseUrl() + "/mmpaymkttransfers/gettransferinfo";
String responseContent = this.postWithKey(url, request.toXML());
String responseContent = this.post(url, request.toXML(), true);
WxEntPayQueryResult result = WxPayBaseResult.fromXML(responseContent, WxEntPayQueryResult.class); WxEntPayQueryResult result = WxPayBaseResult.fromXML(responseContent, WxEntPayQueryResult.class);
result.checkResult(this); result.checkResult(this);
return result; return result;
@@ -293,7 +293,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/payitil/report"; String url = this.getPayBaseUrl() + "/payitil/report";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class); WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class);
result.checkResult(this); result.checkResult(this);
} }
@@ -309,7 +309,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/pay/downloadbill"; String url = this.getPayBaseUrl() + "/pay/downloadbill";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
if (responseContent.startsWith("<")) { if (responseContent.startsWith("<")) {
WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class); WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class);
result.checkResult(this); result.checkResult(this);
@@ -396,7 +396,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/pay/micropay"; String url = this.getPayBaseUrl() + "/pay/micropay";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
WxPayMicropayResult result = WxPayBaseResult.fromXML(responseContent, WxPayMicropayResult.class); WxPayMicropayResult result = WxPayBaseResult.fromXML(responseContent, WxPayMicropayResult.class);
result.checkResult(this); result.checkResult(this);
return result; return result;
@@ -407,7 +407,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/secapi/pay/reverse"; String url = this.getPayBaseUrl() + "/secapi/pay/reverse";
String responseContent = this.postWithKey(url, request.toXML());
String responseContent = this.post(url, request.toXML(), true);
WxPayOrderReverseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderReverseResult.class); WxPayOrderReverseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderReverseResult.class);
result.checkResult(this); result.checkResult(this);
return result; return result;
@@ -418,7 +418,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/tools/shorturl"; String url = this.getPayBaseUrl() + "/tools/shorturl";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
WxPayShorturlResult result = WxPayBaseResult.fromXML(responseContent, WxPayShorturlResult.class); WxPayShorturlResult result = WxPayBaseResult.fromXML(responseContent, WxPayShorturlResult.class);
result.checkResult(this); result.checkResult(this);
return result.getShortUrl(); return result.getShortUrl();
@@ -434,7 +434,7 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = this.getPayBaseUrl() + "/tools/authcodetoopenid"; String url = this.getPayBaseUrl() + "/tools/authcodetoopenid";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
WxPayAuthcode2OpenidResult result = WxPayBaseResult.fromXML(responseContent, WxPayAuthcode2OpenidResult.class); WxPayAuthcode2OpenidResult result = WxPayBaseResult.fromXML(responseContent, WxPayAuthcode2OpenidResult.class);
result.checkResult(this); result.checkResult(this);
return result.getOpenid(); return result.getOpenid();
@@ -451,57 +451,42 @@ public class WxPayServiceImpl implements WxPayService {
request.checkAndSign(this.getConfig()); request.checkAndSign(this.getConfig());


String url = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey"; String url = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey";
String responseContent = this.post(url, request.toXML());
String responseContent = this.post(url, request.toXML(), false);
WxPaySandboxSignKeyResult result = WxPayBaseResult.fromXML(responseContent, WxPaySandboxSignKeyResult.class); WxPaySandboxSignKeyResult result = WxPayBaseResult.fromXML(responseContent, WxPaySandboxSignKeyResult.class);
result.checkResult(this); result.checkResult(this);
return result.getSandboxSignKey(); return result.getSandboxSignKey();
} }


/** /**
* 执行post请求
*
* @param url 请求地址
* @param xmlParam 请求字符串
* @return 返回请求结果
*/
private String post(String url, String xmlParam) throws WxPayException {
HttpRequest request = HttpRequest
.post(url)
.timeout(this.config.getHttpTimeout())
.connectionTimeout(this.config.getHttpConnectionTimeout())
.body(new String(xmlParam.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
String responseString = this.getResponseString(request.send());

this.log.info("\n【请求地址】: {}\n【请求参数】:{}\n【响应数据】:{}", url, xmlParam, responseString);
return responseString;
}

/**
* 带证书发送post请求
* 发送post请求
* *
* @param url 请求地址 * @param url 请求地址
* @param requestStr 请求信息 * @param requestStr 请求信息
* @param useKey 是否使用证书
* @return 返回请求结果字符串
*/ */
private String postWithKey(String url, String requestStr) throws WxPayException {
private String post(String url, String requestStr, boolean useKey) throws WxPayException {
try { try {
SSLContext sslContext = this.getConfig().getSslContext();
if (null == sslContext) {
sslContext = this.getConfig().initSSLContext();
}

HttpRequest request = HttpRequest HttpRequest request = HttpRequest
.post(url) .post(url)
.timeout(this.config.getHttpTimeout()) .timeout(this.config.getHttpTimeout())
.connectionTimeout(this.config.getHttpConnectionTimeout()) .connectionTimeout(this.config.getHttpConnectionTimeout())
.withConnectionProvider(new SSLSocketHttpConnectionProvider(sslContext))
.bodyText(requestStr); .bodyText(requestStr);


if (useKey) {
SSLContext sslContext = this.getConfig().getSslContext();
if (null == sslContext) {
sslContext = this.getConfig().initSSLContext();
}
request.withConnectionProvider(new SSLSocketHttpConnectionProvider(sslContext));
}

String responseString = this.getResponseString(request.send()); String responseString = this.getResponseString(request.send());


this.log.info("\n【请求地址】: {}\n【请求参数】:{}\n【响应数据】:{}", url, requestStr, responseString);
this.log.info("\n【请求地址】:{}\n【请求数据】:{}\n【响应数据】:{}", url, requestStr, responseString);
return responseString; return responseString;
} catch (Exception e) { } catch (Exception e) {
this.log.error("\n【请求地址】: {}\n【请求参数】:{}\n【异常信息】:{}", url, requestStr, e.getMessage());
this.log.error("\n【请求地址】:{}\n【请求数据】:{}\n【异常信息】:{}", url, requestStr, e.getMessage());
throw new WxPayException(e.getMessage(), e); throw new WxPayException(e.getMessage(), e);
} }
} }


読み込み中…
キャンセル
保存