Commit 5c04db5f authored by 刘李鹏's avatar 刘李鹏

微信、支付宝退款查询、订单关闭完成

parent da390b5b
package cn.quant.baa.pay.acquirer;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.web.CheckPayRequestData;
import cn.quant.baa.pay.model.web.PayRequestData;
import cn.quant.baa.pay.model.web.*;
import com.fasterxml.jackson.databind.JsonNode;
/**
......@@ -12,8 +11,8 @@ public interface Acquirer {
Object code();
JsonNode pay(PayRequestData payRequestData, PayHistoryEntity payHistoryEntity);
JsonNode refund();
JsonNode refund(RefundRequestData refundRequestData);
JsonNode checkPay(CheckPayRequestData checkPayRequestData);
JsonNode checkRefund();
JsonNode close();
JsonNode checkRefund(CheckRefundRequestData checkRefundRequestData);
JsonNode close(CloseRequestData closeRequestData);
}
package cn.quant.baa.pay.acquirer;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.web.CheckPayRequestData;
import cn.quant.baa.pay.model.web.PayRequestData;
import cn.quant.baa.pay.model.web.*;
import cn.quant.spring.NotSupportedException;
import cn.quant.spring.security.Base64Cipher;
import cn.quant.spring.security.CharacterCipher;
......@@ -71,8 +70,8 @@ public class MerchantAcquirer implements Acquirer {
}
@Override
public JsonNode refund() {
throw new NotSupportedException();
public JsonNode refund(RefundRequestData refundRequestData) {
return acquirers.get(refundRequestData.getChanId()).refund(refundRequestData);
}
@Override
......@@ -81,12 +80,12 @@ public class MerchantAcquirer implements Acquirer {
}
@Override
public JsonNode checkRefund() {
return null;
public JsonNode checkRefund(CheckRefundRequestData checkRefundRequestData) {
return acquirers.get(checkRefundRequestData.getChanId()).checkRefund(checkRefundRequestData);
}
@Override
public JsonNode close() {
throw new NotSupportedException();
public JsonNode close(CloseRequestData closeRequestData) {
return acquirers.get(closeRequestData.getChanId()).close(closeRequestData);
}
}
......@@ -5,6 +5,8 @@ import cn.quant.baa.pay.acquirer.MerchantAcquirer;
import cn.quant.baa.pay.dict.AccessCode;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.web.CheckPayRequestData;
import cn.quant.baa.pay.model.web.CheckRefundRequestData;
import cn.quant.baa.pay.model.web.CloseRequestData;
import cn.quant.baa.pay.model.web.PayRequestData;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
......@@ -141,6 +143,21 @@ public class AlipayMerchantAcquirer extends MerchantAcquirer {
return doExecute(bodyNode);
}
@Override
public JsonNode checkRefund(CheckRefundRequestData checkRefundRequestData) {
ObjectNode bodyNode = objectMapper.createObjectNode();
bodyNode.put("out_trade_no", checkRefundRequestData.getOutTradeNo());
bodyNode.put("out_request_no", checkRefundRequestData.getOutRefundNo());
return doExecute(bodyNode);
}
@Override
public JsonNode close(CloseRequestData closeRequestData) {
ObjectNode bodyNode = objectMapper.createObjectNode();
bodyNode.put("out_trade_no", closeRequestData.getOutTradeNo());
return doExecute(bodyNode);
}
/**
* App支付发起请求
*
......
......@@ -4,6 +4,8 @@ import cn.quant.baa.pay.acquirer.AcquirerProperties;
import cn.quant.baa.pay.acquirer.MerchantAcquirer;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.web.CheckPayRequestData;
import cn.quant.baa.pay.model.web.CheckRefundRequestData;
import cn.quant.baa.pay.model.web.CloseRequestData;
import cn.quant.baa.pay.model.web.PayRequestData;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
......@@ -125,6 +127,20 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer {
return doExecute(payAccess, bodyNode);
}
@Override
public JsonNode checkRefund(CheckRefundRequestData checkRefundRequestData) {
String payAccess = properties.getPayAccess().replace("{out_refund_no}", checkRefundRequestData.getOutRefundNo());
return doExecute(payAccess, null);
}
@Override
public JsonNode close(CloseRequestData closeRequestData) {
ObjectNode bodyNode = objectMapper.createObjectNode();
bodyNode.put("mchid", properties.getPayAcctId());
String payAccess = properties.getPayAccess().replace("{out_trade_no}", closeRequestData.getOutTradeNo());
return doExecute(payAccess, bodyNode);
}
/**
*
* @param payAccess
......@@ -137,13 +153,17 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer {
String requestBody = "";
// 处理GET请求
if (HttpMethod.GET.name().equals(method)) {
bodyNode.fields().forEachRemaining((entry) -> {
uriComponentsBuilder.queryParam(entry.getKey(), entry.getValue().asText());
});
if (null != bodyNode) {
bodyNode.fields().forEachRemaining((entry) -> {
uriComponentsBuilder.queryParam(entry.getKey(), entry.getValue().asText());
});
}
} else {
// 非GET请求的时候处理requestBody
try {
requestBody = objectMapper.writeValueAsString(bodyNode);
if (null != bodyNode) {
requestBody = objectMapper.writeValueAsString(bodyNode);
}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
......@@ -166,6 +186,9 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer {
if (response != null) {
Mono<String> resultMono = response.bodyToMono(String.class);
String body = resultMono.block();
if (null == body) {
body = "";
}
try {
bodyJsonNode = objectMapper.readTree(body);
} catch (JsonProcessingException e) {
......
package cn.quant.baa.pay.model.web;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* Created with IntelliJ IDEA.
* Author: Lipeng Liu
* Date: 2021/9/8
* Time: 上午11:05
* Description: No Description
*/
public class CheckRefundRequestData implements Serializable {
private static final long serialVersionUID = 4652001398076281697L;
/**
* 支付通道ID
*/
@NotNull(message = "ILLEGAL_REQ_CHAN_ID")
private String chanId;
/**
* 退款订单号
*/
@Size(min = 6, max = 64, message = "ILLEGAL_REQ_OUT_TRADE_NO")
@NotNull(message = "ILLEGAL_REQ_OUT_TRADE_NO")
private String outRefundNo;
/**
* 商户订单号
*/
@Size(min = 6, max = 64, message = "ILLEGAL_REQ_OUT_TRADE_NO")
@NotNull(message = "ILLEGAL_REQ_OUT_TRADE_NO")
private String outTradeNo;
public String getChanId() {
return chanId;
}
public void setChanId(String chanId) {
this.chanId = chanId;
}
public String getOutRefundNo() {
return outRefundNo;
}
public void setOutRefundNo(String outRefundNo) {
this.outRefundNo = outRefundNo;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
}
package cn.quant.baa.pay.model.web;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* Created with IntelliJ IDEA.
* Author: Lipeng Liu
* Date: 2021/9/8
* Time: 上午11:28
* Description: No Description
*/
public class CloseRequestData implements Serializable {
private static final long serialVersionUID = 8489060627679269541L;
/**
* 支付通道ID
*/
@NotNull(message = "ILLEGAL_REQ_CHAN_ID")
private String chanId;
/**
* 商户订单号
*/
@Size(min = 6, max = 64, message = "ILLEGAL_REQ_OUT_TRADE_NO")
@NotNull(message = "ILLEGAL_REQ_OUT_TRADE_NO")
private String outTradeNo;
public String getChanId() {
return chanId;
}
public void setChanId(String chanId) {
this.chanId = chanId;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
}
package cn.quant.baa.pay.model.web;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* Created with IntelliJ IDEA.
* Author: Lipeng Liu
* Date: 2021/9/8
* Time: 上午11:30
* Description: No Description
*/
public class RefundRequestData implements Serializable {
private static final long serialVersionUID = -3619831737213449288L;
/**
* 支付通道ID
*/
@NotNull(message = "ILLEGAL_REQ_CHAN_ID")
private String chanId;
/**
* 商户订单号
*/
@Size(min = 6, max = 64, message = "ILLEGAL_REQ_OUT_TRADE_NO")
@NotNull(message = "ILLEGAL_REQ_OUT_TRADE_NO")
private String outTradeNo;
public String getChanId() {
return chanId;
}
public void setChanId(String chanId) {
this.chanId = chanId;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
}
......@@ -5,11 +5,9 @@ import cn.quant.baa.pay.acquirer.AcquirerConfiguration;
import cn.quant.baa.pay.acquirer.MerchantAcquirer;
import cn.quant.baa.pay.context.TransactionSession;
import cn.quant.baa.pay.jpa.entity.*;
import cn.quant.baa.pay.model.web.CheckPayRequestData;
import cn.quant.baa.pay.model.web.*;
import cn.quant.baa.pay.util.AssertUtils;
import cn.quant.baa.pay.model.web.GoodsDetail;
import cn.quant.baa.pay.acquirer.AcquirerProperties;
import cn.quant.baa.pay.model.web.PayRequestData;
import com.fasterxml.jackson.databind.JsonNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -121,4 +119,19 @@ public class TransactionService extends BusinessService {
return acquirer.checkPay(data);
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public JsonNode checkRefund(CheckRefundRequestData data) {
return acquirer.checkRefund(data);
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public JsonNode close(CloseRequestData data) {
return acquirer.close(data);
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public JsonNode checkRefund(RefundRequestData data) {
return acquirer.refund(data);
}
}
......@@ -4,6 +4,8 @@ import cn.quant.baa.pay.annotation.BusinessMapping;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.BusinessRequest;
import cn.quant.baa.pay.model.web.CheckPayRequestData;
import cn.quant.baa.pay.model.web.CheckRefundRequestData;
import cn.quant.baa.pay.model.web.CloseRequestData;
import cn.quant.baa.pay.model.web.PayRequestData;
import cn.quant.baa.pay.service.TransactionService;
import com.fasterxml.jackson.databind.JsonNode;
......@@ -45,4 +47,29 @@ public class TransactionController extends BusinessController {
return res;
}
@ResponseBody
@BusinessMapping(session = 1)
@PostMapping("/checkRefund")
public JsonNode checkRefund(@RequestBody BusinessRequest<CheckRefundRequestData> request) {
CheckRefundRequestData data = request.getData();
JsonNode res = transactionService.checkRefund(data);
System.currentTimeMillis();
return res;
}
@ResponseBody
@BusinessMapping(session = 1)
@PostMapping("/close")
public JsonNode close(@RequestBody BusinessRequest<CloseRequestData> request) {
CloseRequestData data = request.getData();
JsonNode res = transactionService.close(data);
System.currentTimeMillis();
return res;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment