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

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

parent da390b5b
package cn.quant.baa.pay.acquirer; package cn.quant.baa.pay.acquirer;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity; import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.web.CheckPayRequestData; import cn.quant.baa.pay.model.web.*;
import cn.quant.baa.pay.model.web.PayRequestData;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
/** /**
...@@ -12,8 +11,8 @@ public interface Acquirer { ...@@ -12,8 +11,8 @@ public interface Acquirer {
Object code(); Object code();
JsonNode pay(PayRequestData payRequestData, PayHistoryEntity payHistoryEntity); JsonNode pay(PayRequestData payRequestData, PayHistoryEntity payHistoryEntity);
JsonNode refund(); JsonNode refund(RefundRequestData refundRequestData);
JsonNode checkPay(CheckPayRequestData checkPayRequestData); JsonNode checkPay(CheckPayRequestData checkPayRequestData);
JsonNode checkRefund(); JsonNode checkRefund(CheckRefundRequestData checkRefundRequestData);
JsonNode close(); JsonNode close(CloseRequestData closeRequestData);
} }
package cn.quant.baa.pay.acquirer; package cn.quant.baa.pay.acquirer;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity; import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.web.CheckPayRequestData; import cn.quant.baa.pay.model.web.*;
import cn.quant.baa.pay.model.web.PayRequestData;
import cn.quant.spring.NotSupportedException; import cn.quant.spring.NotSupportedException;
import cn.quant.spring.security.Base64Cipher; import cn.quant.spring.security.Base64Cipher;
import cn.quant.spring.security.CharacterCipher; import cn.quant.spring.security.CharacterCipher;
...@@ -71,8 +70,8 @@ public class MerchantAcquirer implements Acquirer { ...@@ -71,8 +70,8 @@ public class MerchantAcquirer implements Acquirer {
} }
@Override @Override
public JsonNode refund() { public JsonNode refund(RefundRequestData refundRequestData) {
throw new NotSupportedException(); return acquirers.get(refundRequestData.getChanId()).refund(refundRequestData);
} }
@Override @Override
...@@ -81,12 +80,12 @@ public class MerchantAcquirer implements Acquirer { ...@@ -81,12 +80,12 @@ public class MerchantAcquirer implements Acquirer {
} }
@Override @Override
public JsonNode checkRefund() { public JsonNode checkRefund(CheckRefundRequestData checkRefundRequestData) {
return null; return acquirers.get(checkRefundRequestData.getChanId()).checkRefund(checkRefundRequestData);
} }
@Override @Override
public JsonNode close() { public JsonNode close(CloseRequestData closeRequestData) {
throw new NotSupportedException(); return acquirers.get(closeRequestData.getChanId()).close(closeRequestData);
} }
} }
...@@ -5,6 +5,8 @@ import cn.quant.baa.pay.acquirer.MerchantAcquirer; ...@@ -5,6 +5,8 @@ import cn.quant.baa.pay.acquirer.MerchantAcquirer;
import cn.quant.baa.pay.dict.AccessCode; import cn.quant.baa.pay.dict.AccessCode;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity; import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.web.CheckPayRequestData; 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.model.web.PayRequestData;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
...@@ -141,6 +143,21 @@ public class AlipayMerchantAcquirer extends MerchantAcquirer { ...@@ -141,6 +143,21 @@ public class AlipayMerchantAcquirer extends MerchantAcquirer {
return doExecute(bodyNode); 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支付发起请求 * App支付发起请求
* *
......
...@@ -4,6 +4,8 @@ import cn.quant.baa.pay.acquirer.AcquirerProperties; ...@@ -4,6 +4,8 @@ import cn.quant.baa.pay.acquirer.AcquirerProperties;
import cn.quant.baa.pay.acquirer.MerchantAcquirer; import cn.quant.baa.pay.acquirer.MerchantAcquirer;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity; import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.web.CheckPayRequestData; 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.model.web.PayRequestData;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
...@@ -125,6 +127,20 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer { ...@@ -125,6 +127,20 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer {
return doExecute(payAccess, bodyNode); 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 * @param payAccess
...@@ -137,13 +153,17 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer { ...@@ -137,13 +153,17 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer {
String requestBody = ""; String requestBody = "";
// 处理GET请求 // 处理GET请求
if (HttpMethod.GET.name().equals(method)) { if (HttpMethod.GET.name().equals(method)) {
if (null != bodyNode) {
bodyNode.fields().forEachRemaining((entry) -> { bodyNode.fields().forEachRemaining((entry) -> {
uriComponentsBuilder.queryParam(entry.getKey(), entry.getValue().asText()); uriComponentsBuilder.queryParam(entry.getKey(), entry.getValue().asText());
}); });
}
} else { } else {
// 非GET请求的时候处理requestBody // 非GET请求的时候处理requestBody
try { try {
if (null != bodyNode) {
requestBody = objectMapper.writeValueAsString(bodyNode); requestBody = objectMapper.writeValueAsString(bodyNode);
}
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -166,6 +186,9 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer { ...@@ -166,6 +186,9 @@ public class WeiXinMerchantAcquirer extends MerchantAcquirer {
if (response != null) { if (response != null) {
Mono<String> resultMono = response.bodyToMono(String.class); Mono<String> resultMono = response.bodyToMono(String.class);
String body = resultMono.block(); String body = resultMono.block();
if (null == body) {
body = "";
}
try { try {
bodyJsonNode = objectMapper.readTree(body); bodyJsonNode = objectMapper.readTree(body);
} catch (JsonProcessingException e) { } 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; ...@@ -5,11 +5,9 @@ import cn.quant.baa.pay.acquirer.AcquirerConfiguration;
import cn.quant.baa.pay.acquirer.MerchantAcquirer; import cn.quant.baa.pay.acquirer.MerchantAcquirer;
import cn.quant.baa.pay.context.TransactionSession; import cn.quant.baa.pay.context.TransactionSession;
import cn.quant.baa.pay.jpa.entity.*; 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.util.AssertUtils;
import cn.quant.baa.pay.model.web.GoodsDetail;
import cn.quant.baa.pay.acquirer.AcquirerProperties; import cn.quant.baa.pay.acquirer.AcquirerProperties;
import cn.quant.baa.pay.model.web.PayRequestData;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -121,4 +119,19 @@ public class TransactionService extends BusinessService { ...@@ -121,4 +119,19 @@ public class TransactionService extends BusinessService {
return acquirer.checkPay(data); 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; ...@@ -4,6 +4,8 @@ import cn.quant.baa.pay.annotation.BusinessMapping;
import cn.quant.baa.pay.jpa.entity.PayHistoryEntity; import cn.quant.baa.pay.jpa.entity.PayHistoryEntity;
import cn.quant.baa.pay.model.BusinessRequest; import cn.quant.baa.pay.model.BusinessRequest;
import cn.quant.baa.pay.model.web.CheckPayRequestData; 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.model.web.PayRequestData;
import cn.quant.baa.pay.service.TransactionService; import cn.quant.baa.pay.service.TransactionService;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
...@@ -45,4 +47,29 @@ public class TransactionController extends BusinessController { ...@@ -45,4 +47,29 @@ public class TransactionController extends BusinessController {
return res; 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