mirror of
https://gitee.com/dromara/dax-pay.git
synced 2025-09-03 11:06:46 +00:00
feat 回调处理优化
This commit is contained in:
@@ -1,9 +1,7 @@
|
||||
package cn.bootx.platform.daxpay.service.core.channel.alipay.convert;
|
||||
|
||||
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayConfig;
|
||||
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
|
||||
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPayConfigDto;
|
||||
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPaymentDto;
|
||||
import cn.bootx.platform.daxpay.service.param.channel.alipay.AliPayConfigParam;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
@@ -24,6 +22,4 @@ public interface AlipayConvert {
|
||||
AliPayConfig convert(AliPayConfigParam in);
|
||||
|
||||
AliPayConfigDto convert(AliPayConfig in);
|
||||
|
||||
AliPaymentDto convert(AliPayOrder aliPayOrder);
|
||||
}
|
||||
|
@@ -1,26 +0,0 @@
|
||||
package cn.bootx.platform.daxpay.service.core.channel.alipay.dao;
|
||||
|
||||
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
|
||||
import cn.bootx.platform.daxpay.service.common.entity.BasePayOrder;
|
||||
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 支付宝支付订单
|
||||
*
|
||||
* @author xxm
|
||||
* @since 2021/2/26
|
||||
*/
|
||||
@Deprecated
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class AliPayOrderManager extends BaseManager<AliPayOrderMapper, AliPayOrder> {
|
||||
|
||||
public Optional<AliPayOrder> findByPaymentId(Long paymentId) {
|
||||
return this.findByField(BasePayOrder::getPaymentId, paymentId);
|
||||
}
|
||||
|
||||
}
|
@@ -1,17 +0,0 @@
|
||||
package cn.bootx.platform.daxpay.service.core.channel.alipay.dao;
|
||||
|
||||
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 支付宝支付
|
||||
*
|
||||
* @author xxm
|
||||
* @since 2021/2/26
|
||||
*/
|
||||
@Deprecated
|
||||
@Mapper
|
||||
public interface AliPayOrderMapper extends BaseMapper<AliPayOrder> {
|
||||
|
||||
}
|
@@ -1,41 +0,0 @@
|
||||
package cn.bootx.platform.daxpay.service.core.channel.alipay.entity;
|
||||
|
||||
import cn.bootx.platform.common.core.function.EntityBaseFunction;
|
||||
import cn.bootx.platform.daxpay.service.common.entity.BasePayOrder;
|
||||
import cn.bootx.platform.daxpay.service.core.channel.alipay.convert.AlipayConvert;
|
||||
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPaymentDto;
|
||||
import cn.bootx.table.modify.annotation.DbColumn;
|
||||
import cn.bootx.table.modify.annotation.DbTable;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 支付宝支付记录
|
||||
*
|
||||
* @author xxm
|
||||
* @since 2021/2/26
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@Deprecated
|
||||
@Accessors(chain = true)
|
||||
@DbTable(comment = "支付宝支付记录")
|
||||
@TableName("pay_alipay_order")
|
||||
public class AliPayOrder extends BasePayOrder implements EntityBaseFunction<AliPaymentDto> {
|
||||
|
||||
/** 支付宝交易号 */
|
||||
@DbColumn(comment = "交易号")
|
||||
private String tradeNo;
|
||||
|
||||
/** 所使用的支付方式 */
|
||||
@DbColumn(comment = "支付方式")
|
||||
private String payWay;
|
||||
|
||||
@Override
|
||||
public AliPaymentDto toDto() {
|
||||
return AlipayConvert.CONVERT.convert(this);
|
||||
}
|
||||
|
||||
}
|
@@ -1,97 +0,0 @@
|
||||
package cn.bootx.platform.daxpay.service.core.channel.alipay.service;
|
||||
|
||||
import cn.bootx.platform.daxpay.code.PayStatusEnum;
|
||||
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
|
||||
import cn.bootx.platform.daxpay.service.core.channel.alipay.dao.AliPayOrderManager;
|
||||
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
|
||||
import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrder;
|
||||
import cn.bootx.platform.daxpay.service.core.order.pay.service.PayChannelOrderService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 支付宝支付订单
|
||||
* 1.创建: 支付调起并支付成功后才会创建
|
||||
* 2.撤销: 关闭本地支付记录
|
||||
* 3.退款: 发起退款时记录
|
||||
*
|
||||
* @author xxm
|
||||
* @since 2021/2/26
|
||||
*/
|
||||
@Deprecated
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AliPayOrderService {
|
||||
|
||||
private final AliPayOrderManager aliPayOrderManager;
|
||||
|
||||
private final PayChannelOrderService payChannelOrderService;
|
||||
|
||||
|
||||
/**
|
||||
* 更新异步支付记录成功状态, 并创建支付宝支付记录
|
||||
*/
|
||||
@Deprecated
|
||||
public void updateAsyncSuccess(PayOrder payOrder, Integer amount) {
|
||||
// 创建支付宝支付订单
|
||||
this.createAliPayOrder(payOrder,amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建支付宝支付订单(支付成功后才会创建)
|
||||
*/
|
||||
@Deprecated
|
||||
private void createAliPayOrder(PayOrder payOrder, Integer amount) {
|
||||
String tradeNo = PaymentContextLocal.get()
|
||||
.getAsyncPayInfo()
|
||||
.getGatewayOrderNo();
|
||||
|
||||
AliPayOrder aliPayOrder = new AliPayOrder();
|
||||
aliPayOrder.setTradeNo(tradeNo)
|
||||
.setPayWay(PaymentContextLocal.get().getAsyncPayInfo().getPayWay())
|
||||
.setPaymentId(payOrder.getId())
|
||||
.setAmount(amount)
|
||||
.setRefundableBalance(amount)
|
||||
.setBusinessNo(payOrder.getBusinessNo())
|
||||
.setStatus(PayStatusEnum.SUCCESS.getCode())
|
||||
// 读取回调中的支付时间
|
||||
.setPayTime(LocalDateTime.now());
|
||||
aliPayOrderManager.save(aliPayOrder);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消状态, 按正常来说不会出现支付宝订单需要取消的情况
|
||||
*/
|
||||
public void updateClose(Long paymentId) {
|
||||
Optional<AliPayOrder> aliPaymentOptional = aliPayOrderManager.findByPaymentId(paymentId);
|
||||
aliPaymentOptional.ifPresent(aliPayOrder -> {
|
||||
aliPayOrder.setStatus(PayStatusEnum.CLOSE.getCode());
|
||||
aliPayOrderManager.updateById(aliPayOrder);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新退款. 分为部分退款和全部退款
|
||||
*/
|
||||
public void updateRefund(Long paymentId, int amount) {
|
||||
Optional<AliPayOrder> aliPaymentOptional = aliPayOrderManager.findByPaymentId(paymentId);
|
||||
aliPaymentOptional.ifPresent(payment -> {
|
||||
int refundableBalance = payment.getRefundableBalance() - amount;
|
||||
payment.setRefundableBalance(refundableBalance);
|
||||
// 退款完毕
|
||||
if (refundableBalance == 0) {
|
||||
payment.setStatus(PayStatusEnum.REFUNDED.getCode());
|
||||
}
|
||||
// 部分退款
|
||||
else {
|
||||
payment.setStatus(PayStatusEnum.PARTIAL_REFUND.getCode());
|
||||
}
|
||||
aliPayOrderManager.updateById(payment);
|
||||
});
|
||||
}
|
||||
}
|
@@ -32,7 +32,7 @@ import java.time.LocalDateTime;
|
||||
public class PayCallbackRecord extends MpCreateEntity implements EntityBaseFunction<PayCallbackRecordDto> {
|
||||
|
||||
/** 本地订单id */
|
||||
@DbColumn(comment = "支付订单id")
|
||||
@DbColumn(comment = "本地订单id")
|
||||
private Long orderId;
|
||||
|
||||
/** 支付网关订单号 */
|
||||
@@ -59,7 +59,7 @@ public class PayCallbackRecord extends MpCreateEntity implements EntityBaseFunct
|
||||
private String notifyInfo;
|
||||
|
||||
/**
|
||||
* 回调处理状态
|
||||
*
|
||||
* @see PayCallbackStatusEnum
|
||||
*/
|
||||
@DbColumn(comment = "回调处理状态")
|
||||
|
@@ -2,7 +2,6 @@ package cn.bootx.platform.daxpay.service.func;
|
||||
|
||||
import cn.bootx.platform.daxpay.service.code.PayCallbackStatusEnum;
|
||||
import cn.bootx.platform.daxpay.service.code.PayCallbackTypeEnum;
|
||||
import cn.bootx.platform.daxpay.service.code.PayRepairSourceEnum;
|
||||
import cn.bootx.platform.daxpay.service.common.context.CallbackLocal;
|
||||
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
|
||||
import cn.bootx.platform.daxpay.service.core.payment.callback.service.PayCallbackService;
|
||||
@@ -37,7 +36,6 @@ public abstract class AbsCallbackStrategy implements PayStrategy {
|
||||
public String callback(Map<String, String> params) {
|
||||
CallbackLocal callbackInfo = PaymentContextLocal.get().getCallbackInfo();
|
||||
callbackInfo.getCallbackParam().putAll(params);
|
||||
log.info("支付回调处理: {}", params);
|
||||
// 验证消息
|
||||
if (!this.verifyNotify()) {
|
||||
callbackInfo.setCallbackStatus(PayCallbackStatusEnum.FAIL).setMsg("验证信息格式不通过");
|
||||
@@ -45,7 +43,6 @@ public abstract class AbsCallbackStrategy implements PayStrategy {
|
||||
this.saveCallbackRecord();
|
||||
return null;
|
||||
}
|
||||
PaymentContextLocal.get().getRepairInfo().setSource(PayRepairSourceEnum.CALLBACK.getCode());
|
||||
|
||||
// 判断回调类型
|
||||
PayCallbackTypeEnum callbackType = this.getCallbackType();
|
||||
@@ -100,7 +97,7 @@ public abstract class AbsCallbackStrategy implements PayStrategy {
|
||||
.setNotifyTime(LocalDateTime.now())
|
||||
.setOrderId(callbackInfo.getOrderId())
|
||||
.setGatewayOrderNo(callbackInfo.getGatewayOrderNo())
|
||||
.setRepairOrderId(callbackInfo.getPayRepairOrderId())
|
||||
.setRepairOrderId(callbackInfo.getPayRepairId())
|
||||
.setStatus(callbackInfo.getCallbackStatus().getCode())
|
||||
.setMsg(callbackInfo.getMsg());
|
||||
callbackRecordService.save(payNotifyRecord);
|
||||
|
Reference in New Issue
Block a user