Browse Source

优化微信支付请求代码

master
Binary Wang 7 years ago
committed by Binary Wang
parent
commit
b64ba9a978
3 changed files with 41 additions and 39 deletions
  1. +1
    -1
      weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayBaseRequest.java
  2. +35
    -33
      weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java
  3. +5
    -5
      weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImplTest.java

+ 1
- 1
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPayBaseRequest.java View File

@@ -119,7 +119,7 @@ public abstract class WxPayBaseRequest {
try { try {
BeanUtils.checkRequiredFields(this); BeanUtils.checkRequiredFields(this);
} catch (WxErrorException e) { } catch (WxErrorException e) {
throw new WxPayException(e.getError().getErrorMsg());
throw new WxPayException(e.getError().getErrorMsg(), e);
} }


//check other parameters //check other parameters


+ 35
- 33
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java View File

@@ -11,14 +11,13 @@ import com.google.common.collect.Maps;
import jodd.http.HttpRequest; import jodd.http.HttpRequest;
import jodd.http.HttpResponse; import jodd.http.HttpResponse;
import jodd.http.net.SSLSocketHttpConnectionProvider; import jodd.http.net.SSLSocketHttpConnectionProvider;
import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;


import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
import java.io.File; import java.io.File;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -76,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(), true);
String responseContent = this.post(url, request.toXML());
WxPayRefundQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundQueryResult.class); WxPayRefundQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundQueryResult.class);
result.composeRefundRecords(); result.composeRefundRecords();
result.checkResult(this); result.checkResult(this);
@@ -96,7 +95,7 @@ public class WxPayServiceImpl implements WxPayService {
throw e; throw e;
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
throw new WxPayException("发生异常," + e.getMessage());
throw new WxPayException("发生异常," + e.getMessage(), e);
} }
} }


@@ -139,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(), true);
String responseContent = this.post(url, request.toXML());
if (StringUtils.isBlank(responseContent)) { if (StringUtils.isBlank(responseContent)) {
throw new WxPayException("无响应结果"); throw new WxPayException("无响应结果");
} }
@@ -161,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(), true);
String responseContent = this.post(url, request.toXML());
WxPayOrderCloseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderCloseResult.class); WxPayOrderCloseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderCloseResult.class);
result.checkResult(this); result.checkResult(this);


@@ -173,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(), true);
String responseContent = this.post(url, request.toXML());
WxPayUnifiedOrderResult result = WxPayBaseResult.fromXML(responseContent, WxPayUnifiedOrderResult.class); WxPayUnifiedOrderResult result = WxPayBaseResult.fromXML(responseContent, WxPayUnifiedOrderResult.class);
result.checkResult(this); result.checkResult(this);
return result; return result;
@@ -294,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(), true);
String responseContent = this.post(url, request.toXML());
WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class); WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class);
result.checkResult(this); result.checkResult(this);
} }
@@ -310,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(), true);
String responseContent = this.post(url, request.toXML());
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);
@@ -397,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(), true);
String responseContent = this.post(url, request.toXML());
WxPayMicropayResult result = WxPayBaseResult.fromXML(responseContent, WxPayMicropayResult.class); WxPayMicropayResult result = WxPayBaseResult.fromXML(responseContent, WxPayMicropayResult.class);
result.checkResult(this); result.checkResult(this);
return result; return result;
@@ -419,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(), true);
String responseContent = this.post(url, request.toXML());
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();
@@ -435,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(), true);
String responseContent = this.post(url, request.toXML());
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();
@@ -452,26 +451,21 @@ 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(), false);
String responseContent = this.post(url, request.toXML());
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();
} }


