增加支付、退款状态查询接口(后面考虑是否保留查询微信支付获取支付、退款详情的接口)返回是否成功状态
This commit is contained in:
parent
282b211b4b
commit
ad34ae1f10
@ -70,6 +70,18 @@ public class EbikeWxPaymentController {
|
|||||||
return r == null?JsonResult.failed(String.format("骑行订单号{%s}查询支付订单失败", outTradeNo)):JsonResult.success(r);
|
return r == null?JsonResult.failed(String.format("骑行订单号{%s}查询支付订单失败", outTradeNo)):JsonResult.success(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过交易订单号查询支付订单状态
|
||||||
|
*
|
||||||
|
* @param transactionId 微信支付订单号
|
||||||
|
* @return 支付订单信息
|
||||||
|
*/
|
||||||
|
@GetMapping("/queryOrderStatusById/{transactionId}")
|
||||||
|
public JsonResult<?> queryOrderStatusById(@PathVariable String transactionId) {
|
||||||
|
HandleNotifyResult r = wxPayService.queryOrderStatusById(transactionId);
|
||||||
|
return JsonResult.success(r);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 退款申请
|
* 退款申请
|
||||||
*
|
*
|
||||||
@ -88,12 +100,14 @@ public class EbikeWxPaymentController {
|
|||||||
* @param outRefundNo 商户(骑行)退款单号
|
* @param outRefundNo 商户(骑行)退款单号
|
||||||
* @return 退款信息
|
* @return 退款信息
|
||||||
*/
|
*/
|
||||||
@GetMapping("/refundQuery/{outRefundNo}")
|
@GetMapping("/queryRefund/{outRefundNo}")
|
||||||
public JsonResult<?> refundQuery(@PathVariable String outRefundNo) {
|
public JsonResult<?> refundQuery(@PathVariable String outRefundNo) {
|
||||||
Refund r = wxPayService.queryRefundByOutNo(outRefundNo);
|
Refund r = wxPayService.queryRefundByOutNo(outRefundNo);
|
||||||
return r == null?JsonResult.failed(String.format("退款单号{%s}查询退款失败", outRefundNo)):JsonResult.success(r);
|
return r == null?JsonResult.failed(String.format("退款单号{%s}查询退款失败", outRefundNo)):JsonResult.success(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ================通知回调接口===============
|
// ================通知回调接口===============
|
||||||
// TODO 通知接口不能鉴权
|
// TODO 通知接口不能鉴权
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -37,4 +37,11 @@ public interface EbikePaymentService extends IService<EbikePayment> {
|
|||||||
*/
|
*/
|
||||||
Boolean updatePaymentStatus(Transaction transaction);
|
Boolean updatePaymentStatus(Transaction transaction);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据支付订单id查询支付记录
|
||||||
|
*
|
||||||
|
* @param paymentId 支付订单id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
EbikePayment getByPaymentId(String paymentId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,6 +26,7 @@ public interface WxPayService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
boolean closeOrder(String outTradeNo);
|
boolean closeOrder(String outTradeNo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JSAPI支付下单
|
* JSAPI支付下单
|
||||||
*
|
*
|
||||||
@ -46,6 +47,7 @@ public interface WxPayService {
|
|||||||
* @return 支付订单信息
|
* @return 支付订单信息
|
||||||
*/
|
*/
|
||||||
Transaction queryOrderById(String transactionId);
|
Transaction queryOrderById(String transactionId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过商户(骑行)订单号查询支付订单
|
* 通过商户(骑行)订单号查询支付订单
|
||||||
*
|
*
|
||||||
@ -54,6 +56,14 @@ public interface WxPayService {
|
|||||||
*/
|
*/
|
||||||
Transaction queryOrderByOutTradeNo(String outTradeNo);
|
Transaction queryOrderByOutTradeNo(String outTradeNo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过交易订单号查询支付订单状态
|
||||||
|
*
|
||||||
|
* @param transactionId 微信支付订单号
|
||||||
|
* @return 支付订单信息
|
||||||
|
*/
|
||||||
|
HandleNotifyResult queryOrderStatusById(String transactionId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理支付回调
|
* 处理支付回调
|
||||||
*
|
*
|
||||||
@ -82,6 +92,14 @@ public interface WxPayService {
|
|||||||
*/
|
*/
|
||||||
Refund queryRefundByOutNo(String outRefundNo);
|
Refund queryRefundByOutNo(String outRefundNo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过商户退款单号查询退款信息状态
|
||||||
|
*
|
||||||
|
* @param outRefundNo 商户退款订单号
|
||||||
|
* @return 退款信息
|
||||||
|
*/
|
||||||
|
HandleNotifyResult queryRefundStatusByOutNo(String outRefundNo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理支退款回调
|
* 处理支退款回调
|
||||||
*
|
*
|
||||||
|
|||||||
@ -58,7 +58,7 @@ public class EbikePaymentServiceImpl extends ServiceImpl<EbikePaymentMapper, Ebi
|
|||||||
ebikePayment.setTradeState(String.valueOf(transaction.getTradeState().ordinal()));
|
ebikePayment.setTradeState(String.valueOf(transaction.getTradeState().ordinal()));
|
||||||
if (Transaction.TradeStateEnum.SUCCESS.equals(transaction.getTradeState())) {
|
if (Transaction.TradeStateEnum.SUCCESS.equals(transaction.getTradeState())) {
|
||||||
// 支付成功, 更新订单状态
|
// 支付成功, 更新订单状态
|
||||||
double v = transaction.getAmount().getTotal().doubleValue() / 100.0;
|
double v = transaction.getAmount().getPayerTotal().doubleValue() / 100.0;
|
||||||
ebikePayment.setTotal(v);
|
ebikePayment.setTotal(v);
|
||||||
String paymentTime = transaction.getSuccessTime();
|
String paymentTime = transaction.getSuccessTime();
|
||||||
ebikePayment.setPaymentTime(StringUtils.toLocalDatetime(paymentTime));
|
ebikePayment.setPaymentTime(StringUtils.toLocalDatetime(paymentTime));
|
||||||
@ -73,4 +73,11 @@ public class EbikePaymentServiceImpl extends ServiceImpl<EbikePaymentMapper, Ebi
|
|||||||
.where(EBIKE_PAYMENT.PAYMENT_ID.eq(transaction.getTransactionId()));
|
.where(EBIKE_PAYMENT.PAYMENT_ID.eq(transaction.getTransactionId()));
|
||||||
return update(ebikePayment, query);
|
return update(ebikePayment, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EbikePayment getByPaymentId(String paymentId) {
|
||||||
|
QueryWrapper query = QueryWrapper.create()
|
||||||
|
.where(EBIKE_PAYMENT.PAYMENT_ID.eq(paymentId));
|
||||||
|
return this.getOne(query);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -147,26 +147,44 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Transaction queryOrderById(String transactionId) {
|
public Transaction queryOrderById(String transactionId) {
|
||||||
try {
|
QueryOrderByIdRequest request = new QueryOrderByIdRequest();
|
||||||
QueryOrderByIdRequest request = new QueryOrderByIdRequest();
|
request.setTransactionId(transactionId);
|
||||||
request.setTransactionId(transactionId);
|
return wxJsapiService.queryOrderById(request);
|
||||||
return wxJsapiService.queryOrderById(request);
|
|
||||||
}catch (Exception e) {
|
|
||||||
logError("通过交易订单号查询支付订单queryOrderById", e);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Transaction queryOrderByOutTradeNo(String outTradeNo) {
|
public Transaction queryOrderByOutTradeNo(String outTradeNo) {
|
||||||
try {
|
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
|
||||||
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
|
request.setOutTradeNo(outTradeNo);
|
||||||
request.setOutTradeNo(outTradeNo);
|
return wxJsapiService.queryOrderByOutTradeNo(request);
|
||||||
return wxJsapiService.queryOrderByOutTradeNo(request);
|
}
|
||||||
}catch (Exception e) {
|
|
||||||
logError("通过商户(骑行)订单号查询支付订单queryOrderByOutTradeNo", e);
|
@Override
|
||||||
return null;
|
public HandleNotifyResult queryOrderStatusById(String transactionId) {
|
||||||
|
// 先查本地数据库,如果退款状态不为SUCCESS,需要查询微信支付
|
||||||
|
HandleNotifyResult result = new HandleNotifyResult();
|
||||||
|
EbikePayment ebikePayment = ebikePaymentService.getByPaymentId(transactionId);
|
||||||
|
if (ebikePayment==null){
|
||||||
|
log.error("{}支付订单不存在", transactionId);
|
||||||
|
result.setMessage(String.format("{%s}支付订单不存在", transactionId));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
result.setSuccess(String.valueOf(Transaction.TradeStateEnum.SUCCESS.ordinal()).equals(ebikePayment.getTradeState()));
|
||||||
|
if (result.isSuccess()){
|
||||||
|
result.setMessage(String.format("订单%s支付成功", ebikePayment.getOrderId()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
QueryOrderByIdRequest request = new QueryOrderByIdRequest();
|
||||||
|
request.setTransactionId(transactionId);
|
||||||
|
Transaction r = wxJsapiService.queryOrderById(request);
|
||||||
|
if(r!=null&& r.getTradeState().equals(Transaction.TradeStateEnum.SUCCESS)) {
|
||||||
|
result.setMessage(String.format("订单%s支付成功", ebikePayment.getOrderId()));
|
||||||
|
result.setSuccess(true);
|
||||||
|
// 更新支付状态
|
||||||
|
ebikePaymentService.updatePaymentStatus(r);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -177,14 +195,12 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
String nonce = request.getHeader(WECHAT_PAY_NONCE);
|
String nonce = request.getHeader(WECHAT_PAY_NONCE);
|
||||||
String serialNo = request.getHeader(WECHAT_PAY_SERIAL);
|
String serialNo = request.getHeader(WECHAT_PAY_SERIAL);
|
||||||
String signature = request.getHeader(WECHAT_PAY_SIGNATURE);
|
String signature = request.getHeader(WECHAT_PAY_SIGNATURE);
|
||||||
String signatureType = request.getHeader(WECHAT_PAY_SIGNATURE+"-Type");
|
|
||||||
String timestamp = request.getHeader(WECHAT_PAY_TIMESTAMP);
|
String timestamp = request.getHeader(WECHAT_PAY_TIMESTAMP);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
RequestParam requestParam = new RequestParam.Builder()
|
RequestParam requestParam = new RequestParam.Builder()
|
||||||
.serialNumber(serialNo)
|
.serialNumber(serialNo)
|
||||||
.signature(signature)
|
.signature(signature)
|
||||||
.signType(signatureType)
|
|
||||||
.timestamp(timestamp)
|
.timestamp(timestamp)
|
||||||
.body(HttpServletUtils.getRequestBody(request))
|
.body(HttpServletUtils.getRequestBody(request))
|
||||||
.nonce(nonce)
|
.nonce(nonce)
|
||||||
@ -208,58 +224,76 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String refund(String transactionId, String outTradeNo, String reason, AmountRefundDto amount) {
|
public String refund(String transactionId, String outTradeNo, String reason, AmountRefundDto amount) {
|
||||||
try {
|
// 雪花算法生成退款单号
|
||||||
// 雪花算法生成退款单号
|
String outRefundNo = StringUtils.generateSnowflakeId("refundId");
|
||||||
String outRefundNo = StringUtils.generateSnowflakeId("refundId");
|
EbikeRefund ebikeRefund = new EbikeRefund();
|
||||||
EbikeRefund ebikeRefund = new EbikeRefund();
|
ebikeRefund.setCreateTime(LocalDateTime.now());
|
||||||
ebikeRefund.setCreateTime(LocalDateTime.now());
|
// 发起退款
|
||||||
// 发起退款
|
CreateRequest request = new CreateRequest();
|
||||||
CreateRequest request = new CreateRequest();
|
request.setTransactionId(transactionId);
|
||||||
request.setTransactionId(transactionId);
|
request.setOutTradeNo(outTradeNo);
|
||||||
request.setOutTradeNo(outTradeNo);
|
request.setOutRefundNo(outRefundNo);
|
||||||
request.setOutRefundNo(outRefundNo);
|
request.setReason(reason);
|
||||||
request.setReason(reason);
|
request.setNotifyUrl(wxPayConfig.getRefundNotifyUrl());
|
||||||
request.setNotifyUrl(wxPayConfig.getRefundNotifyUrl());
|
AmountReq amountReq = new AmountReq();
|
||||||
AmountReq amountReq = new AmountReq();
|
amountReq.setRefund(BigDecimal.valueOf(amount.getRefund() * 100.0).longValue());
|
||||||
amountReq.setRefund(BigDecimal.valueOf(amount.getRefund() * 100.0).longValue());
|
amountReq.setTotal(BigDecimal.valueOf(amount.getTotal() * 100.0).longValue());
|
||||||
amountReq.setTotal(BigDecimal.valueOf(amount.getTotal() * 100.0).longValue());
|
amountReq.setCurrency(amount.getCurrency());
|
||||||
amountReq.setCurrency(amount.getCurrency());
|
request.setAmount(amountReq);
|
||||||
request.setAmount(amountReq);
|
Refund result = wxRefundService.create(request);
|
||||||
Refund result = wxRefundService.create(request);
|
// 入库
|
||||||
// 入库
|
if (result != null) {
|
||||||
if (result != null) {
|
ebikeRefund.setRefundId(outRefundNo);
|
||||||
ebikeRefund.setRefundId(outRefundNo);
|
ebikeRefund.setOrderId(outTradeNo);
|
||||||
ebikeRefund.setOrderId(outTradeNo);
|
ebikeRefund.setPaymentId(transactionId);
|
||||||
ebikeRefund.setPaymentId(transactionId);
|
ebikeRefund.setTotal(amount.getTotal());
|
||||||
ebikeRefund.setTotal(amount.getTotal());
|
ebikeRefund.setReason(reason);
|
||||||
ebikeRefund.setReason(reason);
|
ebikeRefund.setStatus(String.valueOf(result.getStatus().ordinal()));
|
||||||
ebikeRefund.setStatus(String.valueOf(result.getStatus().ordinal()));
|
ebikeRefund.setCurrency(amount.getCurrency());
|
||||||
ebikeRefund.setCurrency(amount.getCurrency());
|
if(Status.SUCCESS.equals(result.getStatus())){
|
||||||
if(Status.SUCCESS.equals(result.getStatus())){
|
ebikeRefund.setRefund(result.getAmount().getRefund().doubleValue() / 100.0);
|
||||||
ebikeRefund.setRefund(result.getAmount().getRefund().doubleValue() / 100.0);
|
ebikeRefund.setRefundTime(LocalDateTime.now());
|
||||||
ebikeRefund.setRefundTime(LocalDateTime.now());
|
|
||||||
}
|
|
||||||
ebikeRefundService.saveRefundResult(ebikeRefund);
|
|
||||||
return outRefundNo;
|
|
||||||
}
|
}
|
||||||
log.error("退款申请refund失败,订单号:{}", outTradeNo);
|
ebikeRefundService.saveRefundResult(ebikeRefund);
|
||||||
return null;
|
return outRefundNo;
|
||||||
}catch (Exception e) {
|
|
||||||
logError("退款申请refund", e);
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
log.error("退款申请refund失败,订单号:{}", outTradeNo);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Refund queryRefundByOutNo(String outRefundNo) {
|
public Refund queryRefundByOutNo(String outRefundNo) {
|
||||||
try {
|
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
|
||||||
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
|
request.setOutRefundNo(outRefundNo);
|
||||||
request.setOutRefundNo(outRefundNo);
|
return wxRefundService.queryByOutRefundNo(request);
|
||||||
return wxRefundService.queryByOutRefundNo(request);
|
}
|
||||||
}catch (Exception e) {
|
|
||||||
logError("通过商户退款单号查询退款queryByOutRefundNo", e);
|
@Override
|
||||||
return null;
|
public HandleNotifyResult queryRefundStatusByOutNo(String outRefundNo) {
|
||||||
|
HandleNotifyResult result = new HandleNotifyResult();
|
||||||
|
// 先查本地数据库,如果退款状态不为SUCCESS,需要查询微信支付
|
||||||
|
EbikeRefund ebikeRefund = ebikeRefundService.getById(outRefundNo);
|
||||||
|
if (ebikeRefund==null){
|
||||||
|
log.error("{}退款订单不存在", outRefundNo);
|
||||||
|
result.setMessage(String.format("{%s}退款订单不存在", outRefundNo));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
result.setSuccess(String.valueOf(Status.SUCCESS.ordinal()).equals(ebikeRefund.getStatus()));
|
||||||
|
if (result.isSuccess()){
|
||||||
|
result.setMessage(String.format("退款%s成功", ebikeRefund.getRefundId()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
|
||||||
|
request.setOutRefundNo(outRefundNo);
|
||||||
|
Refund r = wxRefundService.queryByOutRefundNo(request);
|
||||||
|
if(r!=null&& r.getStatus().equals(Status.SUCCESS)) {
|
||||||
|
result.setMessage(String.format("退款%s成功", ebikeRefund.getRefundId()));
|
||||||
|
result.setSuccess(true);
|
||||||
|
// 更新退款状态
|
||||||
|
ebikeRefundService.updateRefundStatus(r);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -270,14 +304,12 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
String nonce = request.getHeader(WECHAT_PAY_NONCE);
|
String nonce = request.getHeader(WECHAT_PAY_NONCE);
|
||||||
String serialNo = request.getHeader(WECHAT_PAY_SERIAL);
|
String serialNo = request.getHeader(WECHAT_PAY_SERIAL);
|
||||||
String signature = request.getHeader(WECHAT_PAY_SIGNATURE);
|
String signature = request.getHeader(WECHAT_PAY_SIGNATURE);
|
||||||
String signatureType = request.getHeader(WECHAT_PAY_SIGNATURE+"-Type");
|
|
||||||
String timestamp = request.getHeader(WECHAT_PAY_TIMESTAMP);
|
String timestamp = request.getHeader(WECHAT_PAY_TIMESTAMP);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
RequestParam requestParam = new RequestParam.Builder()
|
RequestParam requestParam = new RequestParam.Builder()
|
||||||
.serialNumber(serialNo)
|
.serialNumber(serialNo)
|
||||||
.signature(signature)
|
.signature(signature)
|
||||||
.signType(signatureType)
|
|
||||||
.timestamp(timestamp)
|
.timestamp(timestamp)
|
||||||
.body(HttpServletUtils.getRequestBody(request))
|
.body(HttpServletUtils.getRequestBody(request))
|
||||||
.nonce(nonce)
|
.nonce(nonce)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user