mirror of
https://gitee.com/dromara/dax-pay.git
synced 2025-09-06 04:27:55 +00:00
feat 支付宝转账接口相关调整
This commit is contained in:
@@ -89,6 +89,10 @@ public interface AliPayCode {
|
||||
/** 返回退款时间 */
|
||||
String GMT_REFUND_PAY = "gmt_refund_pay";
|
||||
|
||||
// 转账状态
|
||||
/** 转账成功 */
|
||||
String TRANSFER_SUCCESS = "SUCCESS";
|
||||
|
||||
// 错误提示
|
||||
/** 交易不存在 */
|
||||
String ACQ_TRADE_NOT_EXIST = "ACQ.TRADE_NOT_EXIST";
|
||||
|
@@ -19,7 +19,7 @@ public class TransferLocal {
|
||||
private String outTransferNo;
|
||||
|
||||
/** 状态 */
|
||||
private TransferStatusEnum status = TransferStatusEnum.SUCCESS;
|
||||
private TransferStatusEnum status = TransferStatusEnum.TRANSFERRING;
|
||||
|
||||
/** 完成时间 */
|
||||
private LocalDateTime finishTime;
|
||||
|
@@ -3,22 +3,29 @@ package cn.daxpay.single.service.core.channel.alipay.service;
|
||||
import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
|
||||
import cn.daxpay.single.code.PaySyncStatusEnum;
|
||||
import cn.daxpay.single.code.RefundSyncStatusEnum;
|
||||
import cn.daxpay.single.code.TransferStatusEnum;
|
||||
import cn.daxpay.single.result.sync.TransferSyncResult;
|
||||
import cn.daxpay.single.service.code.AliPayCode;
|
||||
import cn.daxpay.single.service.core.channel.alipay.entity.AliPayConfig;
|
||||
import cn.daxpay.single.service.core.order.pay.entity.PayOrder;
|
||||
import cn.daxpay.single.service.core.order.refund.entity.RefundOrder;
|
||||
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
|
||||
import cn.daxpay.single.service.core.payment.sync.result.PayRemoteSyncResult;
|
||||
import cn.daxpay.single.service.core.payment.sync.result.RefundRemoteSyncResult;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.domain.AlipayFundTransCommonQueryModel;
|
||||
import com.alipay.api.domain.AlipayTradeFastpayRefundQueryModel;
|
||||
import com.alipay.api.domain.AlipayTradeQueryModel;
|
||||
import com.alipay.api.request.AlipayFundTransCommonQueryRequest;
|
||||
import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
|
||||
import com.alipay.api.request.AlipayTradeQueryRequest;
|
||||
import com.alipay.api.response.AlipayFundTransCommonQueryResponse;
|
||||
import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse;
|
||||
import com.alipay.api.response.AlipayTradeQueryResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -140,4 +147,26 @@ public class AliPaySyncService {
|
||||
}
|
||||
return syncResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转账同步
|
||||
*/
|
||||
@SneakyThrows
|
||||
public TransferSyncResult syncTransferStatus(TransferOrder transferOrder){
|
||||
AlipayClient alipayClient = aliPayConfigService.getAlipayClient();
|
||||
// 构造请求参数以调用接口
|
||||
AlipayFundTransCommonQueryRequest request = new AlipayFundTransCommonQueryRequest();
|
||||
AlipayFundTransCommonQueryModel model = new AlipayFundTransCommonQueryModel();
|
||||
// 设置销售产品码
|
||||
model.setProductCode("STD_RED_PACKET");
|
||||
// 设置描述特定的业务场景
|
||||
model.setBizScene("PERSONAL_PAY");
|
||||
// 设置商户转账唯一订单号
|
||||
model.setOutBizNo(transferOrder.getTransferNo());
|
||||
request.setBizModel(model);
|
||||
AlipayFundTransCommonQueryResponse response = alipayClient.execute(request);
|
||||
System.out.println(response.getBody());
|
||||
return new TransferSyncResult().setStatus(TransferStatusEnum.FAIL.getCode());
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -8,17 +8,16 @@ import cn.daxpay.single.service.common.context.TransferLocal;
|
||||
import cn.daxpay.single.service.common.local.PaymentContextLocal;
|
||||
import cn.daxpay.single.service.core.channel.alipay.entity.AliPayConfig;
|
||||
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
|
||||
import cn.daxpay.single.util.OrderNoGenerateUtil;
|
||||
import cn.daxpay.single.util.PayUtil;
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.domain.AlipayFundAccountQueryModel;
|
||||
import com.alipay.api.domain.AlipayFundTransToaccountTransferModel;
|
||||
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
|
||||
import com.alipay.api.domain.Participant;
|
||||
import com.alipay.api.request.AlipayFundAccountQueryRequest;
|
||||
import com.alipay.api.request.AlipayFundTransToaccountTransferRequest;
|
||||
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
|
||||
import com.alipay.api.response.AlipayFundAccountQueryResponse;
|
||||
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;
|
||||
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -57,18 +56,35 @@ public class AliPayTransferService {
|
||||
@SneakyThrows
|
||||
public void transfer(TransferOrder order, AliPayConfig aliPayConfig){
|
||||
AlipayClient alipayClient = aliPayConfigService.getAlipayClient(aliPayConfig);
|
||||
AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel();
|
||||
model.setAmount(PayUtil.conversionAmount(order.getAmount()).toString());
|
||||
model.setOutBizNo(OrderNoGenerateUtil.transfer());
|
||||
model.setPayeeType(order.getPayeeType());
|
||||
model.setPayeeAccount(order.getPayeeAccount());
|
||||
model.setPayerShowName(order.getPayerShowName());
|
||||
// 标题需要用附加方式传输进去
|
||||
model.setExtParam(StrUtil.format("{order_title: '{}'}", order.getTitle()));
|
||||
|
||||
// 构造请求参数以调用接口
|
||||
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
|
||||
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
|
||||
|
||||
// 设置转账业务的标题
|
||||
model.setOrderTitle(order.getTitle());
|
||||
// 设置描述特定的业务场景
|
||||
model.setBizScene("DIRECT_TRANSFER");
|
||||
// 设置业务产品码
|
||||
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
|
||||
// 设置转账业务请求的扩展参数
|
||||
model.setBusinessParams("{payer_show_name_use_alias: true}");
|
||||
// 设置业务备注
|
||||
model.setRemark(order.getReason());
|
||||
// 设置商家侧唯一订单号
|
||||
model.setOutBizNo(order.getTransferNo());
|
||||
// 设置订单总金额
|
||||
model.setTransAmount(PayUtil.conversionAmount(order.getAmount()).toString());
|
||||
|
||||
// 设置收款方信息
|
||||
Participant payeeInfo = new Participant();
|
||||
payeeInfo.setIdentity(order.getPayeeAccount());
|
||||
payeeInfo.setName(order.getPayeeName());
|
||||
payeeInfo.setIdentityType(order.getPayeeType());
|
||||
model.setPayeeInfo(payeeInfo);
|
||||
model.setRemark(order.getReason());
|
||||
AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
|
||||
request.setBizModel(model);
|
||||
AlipayFundTransToaccountTransferResponse response = alipayClient.execute(request);
|
||||
AlipayFundTransUniTransferResponse response = alipayClient.execute(request);
|
||||
if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) {
|
||||
log.error("网关返回退款失败: {}", response.getSubMsg());
|
||||
throw new PayFailureException(response.getSubMsg());
|
||||
@@ -77,9 +93,10 @@ public class AliPayTransferService {
|
||||
// 通道转账号
|
||||
transferInfo.setOutTransferNo(response.getOrderId());
|
||||
// 有完成时间代表处理完成
|
||||
String payDate = response.getPayDate();
|
||||
if (StrUtil.isNotBlank(payDate)){
|
||||
LocalDateTime time = LocalDateTimeUtil.parse(payDate, DatePattern.NORM_DATETIME_PATTERN);
|
||||
if (Objects.equals(response.getStatus(), AliPayCode.TRANSFER_SUCCESS)){
|
||||
// 时间
|
||||
String transDate = response.getTransDate();
|
||||
LocalDateTime time = LocalDateTimeUtil.parse(transDate, DatePattern.NORM_DATETIME_PATTERN);
|
||||
transferInfo.setFinishTime(time).setStatus(TransferStatusEnum.SUCCESS);
|
||||
}
|
||||
}
|
||||
|
@@ -7,7 +7,6 @@ import cn.bootx.platform.common.query.generator.QueryGenerator;
|
||||
import cn.daxpay.single.code.PayStatusEnum;
|
||||
import cn.daxpay.single.code.RefundStatusEnum;
|
||||
import cn.daxpay.single.service.core.order.refund.entity.RefundOrder;
|
||||
import cn.daxpay.single.service.param.order.PayOrderQuery;
|
||||
import cn.daxpay.single.service.param.order.RefundOrderQuery;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -86,7 +85,7 @@ public class RefundOrderManager extends BaseManager<RefundOrderMapper, RefundOrd
|
||||
/**
|
||||
* 查询汇总金额
|
||||
*/
|
||||
public Integer getTalAmount(PayOrderQuery query){
|
||||
public Integer getTalAmount(RefundOrderQuery query){
|
||||
QueryWrapper<RefundOrder> generator = QueryGenerator.generator(query);
|
||||
generator.eq(MpUtil.getColumnName(RefundOrder::getStatus), PayStatusEnum.SUCCESS.getCode());
|
||||
return baseMapper.getTalAmount(generator);
|
||||
|
@@ -11,7 +11,6 @@ import cn.daxpay.single.service.core.order.refund.convert.RefundOrderConvert;
|
||||
import cn.daxpay.single.service.core.order.refund.dao.RefundOrderManager;
|
||||
import cn.daxpay.single.service.core.order.refund.entity.RefundOrder;
|
||||
import cn.daxpay.single.service.dto.order.refund.RefundOrderDto;
|
||||
import cn.daxpay.single.service.param.order.PayOrderQuery;
|
||||
import cn.daxpay.single.service.param.order.RefundOrderQuery;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -89,7 +88,7 @@ public class RefundOrderQueryService {
|
||||
/**
|
||||
* 查询支付总金额
|
||||
*/
|
||||
public Integer getTotalAmount(PayOrderQuery param) {
|
||||
public Integer getTotalAmount(RefundOrderQuery param) {
|
||||
return refundOrderManager.getTalAmount(param);
|
||||
}
|
||||
|
||||
|
@@ -50,8 +50,6 @@ public class RefundOrderService {
|
||||
refundParam.setReason(param.getReason());
|
||||
refundParam.setReqTime(LocalDateTime.now());
|
||||
refundParam.setClientIp(ip);
|
||||
// 手动初始化上下文
|
||||
paymentAssistService.initRequest(refundParam);
|
||||
// 调用统一退款接口
|
||||
refundService.refund(refundParam);
|
||||
}
|
||||
@@ -60,8 +58,7 @@ public class RefundOrderService {
|
||||
* 重新退款
|
||||
*/
|
||||
public void resetRefund(Long id){
|
||||
|
||||
// 查询扩展信息
|
||||
// 查询信息
|
||||
RefundOrder refundOrder = refundOrderManager.findById(id)
|
||||
.orElseThrow(() -> new DataNotExistException("未找到退款订单"));
|
||||
|
||||
@@ -76,8 +73,7 @@ public class RefundOrderService {
|
||||
refundParam.setAttach(refundOrder.getAttach());
|
||||
refundParam.setReqTime(LocalDateTime.now());
|
||||
refundParam.setClientIp(ip);
|
||||
|
||||
// 手动初始化请求上下文
|
||||
paymentAssistService.initRequest(refundParam);
|
||||
// 调用统一退款接口
|
||||
refundService.refund(refundParam);
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
package cn.daxpay.single.service.core.order.transfer.convert;
|
||||
|
||||
import cn.daxpay.single.result.order.TransferOrderResult;
|
||||
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
|
||||
import cn.daxpay.single.service.dto.order.transfer.TransferOrderDto;
|
||||
import org.mapstruct.Mapper;
|
||||
@@ -15,4 +16,7 @@ public interface TransferOrderConvert {
|
||||
TransferOrderConvert CONVERT = Mappers.getMapper(TransferOrderConvert.class);
|
||||
|
||||
TransferOrderDto convert(TransferOrder in);
|
||||
|
||||
|
||||
TransferOrderResult convertResult(TransferOrder in);
|
||||
}
|
||||
|
@@ -1,11 +1,21 @@
|
||||
package cn.daxpay.single.service.core.order.transfer.dao;
|
||||
|
||||
import cn.bootx.platform.common.core.rest.param.PageParam;
|
||||
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
|
||||
import cn.bootx.platform.common.mybatisplus.util.MpUtil;
|
||||
import cn.bootx.platform.common.query.generator.QueryGenerator;
|
||||
import cn.daxpay.single.code.PayStatusEnum;
|
||||
import cn.daxpay.single.service.core.order.refund.entity.RefundOrder;
|
||||
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
|
||||
import cn.daxpay.single.service.param.order.TransferOrderQuery;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author xxm
|
||||
@@ -15,4 +25,37 @@ import org.springframework.stereotype.Repository;
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class TransferOrderManager extends BaseManager<TransferOrderMapper, TransferOrder> {
|
||||
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
public Page<TransferOrder> page(PageParam pageParam, TransferOrderQuery query) {
|
||||
Page<TransferOrder> mpPage = MpUtil.getMpPage(pageParam, TransferOrder.class);
|
||||
QueryWrapper<TransferOrder> generator = QueryGenerator.generator(query);
|
||||
return page(mpPage,generator);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据转账号查询
|
||||
*/
|
||||
public Optional<TransferOrder> findByTransferNo(String transferNo) {
|
||||
return findByField(TransferOrder::getTransferNo, transferNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据商户转账号查询
|
||||
*/
|
||||
public Optional<TransferOrder> findByBizTransferNo(String bizTransferNo) {
|
||||
return findByField(TransferOrder::getBizTransferNo, bizTransferNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询汇总金额
|
||||
*/
|
||||
public Integer getTalAmount(TransferOrderQuery query){
|
||||
QueryWrapper<TransferOrderQuery> generator = QueryGenerator.generator(query);
|
||||
generator.eq(MpUtil.getColumnName(RefundOrder::getStatus), PayStatusEnum.SUCCESS.getCode());
|
||||
return baseMapper.getTalAmount(generator);
|
||||
}
|
||||
}
|
||||
|
@@ -1,8 +1,13 @@
|
||||
package cn.daxpay.single.service.core.order.transfer.dao;
|
||||
|
||||
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
|
||||
import cn.daxpay.single.service.param.order.TransferOrderQuery;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -11,4 +16,10 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
*/
|
||||
@Mapper
|
||||
public interface TransferOrderMapper extends BaseMapper<TransferOrder> {
|
||||
|
||||
/**
|
||||
* 查询转账总金额
|
||||
*/
|
||||
@Select("select sum(amount) from pay_transfer_order ${ew.customSqlSegment}")
|
||||
Integer getTalAmount(@Param(Constants.WRAPPER) QueryWrapper<TransferOrderQuery> generator);
|
||||
}
|
||||
|
@@ -76,10 +76,6 @@ public class TransferOrder extends MpBaseEntity implements EntityBaseFunction<Tr
|
||||
@DbColumn(comment = "付款方", length = 100)
|
||||
private String payer;
|
||||
|
||||
/** 付款方显示名称 */
|
||||
@DbColumn(comment = "付款方显示名称", length = 50)
|
||||
private String payerShowName;
|
||||
|
||||
/**
|
||||
* 收款人类型
|
||||
* @see TransferPayeeTypeEnum
|
||||
|
@@ -0,0 +1,94 @@
|
||||
package cn.daxpay.single.service.core.order.transfer.service;
|
||||
|
||||
import cn.bootx.platform.common.core.exception.DataNotExistException;
|
||||
import cn.bootx.platform.common.core.rest.PageResult;
|
||||
import cn.bootx.platform.common.core.rest.param.PageParam;
|
||||
import cn.bootx.platform.common.mybatisplus.util.MpUtil;
|
||||
import cn.daxpay.single.exception.pay.PayFailureException;
|
||||
import cn.daxpay.single.param.payment.transfer.QueryTransferParam;
|
||||
import cn.daxpay.single.result.order.TransferOrderResult;
|
||||
import cn.daxpay.single.service.core.order.transfer.convert.TransferOrderConvert;
|
||||
import cn.daxpay.single.service.core.order.transfer.dao.TransferOrderManager;
|
||||
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
|
||||
import cn.daxpay.single.service.dto.order.transfer.TransferOrderDto;
|
||||
import cn.daxpay.single.service.param.order.TransferOrderQuery;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 转账订单查询服务
|
||||
* @author xxm
|
||||
* @since 2024/3/21
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class TransferOrderQueryService {
|
||||
private final TransferOrderManager transferOrderManager;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
public PageResult<TransferOrderDto> page(PageParam pageParam, TransferOrderQuery query) {
|
||||
Page<TransferOrder> page = transferOrderManager.page(pageParam, query);
|
||||
return MpUtil.convert2DtoPageResult(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id查询
|
||||
*/
|
||||
public TransferOrderDto findById(Long id) {
|
||||
return transferOrderManager.findById(id).map(TransferOrder::toDto)
|
||||
.orElseThrow(() -> new DataNotExistException("转账订单不存在"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据转账号查询
|
||||
*/
|
||||
public TransferOrderDto findByTransferNo(String transferNo){
|
||||
return transferOrderManager.findByTransferNo(transferNo).map(TransferOrder::toDto)
|
||||
.orElseThrow(() -> new DataNotExistException("转账订单扩展信息不存在"));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据转账号和商户转账号查询
|
||||
*/
|
||||
public Optional<TransferOrder> findByBizOrTransferNo(String transferNo, String bizTransferNo) {
|
||||
if (StrUtil.isNotBlank(transferNo)){
|
||||
return transferOrderManager.findByTransferNo(transferNo);
|
||||
} else if (StrUtil.isNotBlank(bizTransferNo)){
|
||||
return transferOrderManager.findByBizTransferNo(bizTransferNo);
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询转账订单
|
||||
*/
|
||||
public TransferOrderResult queryTransferOrder(QueryTransferParam param) {
|
||||
// 校验参数
|
||||
if (StrUtil.isBlank(param.getTransferNo()) && Objects.isNull(param.getBizTransferNo())){
|
||||
throw new PayFailureException("转账号或商户转账号不能都为空");
|
||||
}
|
||||
// 查询转账单
|
||||
TransferOrder transferOrder = this.findByBizOrTransferNo(param.getTransferNo(), param.getBizTransferNo())
|
||||
.orElseThrow(() -> new PayFailureException("转账订单不存在"));
|
||||
|
||||
return TransferOrderConvert.CONVERT.convertResult(transferOrder);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询支付总金额
|
||||
*/
|
||||
public Integer getTotalAmount(TransferOrderQuery param) {
|
||||
return transferOrderManager.getTalAmount(param);
|
||||
}
|
||||
}
|
@@ -5,9 +5,9 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 转正订单服务
|
||||
* 转账订单服务
|
||||
* @author xxm
|
||||
* @since 2024/3/21
|
||||
* @since 2024/6/17
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@@ -15,6 +15,17 @@ import org.springframework.stereotype.Service;
|
||||
public class TransferOrderService {
|
||||
|
||||
/**
|
||||
* 创建订单
|
||||
* 手动转账
|
||||
*/
|
||||
public void transfer(){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 重试转账
|
||||
*/
|
||||
public void retryTransfer(){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -40,9 +40,8 @@ public class PaymentVerifyAop {
|
||||
if (param instanceof PaymentCommonParam){
|
||||
// 参数校验
|
||||
ValidationUtil.validateParam(param);
|
||||
|
||||
// 请求上下文初始化
|
||||
paymentAssistService.initRequest((PaymentCommonParam) param);
|
||||
// 终端信息初始化
|
||||
paymentAssistService.initClient((PaymentCommonParam) param);
|
||||
// 参数签名校验
|
||||
paymentAssistService.signVerify((PaymentCommonParam) param);
|
||||
// 参数请求时间校验
|
||||
|
@@ -32,7 +32,7 @@ public class PaymentAssistService {
|
||||
/**
|
||||
* 初始化请求相关信息上下文
|
||||
*/
|
||||
public void initRequest(PaymentCommonParam paymentCommonParam){
|
||||
public void initClient(PaymentCommonParam paymentCommonParam){
|
||||
ClientLocal request = PaymentContextLocal.get().getClientInfo();
|
||||
request.setClientIp(paymentCommonParam.getClientIp());
|
||||
}
|
||||
|
@@ -0,0 +1,26 @@
|
||||
package cn.daxpay.single.service.core.payment.sync.service;
|
||||
|
||||
import cn.daxpay.single.param.payment.transfer.TransferSyncParam;
|
||||
import cn.daxpay.single.result.sync.TransferSyncResult;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 转账同步接口
|
||||
* @author xxm
|
||||
* @since 2024/6/17
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class TransferSyncService {
|
||||
|
||||
/**
|
||||
* 转账同步接口
|
||||
*/
|
||||
public TransferSyncResult sync(TransferSyncParam param) {
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -2,7 +2,6 @@ package cn.daxpay.single.service.core.payment.sync.strategy.Refund;
|
||||
|
||||
import cn.daxpay.single.code.PayChannelEnum;
|
||||
import cn.daxpay.single.code.PaySyncStatusEnum;
|
||||
import cn.daxpay.single.service.core.channel.alipay.service.AliPayConfigService;
|
||||
import cn.daxpay.single.service.core.channel.alipay.service.AliPaySyncService;
|
||||
import cn.daxpay.single.service.core.payment.sync.result.RefundRemoteSyncResult;
|
||||
import cn.daxpay.single.service.func.AbsRefundSyncStrategy;
|
||||
@@ -22,8 +21,6 @@ import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROT
|
||||
@RequiredArgsConstructor
|
||||
public class AliRefundSyncStrategy extends AbsRefundSyncStrategy {
|
||||
|
||||
private final AliPayConfigService alipayConfigService;
|
||||
|
||||
private final AliPaySyncService aliPaySyncService;;
|
||||
|
||||
/**
|
||||
|
@@ -0,0 +1,18 @@
|
||||
package cn.daxpay.single.service.core.payment.sync.strategy.transfer;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
|
||||
|
||||
/**
|
||||
* 转账同步接口
|
||||
* @author xxm
|
||||
* @since 2024/6/17
|
||||
*/
|
||||
@Scope(SCOPE_PROTOTYPE)
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AliTransferSyncStrategy {
|
||||
}
|
@@ -39,7 +39,6 @@ public class TransferAssistService {
|
||||
.setPayeeName(param.getPayeeName())
|
||||
.setPayeeAccount(param.getPayeeAccount())
|
||||
.setPayeeType(param.getPayeeType())
|
||||
.setPayerShowName(param.getPayerShowName())
|
||||
.setReason(param.getReason())
|
||||
.setStatus(TransferStatusEnum.TRANSFERRING.getCode())
|
||||
.setTitle(param.getTitle())
|
||||
|
@@ -27,7 +27,7 @@ public class TransferOrderDto extends BaseDto {
|
||||
private String bizTransferNo;
|
||||
|
||||
/** 转账号 */
|
||||
@Schema(description = "收款人账号")
|
||||
@Schema(description = "转账号")
|
||||
private String transferNo;
|
||||
|
||||
/** 通道转账号 */
|
||||
@@ -64,10 +64,6 @@ public class TransferOrderDto extends BaseDto {
|
||||
@Schema(description = "付款方")
|
||||
private String payer;
|
||||
|
||||
/** 付款方显示名称 */
|
||||
@Schema(description = "付款方显示名称")
|
||||
private String payerShowName;
|
||||
|
||||
/**
|
||||
* 收款人类型
|
||||
* @see TransferPayeeTypeEnum
|
||||
|
@@ -0,0 +1,29 @@
|
||||
package cn.daxpay.single.service.func;
|
||||
|
||||
import cn.daxpay.single.code.PaySyncStatusEnum;
|
||||
import cn.daxpay.single.service.core.order.transfer.entity.TransferOrder;
|
||||
import cn.daxpay.single.service.core.payment.sync.result.RefundRemoteSyncResult;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 转账修复策略
|
||||
* @author xxm
|
||||
* @since 2024/6/17
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class AbsTransferSyncStrategy implements PayStrategy{
|
||||
|
||||
private TransferOrder transferOrder;
|
||||
|
||||
/**
|
||||
* 同步前处理
|
||||
*/
|
||||
public void doBeforeHandler(){}
|
||||
/**
|
||||
* 异步支付单与支付网关进行状态比对后的结果
|
||||
* @see PaySyncStatusEnum
|
||||
*/
|
||||
public abstract RefundRemoteSyncResult doSyncStatus();
|
||||
}
|
@@ -0,0 +1,101 @@
|
||||
package cn.daxpay.single.service.param.order;
|
||||
|
||||
import cn.bootx.platform.common.core.annotation.QueryParam;
|
||||
import cn.bootx.platform.common.core.rest.param.QueryOrder;
|
||||
import cn.daxpay.single.code.PayChannelEnum;
|
||||
import cn.daxpay.single.code.TransferPayeeTypeEnum;
|
||||
import cn.daxpay.single.code.TransferTypeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 转账订单查询参数
|
||||
* @author xxm
|
||||
* @since 2024/6/17
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(title = "转账订单查询参数")
|
||||
public class TransferOrderQuery extends QueryOrder {
|
||||
|
||||
/** 商户转账号 */
|
||||
@Schema(description = "商户转账号")
|
||||
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
|
||||
private String bizTransferNo;
|
||||
|
||||
/** 转账号 */
|
||||
@Schema(description = "转账号")
|
||||
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
|
||||
private String transferNo;
|
||||
|
||||
/** 通道转账号 */
|
||||
@Schema(description = "通道转账号")
|
||||
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
|
||||
private String outTransferNo;
|
||||
|
||||
/**
|
||||
* 支付通道
|
||||
* @see PayChannelEnum
|
||||
*/
|
||||
@Schema(description = "支付通道")
|
||||
private String channel;
|
||||
|
||||
/** 转账金额 */
|
||||
@Schema(description = "转账金额")
|
||||
private Integer amount;
|
||||
|
||||
/** 标题 */
|
||||
@Schema(description = "标题")
|
||||
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* 转账类型, 微信使用
|
||||
* @see TransferTypeEnum
|
||||
*/
|
||||
@Schema(description = "转账类型, 微信使用")
|
||||
private String transferType;
|
||||
|
||||
/** 付款方 */
|
||||
@Schema(description = "付款方")
|
||||
private String payer;
|
||||
|
||||
/**
|
||||
* 收款人类型
|
||||
* @see TransferPayeeTypeEnum
|
||||
*/
|
||||
@Schema(description = "收款人类型")
|
||||
private String payeeType;
|
||||
|
||||
/** 收款人账号 */
|
||||
@Schema(description = "收款人账号")
|
||||
private String payeeAccount;
|
||||
|
||||
/** 收款人姓名 */
|
||||
@Schema(description = "收款人姓名")
|
||||
@QueryParam(type = QueryParam.CompareTypeEnum.LIKE)
|
||||
private String payeeName;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
* @see cn.daxpay.single.code.TransferStatusEnum
|
||||
*/
|
||||
@Schema(description = "状态")
|
||||
private String status;
|
||||
|
||||
/** 成功时间 */
|
||||
@Schema(description = "成功时间")
|
||||
private LocalDateTime successTime;
|
||||
|
||||
/**
|
||||
* 错误码
|
||||
*/
|
||||
@Schema(description = "错误码")
|
||||
private String errorCode;
|
||||
|
||||
}
|
Reference in New Issue
Block a user