/** /**
* @param url 请求地址
* @param xmlParam 请求字符串
* @param needTransferEncoding 是否需要对结果进行重编码
* 执行post请求
*
* @param url 请求地址
* @param xmlParam 请求字符串
* @return 返回请求结果 * @return 返回请求结果
*/ */
private String post(String url, String xmlParam, boolean needTransferEncoding) {
String requestString = xmlParam;
try {
requestString = new String(xmlParam.getBytes(CharEncoding.UTF_8), CharEncoding.ISO_8859_1);
} catch (UnsupportedEncodingException e) {
//实际上不会发生该异常
e.printStackTrace();
}
private String post(String url, String xmlParam) throws WxPayException {
String requestString = new String(xmlParam.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);


HttpRequest request = HttpRequest.post(url).body(requestString); HttpRequest request = HttpRequest.post(url).body(requestString);
String responseString = this.getResponseString(request.send()); String responseString = this.getResponseString(request.send());
@@ -481,7 +475,10 @@ public class WxPayServiceImpl implements WxPayService {
} }


/** /**
* ecoolper(20170418),修改为jodd-http方式
* 带证书发送post请求
*
* @param url 请求地址
* @param requestStr 请求信息
*/ */
private String postWithKey(String url, String requestStr) throws WxPayException { private String postWithKey(String url, String requestStr) throws WxPayException {
try { try {
@@ -501,22 +498,27 @@ public class WxPayServiceImpl implements WxPayService {
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());
throw new WxPayException(e.getMessage(), e);
} }
} }


private String getResponseString(HttpResponse response) {
this.log.debug("【微信服务器响应头信息】:\n{}", response.toString(false));
private String getResponseString(HttpResponse response) throws WxPayException {
try {
this.log.debug("【微信服务器响应头信息】:\n{}", response.toString(false));
} catch (NullPointerException e) {
throw new WxPayException("response.toString() 居然抛出空指针异常了", e);
}


String responseString = response.bodyText(); String responseString = response.bodyText();


if (StringUtils.isBlank(responseString)) {
throw new WxPayException("响应信息为空");
}

if (StringUtils.isBlank(response.charset())) { if (StringUtils.isBlank(response.charset())) {
try {
responseString = new String(response.bodyText().getBytes(CharEncoding.ISO_8859_1), CharEncoding.UTF_8);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
responseString = new String(responseString.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
} }

return responseString; return responseString;
} }




+ 5
- 5
weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImplTest.java View File

@@ -83,7 +83,7 @@ public class WxPayServiceImplTest {
} }


/** /**
* Test method for {@link WxPayService#refundQuery(java.lang.String, java.lang.String, java.lang.String, java.lang.String)} .
* Test method for {@link WxPayService#refundQuery(String, String, String, String)} .
*/ */
@Test @Test
public void testRefundQuery() throws Exception { public void testRefundQuery() throws Exception {
@@ -121,7 +121,7 @@ public class WxPayServiceImplTest {
} }


/** /**
* Test method for {@link WxPayService#queryRedpack(java.lang.String)}.
* Test method for {@link WxPayService#queryRedpack(String)}.
*/ */
@Test @Test
public void testQueryRedpack() throws Exception { public void testQueryRedpack() throws Exception {
@@ -148,7 +148,7 @@ public class WxPayServiceImplTest {
} }


/** /**
* Test method for {@link WxPayService#queryOrder(java.lang.String, java.lang.String)} .
* Test method for {@link WxPayService#queryOrder(String, String)} .
*/ */
@Test @Test
public void testQueryOrder() throws WxPayException { public void testQueryOrder() throws WxPayException {
@@ -157,7 +157,7 @@ public class WxPayServiceImplTest {
} }


/** /**
* Test method for {@link WxPayService#closeOrder(java.lang.String)} .
* Test method for {@link WxPayService#closeOrder(String)} .
*/ */
@Test @Test
public void testCloseOrder() throws WxPayException { public void testCloseOrder() throws WxPayException {
@@ -174,7 +174,7 @@ public class WxPayServiceImplTest {
} }


/** /**
* Test method for {@link WxPayService#queryEntPay(java.lang.String)}.
* Test method for {@link WxPayService#queryEntPay(String)}.
*/ */
@Test @Test
public void testQueryEntPay() throws WxPayException { public void testQueryEntPay() throws WxPayException {


Loading…
Cancel
Save