This commit is contained in:
xiangwb
2018-04-12 13:35:59 +08:00
parent 5c67b9c32f
commit 24c5206242
2 changed files with 131 additions and 154 deletions
@@ -114,7 +114,7 @@ public class AliPayService {
*/
public AliPayRefundResult refund(AliPayRefundParam param) {
AliPayRefundResult result = new AliPayRefundResult(false);
AlipayClient alipayClient = new DefaultAlipayClient(requestUrl, appId, privateKey, "json", "UTF-8", publicKey, "RSA2");
AlipayClient alipayClient = new DefaultAlipayClient(requestUrl, appId, privateKey, "json", "UTF-8", publicKey, "RSA");
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setBizContent(JSONObject.toJSONString(param));
AlipayTradeRefundResponse response;
@@ -158,7 +158,7 @@ public class AliPayService {
throw new PayException("订单号和交易号不能同时为空!");
}
AliPayQueryResult result = new AliPayQueryResult(false);
AlipayClient alipayClient = new DefaultAlipayClient(requestUrl, appId, privateKey, "json", "UTF-8", publicKey, "RSA2");
AlipayClient alipayClient = new DefaultAlipayClient(requestUrl, appId, privateKey, "json", "UTF-8", publicKey, "RSA");
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
JSONObject jsonObject = new JSONObject();
if (StringUtils.isNotEmpty(outTradeNo)) {
@@ -197,7 +197,7 @@ public class AliPayService {
throw new PayException("订单号和交易号不能同时为空!");
}
AliPayQueryResult result = new AliPayQueryResult(false);
AlipayClient alipayClient = new DefaultAlipayClient(requestUrl, appId, privateKey, "json", "UTF-8", publicKey, "RSA2");
AlipayClient alipayClient = new DefaultAlipayClient(requestUrl, appId, privateKey, "json", "UTF-8", publicKey, "RSA");
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
JSONObject jsonObject = new JSONObject();
jsonObject.put("out_request_no", outRequestNo);
@@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@@ -77,60 +78,45 @@ public class WxPayService {
* @param param
* @return
*/
public WxBarCodePayResult barCodePay(WxBarCodePayParam param) {
WxBarCodePayResult result = new WxBarCodePayResult(false);
HttpPost post = new HttpPost(barCodePayUrl);
//输入参数为转为strXml
//输入参数转为strXml
String reqBody = buildBarCodeRequestBody(param);
post.setEntity(new StringEntity(reqBody, "UTF-8"));
CloseableHttpClient httpclient;
try {
//根据mchId读取微信证书,SSL创建安全连接
httpclient = ClientCustomSSL.getCloseableHttpClient(mchId);
CloseableHttpResponse response = httpclient.execute(post);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
//返回结果为strXml
String content = EntityUtils.toString(entity, "UTF-8");
//解析返回值
Map<String, String> returnMap = XmlUtil.doXMLParse(content);
//返回状态码SUCCESS/FAIL
result.setResultCode(returnMap.get("return_code"));
Map<String, String> resultMap = getResult(barCodePayUrl, reqBody, "扫码支付异常");
if (!resultMap.isEmpty()) {
//返回状态码SUCCESS/FAIL
String returnCode = resultMap.get("return_code");
result.setResultCode(returnCode);
if ("FAIL".equalsIgnoreCase(returnCode)) {
logger.error("wx barCodePay failed!");
//返回信息:非空,为错误原因
result.setMessage(returnMap.get("return_msg"));
if ("FAIL".equalsIgnoreCase(returnMap.get("return_code"))) {
logger.error("wx barCodePay failed!");
result.setSuccess(false);
return result;
}
logger.info("outRefundNo=" + param.getOutTradeNo() + ",err_code=" + returnMap.get("err_code") + ",result_code=" + returnMap.get("result_code") + ",err_code_des=" + returnMap.get("err_code_des"));
//业务结果SUCCESS/FAIL
if ("SUCCESS".equals(returnMap.get("result_code"))) {
result.setSuccess(true);
result.setAppid(returnMap.get("appid"));
result.setMchId(returnMap.get("mch_id"));
result.setNonceStr(returnMap.get("nonce_str"));
result.setSign(returnMap.get("sign"));
result.setOpenId(returnMap.get("openid"));
result.setIsSubscribe(returnMap.get("is_subscribe"));
result.setTradeType(returnMap.get("trade_type"));
result.setBankType(returnMap.get("bank_type"));
result.setTotalFee(Integer.valueOf(returnMap.get("total_fee")));
result.setCashFee(Integer.valueOf(returnMap.get("cash_fee")));
result.setTransactionId(returnMap.get("transaction_id"));
result.setOutTradeNo(returnMap.get("out_trade_no"));
result.setTimeEnd(returnMap.get("time_end"));
} else {
result.setResultCode(returnMap.get("err_code"));
result.setMessage(returnMap.get("err_code_des"));
}
} else {
result.setMessage("error response");
result.setSuccess(false);
result.setMessage(resultMap.get("return_msg"));
return result;
}
} catch (Exception e) {
logger.error(e.getMessage());
throw new PayException("扫码支付异常");
logger.info("outRefundNo=" + param.getOutTradeNo() + ",err_code=" + resultMap.get("err_code") + ",result_code=" + resultMap.get("result_code") + ",err_code_des=" + resultMap.get("err_code_des"));
//业务结果SUCCESS/FAIL
if ("SUCCESS".equals(resultMap.get("result_code"))) {
result.setSuccess(true);
result.setAppid(resultMap.get("appid"));
result.setMchId(resultMap.get("mch_id"));
result.setNonceStr(resultMap.get("nonce_str"));
result.setSign(resultMap.get("sign"));
result.setOpenId(resultMap.get("openid"));
result.setIsSubscribe(resultMap.get("is_subscribe"));
result.setTradeType(resultMap.get("trade_type"));
result.setBankType(resultMap.get("bank_type"));
result.setTotalFee(Integer.valueOf(resultMap.get("total_fee")));
result.setCashFee(Integer.valueOf(resultMap.get("cash_fee")));
result.setTransactionId(resultMap.get("transaction_id"));
result.setOutTradeNo(resultMap.get("out_trade_no"));
result.setTimeEnd(resultMap.get("time_end"));
} else {
result.setResultCode(resultMap.get("err_code"));
result.setMessage(resultMap.get("err_code_des"));
}
} else {
result.setMessage("error response");
}
return result;
}
@@ -143,49 +129,36 @@ public class WxPayService {
*/
public WxRefundResult refund(WxRefundParam param) {
WxRefundResult result = new WxRefundResult(false);
HttpPost post = new HttpPost(refundUrl);
String reqBody = buildRefundBarCodeRequestBody(param);
post.setEntity(new StringEntity(reqBody, "UTF-8"));
CloseableHttpClient httpclient;
try {
httpclient = ClientCustomSSL.getCloseableHttpClient(mchId);
CloseableHttpResponse response = httpclient.execute(post);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity, "UTF-8");
Map<String, String> returnMap = com.xwbing.util.payWxpay.XmlUtil.doXMLParse(content);
result.setResultCode(returnMap.get("return_code"));
result.setMessage(returnMap.get("return_msg"));
if ("FAIL".equalsIgnoreCase(returnMap.get("return_code"))) {
logger.error("wx barCodePay failed!");
result.setSuccess(false);
return result;
}
logger.info("outRefundNo=" + param.getOutTradeNo() + ",err_code=" + returnMap.get("err_code") + ",result_code=" + returnMap.get("result_code") + ",err_code_des=" + returnMap.get("err_code_des"));
if ("SUCCESS".equals(returnMap.get("result_code"))) {
result.setSuccess(true);
result.setAppid(returnMap.get("appid"));
result.setMchId(returnMap.get("mch_id"));
result.setNonceStr(returnMap.get("nonce_str"));
result.setSign(returnMap.get("sign"));
result.setTransactionId(returnMap.get("transaction_id"));
result.setOutTradeNo(returnMap.get("out_trade_no"));
result.setOutRefundNo(returnMap.get("out_refund_no"));
result.setRefundId(returnMap.get("refund_id"));
result.setRefundFee(Integer.valueOf(returnMap.get("refund_fee")));
result.setTotalFee(Integer.valueOf(returnMap.get("total_fee")));
result.setCashFee(Integer.valueOf(returnMap.get("cash_fee")));
} else {
result.setResultCode(returnMap.get("err_code"));
result.setMessage(returnMap.get("err_code_des"));
}
} else {
result.setMessage("error response");
result.setSuccess(false);
Map<String, String> resultMap = getResult(refundUrl, reqBody, "退款异常");
if (!resultMap.isEmpty()) {
String returnCode = resultMap.get("return_code");
result.setResultCode(returnCode);
if ("FAIL".equalsIgnoreCase(returnCode)) {
logger.error("wx barCodePay failed!");
result.setMessage(resultMap.get("return_msg"));
return result;
}
} catch (Exception ex) {
logger.error(ex.getMessage());
throw new PayException("退款异常");
logger.info("outRefundNo=" + param.getOutTradeNo() + ",err_code=" + resultMap.get("err_code") + ",result_code=" + resultMap.get("result_code") + ",err_code_des=" + resultMap.get("err_code_des"));
if ("SUCCESS".equals(resultMap.get("result_code"))) {
result.setSuccess(true);
result.setAppid(resultMap.get("appid"));
result.setMchId(resultMap.get("mch_id"));
result.setNonceStr(resultMap.get("nonce_str"));
result.setSign(resultMap.get("sign"));
result.setTransactionId(resultMap.get("transaction_id"));
result.setOutTradeNo(resultMap.get("out_trade_no"));
result.setOutRefundNo(resultMap.get("out_refund_no"));
result.setRefundId(resultMap.get("refund_id"));
result.setRefundFee(Integer.valueOf(resultMap.get("refund_fee")));
result.setTotalFee(Integer.valueOf(resultMap.get("total_fee")));
result.setCashFee(Integer.valueOf(resultMap.get("cash_fee")));
} else {
result.setResultCode(resultMap.get("err_code"));
result.setMessage(resultMap.get("err_code_des"));
}
} else {
result.setMessage("error response");
}
return result;
}
@@ -201,41 +174,28 @@ public class WxPayService {
*/
public WxQueryResult orderQuery(String outTradeNo, String transactionId) {
WxQueryResult result = new WxQueryResult(false);
HttpPost post = new HttpPost(orderQueryUrl);
String reqBody = buildQueryRequestBody(outTradeNo, transactionId);
post.setEntity(new StringEntity(reqBody, "UTF-8"));
CloseableHttpClient httpclient;
try {
httpclient = ClientCustomSSL.getCloseableHttpClient(mchId);
CloseableHttpResponse response = httpclient.execute(post);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity, "UTF-8");
Map<String, String> returnMap = XmlUtil.doXMLParse(content);
result.setResultCode(returnMap.get("return_code"));
result.setMessage(returnMap.get("return_msg"));
if ("FAIL".equalsIgnoreCase(returnMap.get("return_code"))) {
logger.error("wx barCodePay failed!");
result.setSuccess(false);
return result;
}
logger.info("outTradeNo=" + outTradeNo + ",transactionId=" + transactionId);
if ("SUCCESS".equals(returnMap.get("result_code"))) {
result.setSuccess(true);
//交易状态
result.setTradeStatus(returnMap.get("trade_state"));
return result;
} else {
result.setResultCode(returnMap.get("err_code"));
result.setMessage(returnMap.get("err_code_des"));
}
} else {
result.setMessage("error response");
result.setSuccess(false);
Map<String, String> resultMap = getResult(orderQueryUrl, reqBody, "查询订单异常");
if (!resultMap.isEmpty()) {
String returnCode = resultMap.get("return_code");
result.setResultCode(returnCode);
if ("FAIL".equalsIgnoreCase(returnCode)) {
logger.error("wx barCodePay failed!");
result.setMessage(resultMap.get("return_msg"));
return result;
}
} catch (Exception e) {
logger.error(e.getMessage());
throw new PayException("查询订单异常");
logger.info("outTradeNo=" + outTradeNo + ",transactionId=" + transactionId);
if ("SUCCESS".equals(resultMap.get("result_code"))) {
result.setSuccess(true);
//交易状态
result.setTradeStatus(resultMap.get("trade_state"));
return result;
} else {
result.setResultCode(resultMap.get("err_code"));
result.setMessage(resultMap.get("err_code_des"));
}
} else {
result.setMessage("error response");
}
return result;
}
@@ -253,44 +213,61 @@ public class WxPayService {
*/
public WxQueryResult refundQuery(String outTradeNo, String transactionId, String ouRefundNo, String refundid) {
WxQueryResult result = new WxQueryResult(false);
HttpPost post = new HttpPost(refundQueryUrl);
String reqBody = buildRefundQueryRequestBody(outTradeNo, transactionId, ouRefundNo, refundid);
Map<String, String> resultMap = getResult(refundQueryUrl, reqBody, "查询退款异常");
if (!resultMap.isEmpty()) {
String returnCode = resultMap.get("return_code");
result.setResultCode(returnCode);
if ("FAIL".equalsIgnoreCase(returnCode)) {
logger.error("wx barCodePay failed!");
result.setMessage(resultMap.get("return_msg"));
return result;
}
logger.info("outTradeNo=" + outTradeNo + ",transactionId=" + transactionId + "ouRefundNo=" + ouRefundNo + "refundId=" + refundid);
//业务结果
if ("SUCCESS".equals(resultMap.get("result_code"))) {
result.setSuccess(true);
//第一笔退款状态
result.setRefundStatus(resultMap.get("refund_status_0"));
return result;
} else {
result.setResultCode(resultMap.get("err_code"));
result.setMessage(resultMap.get("err_code_des"));
}
} else {
result.setMessage("error response");
}
return result;
}
/**
* 获取请求结果
*
* @param url
* @param reqBody
* @param message
* @return
*/
private Map<String, String> getResult(String url, String reqBody, String message) {
HttpPost post = new HttpPost(url);
post.setEntity(new StringEntity(reqBody, "UTF-8"));
CloseableHttpClient httpclient;
//根据mchId读取微信证书,SSL创建安全连接
CloseableHttpClient httpclient = ClientCustomSSL.getCloseableHttpClient(mchId);
try {
httpclient = ClientCustomSSL.getCloseableHttpClient(mchId);
CloseableHttpResponse response = httpclient.execute(post);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
//返回结果为strXml
String content = EntityUtils.toString(entity, "UTF-8");
Map<String, String> returnMap = XmlUtil.doXMLParse(content);
result.setResultCode(returnMap.get("return_code"));
result.setMessage(returnMap.get("return_msg"));
if ("FAIL".equalsIgnoreCase(returnMap.get("return_code"))) {
logger.error("wx barCodePay failed!");
result.setSuccess(false);
return result;
}
logger.info("outTradeNo=" + outTradeNo + ",transactionId=" + transactionId + "ouRefundNo=" + ouRefundNo + "refundId=" + refundid);
//业务结果
if ("SUCCESS".equals(returnMap.get("result_code"))) {
result.setSuccess(true);
//第一笔退款状态
result.setRefundStatus(returnMap.get("refund_status_0"));
return result;
} else {
result.setResultCode(returnMap.get("err_code"));
result.setMessage(returnMap.get("err_code_des"));
}
//解析返回值
return XmlUtil.doXMLParse(content);
} else {
result.setMessage("error response");
result.setSuccess(false);
return Collections.EMPTY_MAP;
}
} catch (Exception e) {
logger.error(e.getMessage());
throw new PayException("查询退款异常");
} catch (Exception ex) {
logger.error(ex.getMessage());
throw new PayException(message);
}
return result;
}
/**