diff --git a/_doc/Task.md b/_doc/Task.md index 7c1dd35fe..bad55e6b2 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -2,7 +2,9 @@ 2.0.8: 转账/撤销接口和系统优化 - [x] 支持撤销接口 - [x] 增加转账接口功能 -- [ ] 支付宝支持JSAPI方式支付 +- [ ] 转账同步接口 +- [x] 支付宝支持JSAPI方式支付 +- [ ] 支付宝SDK修改为官方SDK - [ ] 细分各种支付异常类和编码(部分) - [ ] 增加分账回调处理(支付宝) - [ ] 增加分账修复功能 diff --git a/bootx-platform/pom.xml b/bootx-platform/pom.xml index 3565400a1..cb4c6e1fe 100644 --- a/bootx-platform/pom.xml +++ b/bootx-platform/pom.xml @@ -61,7 +61,6 @@ 3.5.3 3.3.2 2.4.0 - 2.9.7 1.36.0 1.16.6 8.5.4 diff --git a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/allocation/AllocationParam.java b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/allocation/AllocationParam.java index 77b982fc9..cfa95ce50 100644 --- a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/allocation/AllocationParam.java +++ b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/allocation/AllocationParam.java @@ -20,7 +20,7 @@ import java.util.List; public class AllocationParam extends DaxPayRequest { /** 商户分账单号 */ - private String bizAllocationNo; + private String bizAllocNo; /** 支付订单号 */ private String orderNo; diff --git a/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/allocation/AllocationTest.java b/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/allocation/AllocationTest.java index 4e3d1a613..8bd96e016 100644 --- a/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/allocation/AllocationTest.java +++ b/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/allocation/AllocationTest.java @@ -91,7 +91,7 @@ public class AllocationTest { public void allocationOpen() { // 分账参数 AllocationParam param = new AllocationParam(); - param.setBizAllocationNo("A"+ RandomUtil.randomNumbers(5)); + param.setBizAllocNo("A"+ RandomUtil.randomNumbers(5)); param.setAttach("88899"); param.setBizOrderNo("SDK_1717264053245"); param.setDescription("测试分账"); @@ -108,7 +108,7 @@ public class AllocationTest { public void allocationOpenByGroup() { // 分账参数 AllocationParam param = new AllocationParam(); - param.setBizAllocationNo("A"+ RandomUtil.randomNumbers(5)); + param.setBizAllocNo("A"+ RandomUtil.randomNumbers(5)); param.setAttach("88899"); param.setBizOrderNo("SDK_1717257064753"); param.setGroupNo("123"); @@ -126,7 +126,7 @@ public class AllocationTest { public void allocationOpenByReceivers() { // 分账参数 AllocationParam param = new AllocationParam(); - param.setBizAllocationNo("A"+ RandomUtil.randomNumbers(5)); + param.setBizAllocNo("A"+ RandomUtil.randomNumbers(5)); param.setAttach("88899"); param.setOrderNo("DEVP24060201473363000001"); AllocReceiverParam allocReceiverParam = new AllocReceiverParam(); diff --git a/daxpay-single/daxpay-single-admin/src/main/java/cn/daxpay/single/admin/controller/allocation/AllocationOrderController.java b/daxpay-single/daxpay-single-admin/src/main/java/cn/daxpay/single/admin/controller/allocation/AllocationOrderController.java index fa5b25b26..709cadf99 100644 --- a/daxpay-single/daxpay-single-admin/src/main/java/cn/daxpay/single/admin/controller/allocation/AllocationOrderController.java +++ b/daxpay-single/daxpay-single-admin/src/main/java/cn/daxpay/single/admin/controller/allocation/AllocationOrderController.java @@ -92,9 +92,9 @@ public class AllocationOrderController { @InitPaymentContext(PaymentApiCode.ALLOCATION_FINISH) @Operation(summary = "分账完结") @PostMapping("/finish") - public ResResult finish(String allocationNo){ + public ResResult finish(String allocNo){ AllocFinishParam param = new AllocFinishParam(); - param.setAllocNo(allocationNo); + param.setAllocNo(allocNo); allocationService.finish(param); return Res.ok(); } @@ -102,9 +102,9 @@ public class AllocationOrderController { @InitPaymentContext(PaymentApiCode.ALLOCATION) @Operation(summary = "重新发起分账") @PostMapping("/retry") - public ResResult retryAllocation(String bizAllocationNo){ + public ResResult retryAllocation(String bizAllocNo){ AllocationParam param = new AllocationParam(); - param.setBizAllocationNo(bizAllocationNo); + param.setBizAllocNo(bizAllocNo); allocationService.allocation(param); return Res.ok(); } diff --git a/daxpay-single/daxpay-single-admin/src/main/java/cn/daxpay/single/admin/controller/order/PayOrderController.java b/daxpay-single/daxpay-single-admin/src/main/java/cn/daxpay/single/admin/controller/order/PayOrderController.java index 8ca9612d6..d8b8e91e1 100644 --- a/daxpay-single/daxpay-single-admin/src/main/java/cn/daxpay/single/admin/controller/order/PayOrderController.java +++ b/daxpay-single/daxpay-single-admin/src/main/java/cn/daxpay/single/admin/controller/order/PayOrderController.java @@ -91,7 +91,7 @@ public class PayOrderController { public ResResult allocation(String orderNo){ AllocationParam param = new AllocationParam(); param.setOrderNo(orderNo); - param.setBizAllocationNo(OrderNoGenerateUtil.allocation()); + param.setBizAllocNo(OrderNoGenerateUtil.allocation()); allocationService.allocation(param); return Res.ok(); } diff --git a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/param/payment/allocation/AllocationParam.java b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/param/payment/allocation/AllocationParam.java index e4414e302..34a124f95 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/param/payment/allocation/AllocationParam.java +++ b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/param/payment/allocation/AllocationParam.java @@ -24,7 +24,7 @@ public class AllocationParam extends PaymentCommonParam { @NotBlank(message = "商户分账单号不可为空") @Size(max = 100, message = "商户分账单号不可超过100位") @Schema(description = "商户分账单号") - private String bizAllocationNo; + private String bizAllocNo; /** 支付订单号 */ @Size(max = 32, message = "支付订单号不可超过32位") diff --git a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/util/PayUtil.java b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/util/PayUtil.java index cfe3cd918..28d359f4f 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/util/PayUtil.java +++ b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/util/PayUtil.java @@ -4,10 +4,13 @@ import cn.bootx.platform.common.core.util.LocalDateTimeUtil; import cn.hutool.core.date.DatePattern; import lombok.experimental.UtilityClass; +import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; +import java.util.HashMap; +import java.util.Map; /** * 支付工具类 @@ -51,7 +54,7 @@ public class PayUtil { * @param amount 元的金额 * @return 分的金额 */ - public static int convertCentAmount(BigDecimal amount) { + public int convertCentAmount(BigDecimal amount) { return amount.multiply(HUNDRED).setScale(0, RoundingMode.HALF_UP).intValue(); } @@ -61,7 +64,27 @@ public class PayUtil { * @param amount 元的金额 * @return 元的金额 两位小数 */ - public static BigDecimal conversionAmount(int amount) { + public BigDecimal conversionAmount(int amount) { return BigDecimal.valueOf(amount).divide(HUNDRED,2, RoundingMode.HALF_UP); } + + /** + * 获取请求参数 + */ + public Map toMap(HttpServletRequest request) { + Map params = new HashMap<>(); + Map requestParams = request.getParameterMap(); + + for (String name : requestParams.keySet()) { + String[] values = requestParams.get(name); + String valueStr = ""; + + for (int i = 0; i < values.length; ++i) { + valueStr = i == values.length - 1 ? valueStr + values[i] : valueStr + values[i] + ","; + } + + params.put(name, valueStr); + } + return params; + } } diff --git a/daxpay-single/daxpay-single-gateway/src/main/java/cn/daxpay/single/gateway/controller/PayCallbackController.java b/daxpay-single/daxpay-single-gateway/src/main/java/cn/daxpay/single/gateway/controller/PayCallbackController.java index 8eecdc17a..99991b8bc 100644 --- a/daxpay-single/daxpay-single-gateway/src/main/java/cn/daxpay/single/gateway/controller/PayCallbackController.java +++ b/daxpay-single/daxpay-single-gateway/src/main/java/cn/daxpay/single/gateway/controller/PayCallbackController.java @@ -7,8 +7,8 @@ import cn.daxpay.single.service.core.channel.wechat.service.WeChatPayCallbackSer import cn.daxpay.single.service.core.extra.AliPayAuthService; import cn.daxpay.single.service.core.extra.WeChatAuthService; import cn.daxpay.single.service.sdk.union.api.UnionPayKit; +import cn.daxpay.single.util.PayUtil; import com.egzosn.pay.union.api.UnionPayConfigStorage; -import com.ijpay.alipay.AliPayApi; import com.ijpay.core.kit.HttpKit; import com.ijpay.core.kit.WxPayKit; import io.swagger.v3.oas.annotations.Operation; @@ -50,7 +50,7 @@ public class PayCallbackController { @Operation(summary = "支付宝信息回调") @PostMapping("/alipay") public String aliPayNotify(HttpServletRequest request) { - Map stringStringMap = AliPayApi.toMap(request); + Map stringStringMap = PayUtil.toMap(request); return aliPayCallbackService.callback(stringStringMap); } diff --git a/daxpay-single/daxpay-single-gateway/src/main/java/cn/daxpay/single/gateway/controller/PayNoticeReceiverController.java b/daxpay-single/daxpay-single-gateway/src/main/java/cn/daxpay/single/gateway/controller/PayNoticeReceiverController.java index a34beb89c..bacfb5fc6 100644 --- a/daxpay-single/daxpay-single-gateway/src/main/java/cn/daxpay/single/gateway/controller/PayNoticeReceiverController.java +++ b/daxpay-single/daxpay-single-gateway/src/main/java/cn/daxpay/single/gateway/controller/PayNoticeReceiverController.java @@ -2,7 +2,7 @@ package cn.daxpay.single.gateway.controller; import cn.bootx.platform.common.core.annotation.IgnoreAuth; import cn.daxpay.single.service.core.channel.alipay.service.AliPayNoticeReceiverService; -import com.ijpay.alipay.AliPayApi; +import cn.daxpay.single.util.PayUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -32,7 +32,7 @@ public class PayNoticeReceiverController { @Operation(summary = "支付宝消息通知") @PostMapping("/alipay") public String aliPayNotice(HttpServletRequest request) { - Map map = AliPayApi.toMap(request); + Map map = PayUtil.toMap(request); return aliPayNoticeReceiverService.noticeReceiver(map); } diff --git a/daxpay-single/daxpay-single-service/pom.xml b/daxpay-single/daxpay-single-service/pom.xml index e3917bed8..cfc91d960 100644 --- a/daxpay-single/daxpay-single-service/pom.xml +++ b/daxpay-single/daxpay-single-service/pom.xml @@ -78,17 +78,11 @@ ${daxpay.version} - + - com.github.javen205 - IJPay-AliPay - ${IJPay.version} - - - fastjson - com.alibaba - - + com.alipay.sdk + alipay-sdk-java + ${alipay.version} diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/common/context/AllocationLocal.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/common/context/AllocationLocal.java index 5a17bd57c..2a0ee1345 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/common/context/AllocationLocal.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/common/context/AllocationLocal.java @@ -13,5 +13,5 @@ import lombok.experimental.Accessors; public class AllocationLocal { /** 通道分账号 */ - private String outAllocationNo; + private String outAllocNo; } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayAllocationReceiverService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayAllocationReceiverService.java index 68c79e92e..e86e0a478 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayAllocationReceiverService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayAllocationReceiverService.java @@ -3,15 +3,18 @@ package cn.daxpay.single.service.core.channel.alipay.service; import cn.daxpay.single.code.AllocReceiverTypeEnum; import cn.daxpay.single.exception.pay.PayFailureException; import cn.daxpay.single.service.code.AliPayCode; +import cn.daxpay.single.service.core.channel.alipay.entity.AliPayConfig; import cn.daxpay.single.service.core.payment.allocation.entity.AllocationReceiver; import cn.hutool.core.util.StrUtil; +import com.alipay.api.AlipayClient; import com.alipay.api.AlipayResponse; import com.alipay.api.domain.AlipayTradeRoyaltyRelationBindModel; import com.alipay.api.domain.AlipayTradeRoyaltyRelationUnbindModel; import com.alipay.api.domain.RoyaltyEntity; +import com.alipay.api.request.AlipayTradeRoyaltyRelationBindRequest; +import com.alipay.api.request.AlipayTradeRoyaltyRelationUnbindRequest; import com.alipay.api.response.AlipayTradeRoyaltyRelationBindResponse; import com.alipay.api.response.AlipayTradeRoyaltyRelationUnbindResponse; -import com.ijpay.alipay.AliPayApi; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -33,6 +36,7 @@ import static cn.daxpay.single.code.AllocReceiverTypeEnum.*; @Service @RequiredArgsConstructor public class AliPayAllocationReceiverService { + private final AliPayConfigService aliPayConfigService; /** * 校验 @@ -47,7 +51,8 @@ public class AliPayAllocationReceiverService { * 绑定关系 */ @SneakyThrows - public void bind(AllocationReceiver allocationReceiver){ + public void bind(AllocationReceiver allocationReceiver, AliPayConfig aliPayConfig){ + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(aliPayConfig); AlipayTradeRoyaltyRelationBindModel model = new AlipayTradeRoyaltyRelationBindModel(); model.setOutRequestNo(String.valueOf(allocationReceiver.getId())); @@ -60,7 +65,9 @@ public class AliPayAllocationReceiverService { // 不报错视为同步成功 model.setReceiverList(Collections.singletonList(entity)); - AlipayTradeRoyaltyRelationBindResponse response = AliPayApi.tradeRoyaltyRelationBind(model); + AlipayTradeRoyaltyRelationBindRequest request = new AlipayTradeRoyaltyRelationBindRequest(); + request.setBizModel(model); + AlipayTradeRoyaltyRelationBindResponse response = alipayClient.execute(request); this.verifyErrorMsg(response); } @@ -68,7 +75,8 @@ public class AliPayAllocationReceiverService { * 解绑关系 */ @SneakyThrows - public void unbind(AllocationReceiver allocationReceiver){ + public void unbind(AllocationReceiver allocationReceiver, AliPayConfig aliPayConfig){ + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(aliPayConfig); AlipayTradeRoyaltyRelationUnbindModel model = new AlipayTradeRoyaltyRelationUnbindModel(); model.setOutRequestNo(String.valueOf(allocationReceiver.getId())); @@ -78,7 +86,9 @@ public class AliPayAllocationReceiverService { entity.setAccount(allocationReceiver.getReceiverAccount()); model.setReceiverList(Collections.singletonList(entity)); - AlipayTradeRoyaltyRelationUnbindResponse response = AliPayApi.tradeRoyaltyRelationUnBind(model); + AlipayTradeRoyaltyRelationUnbindRequest request = new AlipayTradeRoyaltyRelationUnbindRequest(); + request.setBizModel(model); + AlipayTradeRoyaltyRelationUnbindResponse response = alipayClient.execute(request); System.out.println(response); // 如果出现分账方不存在也视为成功 if (Objects.equals(response.getSubCode(), AliPayCode.USER_NOT_EXIST)) { diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayAllocationService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayAllocationService.java index 281ffc919..26711aba7 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayAllocationService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayAllocationService.java @@ -6,6 +6,7 @@ import cn.daxpay.single.code.AllocDetailResultEnum; import cn.daxpay.single.exception.pay.PayFailureException; import cn.daxpay.single.service.code.AliPayCode; 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.allocation.entity.AllocOrder; import cn.daxpay.single.service.core.order.allocation.entity.AllocOrderDetail; import cn.daxpay.single.service.core.payment.sync.result.AllocRemoteSyncResult; @@ -13,12 +14,13 @@ import cn.daxpay.single.util.PayUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.alipay.api.AlipayClient; import com.alipay.api.AlipayResponse; import com.alipay.api.domain.*; import com.alipay.api.request.AlipayTradeOrderSettleQueryRequest; +import com.alipay.api.request.AlipayTradeOrderSettleRequest; import com.alipay.api.response.AlipayTradeOrderSettleQueryResponse; import com.alipay.api.response.AlipayTradeOrderSettleResponse; -import com.ijpay.alipay.AliPayApi; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -41,12 +43,13 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class AliPayAllocationService { - + private final AliPayConfigService aliPayConfigService; /** * 发起分账 */ @SneakyThrows - public void allocation(AllocOrder allocOrder, List orderDetails){ + public void allocation(AllocOrder allocOrder, List orderDetails, AliPayConfig config){ + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(config); // 分账主体参数 AlipayTradeOrderSettleModel model = new AlipayTradeOrderSettleModel(); model.setOutRequestNo(allocOrder.getAllocNo()); @@ -64,11 +67,12 @@ public class AliPayAllocationService { }) .collect(Collectors.toList()); model.setRoyaltyParameters(royaltyParameters); - - AlipayTradeOrderSettleResponse response = AliPayApi.tradeOrderSettleToResponse(model); + AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest(); + request.setBizModel(model); + AlipayTradeOrderSettleResponse response = alipayClient.execute(request); // 需要写入到分账订单中 String settleNo = response.getSettleNo(); - PaymentContextLocal.get().getAllocationInfo().setOutAllocationNo(settleNo); + PaymentContextLocal.get().getAllocationInfo().setOutAllocNo(settleNo); this.verifyErrorMsg(response); } @@ -76,7 +80,8 @@ public class AliPayAllocationService { * 分账完结 */ @SneakyThrows - public void finish(AllocOrder allocOrder, List orderDetails ){ + public void finish(AllocOrder allocOrder, List orderDetails, AliPayConfig config){ + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(config); // 分账主体参数 AlipayTradeOrderSettleModel model = new AlipayTradeOrderSettleModel(); model.setOutRequestNo(String.valueOf(allocOrder.getAllocNo())); @@ -98,7 +103,9 @@ public class AliPayAllocationService { }) .collect(Collectors.toList()); model.setRoyaltyParameters(royaltyParameters); - AlipayTradeOrderSettleResponse response = AliPayApi.tradeOrderSettleToResponse(model); + AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest(); + request.setBizModel(model); + AlipayTradeOrderSettleResponse response = alipayClient.execute(request); this.verifyErrorMsg(response); } @@ -106,13 +113,14 @@ public class AliPayAllocationService { * 分账状态同步 */ @SneakyThrows - public AllocRemoteSyncResult sync(AllocOrder allocOrder, List allocOrderDetails){ + public AllocRemoteSyncResult sync(AllocOrder allocOrder, List allocOrderDetails, AliPayConfig config){ + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(config); AlipayTradeOrderSettleQueryModel model = new AlipayTradeOrderSettleQueryModel(); model.setTradeNo(allocOrder.getOutOrderNo()); model.setOutRequestNo(allocOrder.getAllocNo()); AlipayTradeOrderSettleQueryRequest request = new AlipayTradeOrderSettleQueryRequest(); request.setBizModel(model); - AlipayTradeOrderSettleQueryResponse response = AliPayApi.execute(request); + AlipayTradeOrderSettleQueryResponse response = alipayClient.execute(request); // 验证 this.verifyErrorMsg(response); Map detailMap = allocOrderDetails.stream() diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayCallbackService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayCallbackService.java index d1dc57e6d..941753a82 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayCallbackService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayCallbackService.java @@ -50,7 +50,6 @@ public class AliPayCallbackService { private final RefundCallbackService refundCallbackService; - /** * 回调处理入口 */ diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayCloseService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayCloseService.java index 501438990..965352aec 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayCloseService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayCloseService.java @@ -3,14 +3,17 @@ package cn.daxpay.single.service.core.channel.alipay.service; import cn.daxpay.single.code.PaySyncStatusEnum; import cn.daxpay.single.exception.pay.PayFailureException; 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.payment.sync.result.PayRemoteSyncResult; import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; import com.alipay.api.domain.AlipayTradeCancelModel; import com.alipay.api.domain.AlipayTradeCloseModel; +import com.alipay.api.request.AlipayTradeCancelRequest; +import com.alipay.api.request.AlipayTradeCloseRequest; import com.alipay.api.response.AlipayTradeCancelResponse; import com.alipay.api.response.AlipayTradeCloseResponse; -import com.ijpay.alipay.AliPayApi; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -29,6 +32,8 @@ import java.util.Objects; public class AliPayCloseService { private final AliPaySyncService aliPaySyncService; + private final AliPayConfigService aliPayConfigService; + /** * 关闭支付 此处使用交易关闭接口 * 交易关闭: 只有订单在未支付的状态下才可以进行关闭, 商户不需要额外申请就有此接口的权限 @@ -37,16 +42,18 @@ public class AliPayCloseService { * 2. 如果返回"当前交易状态不支持此操作", 同步网关支付状态, 判断网关是否已经被关闭 * */ - public void close(PayOrder payOrder) { + public void close(PayOrder payOrder, AliPayConfig config) { + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(config); AlipayTradeCloseModel model = new AlipayTradeCloseModel(); model.setOutTradeNo(payOrder.getOrderNo()); - + AlipayTradeCloseRequest request = new AlipayTradeCloseRequest(); + request.setBizModel(model); try { - AlipayTradeCloseResponse response = AliPayApi.tradeCloseToResponse(model); + AlipayTradeCloseResponse response = alipayClient.execute(request); if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) { // 如果返回"当前交易状态不支持此操作", 同步网关支付状态, 判断网关是否已经被关闭 if (Objects.equals(response.getSubCode(),AliPayCode.ACQ_TRADE_STATUS_ERROR)){ - if (this.syncStatus(payOrder)){ + if (this.syncStatus(payOrder, config)){ return; } } @@ -67,17 +74,20 @@ public class AliPayCloseService { * 交易撤销: 如果用户支付成功,会将此订单资金退还给用户. 限制时间为1天,过了24小时,该接口无法再使用。 * 可以视为一个特殊的接口, 需要专门签约这个接口的权限 */ - public void cancel(PayOrder payOrder) { + public void cancel(PayOrder payOrder, AliPayConfig config) { + + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(config); AlipayTradeCancelModel model = new AlipayTradeCancelModel(); model.setOutTradeNo(payOrder.getOrderNo()); - + AlipayTradeCancelRequest request = new AlipayTradeCancelRequest(); + request.setBizModel(model); try { - AlipayTradeCancelResponse response = AliPayApi.tradeCancelToResponse(model); + AlipayTradeCancelResponse response = alipayClient.execute(request);; if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) { if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) { // 如果返回"当前交易状态不支持此操作", 同步网关支付状态, 判断网关是否已经被关闭 if (Objects.equals(response.getSubCode(),AliPayCode.ACQ_TRADE_STATUS_ERROR)){ - if (this.syncStatus(payOrder)){ + if (this.syncStatus(payOrder, config)){ return; } } @@ -99,8 +109,8 @@ public class AliPayCloseService { /** * 关闭失败后, 获取支付网关的状态, 如果是关闭返回true, 其他情况抛出异常 */ - private boolean syncStatus(PayOrder payOrder){ - PayRemoteSyncResult gatewaySyncResult = aliPaySyncService.syncPayStatus(payOrder); + private boolean syncStatus(PayOrder payOrder, AliPayConfig config){ + PayRemoteSyncResult gatewaySyncResult = aliPaySyncService.syncPayStatus(payOrder,config); // 已经关闭 if (Objects.equals(gatewaySyncResult.getSyncStatus(), PaySyncStatusEnum.CLOSED)){ return true; diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayConfigService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayConfigService.java index 2bc533aed..bde29a6df 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayConfigService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayConfigService.java @@ -1,6 +1,5 @@ package cn.daxpay.single.service.core.channel.alipay.service; -import cn.bootx.platform.common.core.exception.BizException; import cn.bootx.platform.common.core.exception.DataNotExistException; import cn.bootx.platform.common.core.rest.dto.LabelValue; import cn.daxpay.single.exception.pay.PayFailureException; @@ -12,12 +11,9 @@ import cn.daxpay.single.service.core.system.config.service.PlatformConfigService import cn.daxpay.single.service.param.channel.alipay.AliPayConfigParam; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.util.CharsetUtil; import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; -import com.ijpay.alipay.AliPayApiConfig; -import com.ijpay.alipay.AliPayApiConfigKit; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -126,41 +122,4 @@ public class AliPayConfigService { } return new DefaultAlipayClient(config); } - - /** - * 初始化IJPay服务 - */ - @SneakyThrows - public void initConfig(AliPayConfig alipayConfig) { - AliPayApiConfig aliPayApiConfig; - // 公钥 - if (Objects.equals(alipayConfig.getAuthType(), AliPayCode.AUTH_TYPE_KEY)) { - aliPayApiConfig = AliPayApiConfig.builder() - .setAppId(alipayConfig.getAppId()) - .setPrivateKey(alipayConfig.getPrivateKey()) - .setAliPayPublicKey(alipayConfig.getAlipayPublicKey()) - .setCharset(CharsetUtil.UTF_8) - .setServiceUrl(alipayConfig.getServerUrl()) - .setSignType(alipayConfig.getSignType()) - .build(); - } - // 证书 - else if (Objects.equals(alipayConfig.getAuthType(), AliPayCode.AUTH_TYPE_CART)) { - aliPayApiConfig = AliPayApiConfig.builder() - .setAppId(alipayConfig.getAppId()) - .setPrivateKey(alipayConfig.getPrivateKey()) - .setAppCertContent(alipayConfig.getAppCert()) - .setAliPayCertContent(alipayConfig.getAlipayCert()) - .setAliPayRootCertContent(alipayConfig.getAlipayRootCert()) - .setCharset(CharsetUtil.UTF_8) - .setServiceUrl(alipayConfig.getServerUrl()) - .setSignType(alipayConfig.getSignType()) - .buildByCertContent(); - } - else { - throw new BizException("支付宝认证方式不可为空"); - } - AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig); - } - } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayNoticeReceiverService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayNoticeReceiverService.java index 111874f5e..f67eb501f 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayNoticeReceiverService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayNoticeReceiverService.java @@ -29,8 +29,6 @@ import static cn.daxpay.single.service.code.AliPayCode.AUTH_TYPE_KEY; @RequiredArgsConstructor public class AliPayNoticeReceiverService { - private final AllocationCallbackService allocationCallbackService; - private final AliPayConfigService aliPayConfigService; /** diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayReconcileService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayReconcileService.java index aaeb7be97..e2c1facda 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayReconcileService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayReconcileService.java @@ -1,7 +1,6 @@ package cn.daxpay.single.service.core.channel.alipay.service; import cn.bootx.platform.common.core.util.LocalDateTimeUtil; -import cn.daxpay.single.code.PayChannelEnum; import cn.daxpay.single.code.ReconcileTradeEnum; import cn.daxpay.single.exception.pay.PayFailureException; import cn.daxpay.single.service.code.AliPayCode; @@ -9,6 +8,7 @@ import cn.daxpay.single.service.code.ReconcileFileTypeEnum; import cn.daxpay.single.service.common.local.PaymentContextLocal; import cn.daxpay.single.service.core.channel.alipay.dao.AliReconcileBillDetailManager; import cn.daxpay.single.service.core.channel.alipay.dao.AliReconcileBillTotalManager; +import cn.daxpay.single.service.core.channel.alipay.entity.AliPayConfig; import cn.daxpay.single.service.core.channel.alipay.entity.AliReconcileBillDetail; import cn.daxpay.single.service.core.channel.alipay.entity.AliReconcileBillTotal; import cn.daxpay.single.service.core.order.reconcile.dao.ReconcileFileManager; @@ -23,12 +23,13 @@ import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; import com.alipay.api.domain.AlipayDataDataserviceBillDownloadurlQueryModel; -import com.ijpay.alipay.AliPayApi; +import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest; +import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import lombok.val; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.dromara.x.file.storage.core.FileInfo; @@ -57,6 +58,8 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class AliPayReconcileService { + private final AliPayConfigService aliPayConfigService; + private final AliReconcileBillDetailManager reconcileBillDetailManager; private final AliReconcileBillTotalManager reconcileBillTotalManager; @@ -71,16 +74,19 @@ public class AliPayReconcileService { * * @param date 对账日期 yyyy-MM-dd 格式 * @param recordOrder 对账单对象 + * @param config */ @SneakyThrows @Transactional(rollbackFor = Exception.class) - public void downAndSave(String date, ReconcileOrder recordOrder){ - + public void downAndSave(String date, ReconcileOrder recordOrder, AliPayConfig config){ try { + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(config); AlipayDataDataserviceBillDownloadurlQueryModel model = new AlipayDataDataserviceBillDownloadurlQueryModel(); model.setBillDate(date); model.setBillType("trade"); - val response = AliPayApi.billDownloadUrlQueryToResponse(model); + AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest(); + request.setBizModel(model); + AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request); // 判断返回结果 if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) { log.error("获取支付宝对账单失败: {}", response.getSubMsg()); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayRefundService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayRefundService.java index 6d05b51f2..4dc16feb8 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayRefundService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayRefundService.java @@ -6,12 +6,14 @@ import cn.daxpay.single.service.code.AliPayCode; import cn.daxpay.single.service.common.context.ErrorInfoLocal; import cn.daxpay.single.service.common.context.RefundLocal; 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.refund.entity.RefundOrder; import cn.daxpay.single.util.PayUtil; import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; import com.alipay.api.domain.AlipayTradeRefundModel; +import com.alipay.api.request.AlipayTradeRefundRequest; import com.alipay.api.response.AlipayTradeRefundResponse; -import com.ijpay.alipay.AliPayApi; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -29,22 +31,27 @@ import java.util.Objects; @RequiredArgsConstructor public class AliPayRefundService { + private final AliPayConfigService aliPayConfigService; + /** * 退款, 调用支付宝退款 */ - public void refund(RefundOrder refundOrder) { + public void refund(RefundOrder refundOrder, AliPayConfig config) { + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(config); + RefundLocal refundInfo = PaymentContextLocal.get().getRefundInfo(); ErrorInfoLocal errorInfo = PaymentContextLocal.get().getErrorInfo(); - AlipayTradeRefundModel refundModel = new AlipayTradeRefundModel(); - refundModel.setOutTradeNo(refundOrder.getOrderNo()); - refundModel.setOutRequestNo(refundOrder.getRefundNo()); + AlipayTradeRefundModel model = new AlipayTradeRefundModel(); + model.setOutTradeNo(refundOrder.getOrderNo()); + model.setOutRequestNo(refundOrder.getRefundNo()); // 金额转换 String refundAmount = PayUtil.conversionAmount(refundOrder.getAmount()).toString(); - refundModel.setRefundAmount(refundAmount); + model.setRefundAmount(refundAmount); + AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); + request.setBizModel(model); - // 设置退款信息 try { - AlipayTradeRefundResponse response = AliPayApi.tradeRefundToResponse(refundModel); + AlipayTradeRefundResponse response = alipayClient.execute(request); if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) { errorInfo.setErrorMsg(response.getSubMsg()); errorInfo.setErrorCode(response.getCode()); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayService.java index a1c3e2ca3..9378f5f4a 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayService.java @@ -21,7 +21,6 @@ import com.alipay.api.AlipayResponse; import com.alipay.api.domain.*; import com.alipay.api.request.*; import com.alipay.api.response.*; -import com.ijpay.alipay.AliPayApi; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPaySyncService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPaySyncService.java index 7d5e1c2aa..c33077328 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPaySyncService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPaySyncService.java @@ -1,20 +1,23 @@ package cn.daxpay.single.service.core.channel.alipay.service; import cn.bootx.platform.common.core.util.LocalDateTimeUtil; -import cn.daxpay.single.code.RefundSyncStatusEnum; import cn.daxpay.single.code.PaySyncStatusEnum; +import cn.daxpay.single.code.RefundSyncStatusEnum; 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.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.AlipayTradeFastpayRefundQueryModel; import com.alipay.api.domain.AlipayTradeQueryModel; +import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest; +import com.alipay.api.request.AlipayTradeQueryRequest; import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse; import com.alipay.api.response.AlipayTradeQueryResponse; -import com.ijpay.alipay.AliPayApi; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -35,6 +38,8 @@ import static cn.daxpay.single.service.code.AliPayCode.GMT_REFUND_PAY; @Service @RequiredArgsConstructor public class AliPaySyncService { + private final AliPayConfigService aliPayConfigService; + /** * 与支付宝网关同步状态, 退款状态有 * 1 远程支付成功 @@ -43,18 +48,21 @@ public class AliPaySyncService { * 4 查询不到 * 5 查询失败 */ - public PayRemoteSyncResult syncPayStatus(PayOrder payOrder) { + public PayRemoteSyncResult syncPayStatus(PayOrder payOrder, AliPayConfig aliPayConfig){ + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(aliPayConfig); PayRemoteSyncResult syncResult = new PayRemoteSyncResult().setSyncStatus(PaySyncStatusEnum.FAIL); // 查询 try { - AlipayTradeQueryModel queryModel = new AlipayTradeQueryModel(); - queryModel.setOutTradeNo(payOrder.getOrderNo()); - AlipayTradeQueryResponse response = AliPayApi.tradeQueryToResponse(queryModel); + AlipayTradeQueryModel model = new AlipayTradeQueryModel(); + model.setOutTradeNo(payOrder.getOrderNo()); + AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); + request.setBizModel(model); + AlipayTradeQueryResponse response = alipayClient.execute(request); String tradeStatus = response.getTradeStatus(); syncResult.setSyncInfo(JSONUtil.toJsonStr(response)); // 设置网关订单号 syncResult.setOutOrderNo(response.getTradeNo()); - // 支付完成 TODO 部分退款也在这个地方, 但无法进行区分, 需要借助对账进行处理 + // 支付完成 部分退款无法进行区分, 需要借助对账进行处理 if (Objects.equals(tradeStatus, AliPayCode.NOTIFY_TRADE_SUCCESS) || Objects.equals(tradeStatus, AliPayCode.NOTIFY_TRADE_FINISHED)) { // 支付完成时间 LocalDateTime payTime = LocalDateTimeUtil.of(response.getSendPayDate()); @@ -96,17 +104,20 @@ public class AliPaySyncService { * 退款同步查询 * 注意: 支付宝退款没有网关订单号, 网关订单号是支付单的 */ - public RefundRemoteSyncResult syncRefundStatus(RefundOrder refundOrder) { + public RefundRemoteSyncResult syncRefundStatus(RefundOrder refundOrder){ + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(); RefundRemoteSyncResult syncResult = new RefundRemoteSyncResult().setSyncStatus(RefundSyncStatusEnum.FAIL); try { - AlipayTradeFastpayRefundQueryModel queryModel = new AlipayTradeFastpayRefundQueryModel(); + AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel(); // 退款请求号 - queryModel.setOutRequestNo(String.valueOf(refundOrder.getRefundNo())); + model.setOutRequestNo(String.valueOf(refundOrder.getRefundNo())); // 商户订单号 - queryModel.setOutTradeNo(String.valueOf(refundOrder.getOrderNo())); + model.setOutTradeNo(String.valueOf(refundOrder.getOrderNo())); // 设置返回退款完成时间 - queryModel.setQueryOptions(Collections.singletonList(GMT_REFUND_PAY)); - AlipayTradeFastpayRefundQueryResponse response = AliPayApi.tradeRefundQueryToResponse(queryModel); + model.setQueryOptions(Collections.singletonList(GMT_REFUND_PAY)); + AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest(); + request.setBizModel(model); + AlipayTradeFastpayRefundQueryResponse response = alipayClient.execute(request); syncResult.setSyncInfo(JSONUtil.toJsonStr(response)); // 失败 if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) { diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayTransferService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayTransferService.java index 04f2d247e..0d6aee8ad 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayTransferService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayTransferService.java @@ -12,11 +12,13 @@ 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.request.AlipayFundAccountQueryRequest; +import com.alipay.api.request.AlipayFundTransToaccountTransferRequest; import com.alipay.api.response.AlipayFundAccountQueryResponse; import com.alipay.api.response.AlipayFundTransToaccountTransferResponse; -import com.ijpay.alipay.AliPayApi; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -32,15 +34,20 @@ import static cn.daxpay.single.service.code.AliPayCode.QUERY_ACCOUNT_TYPE; @RequiredArgsConstructor public class AliPayTransferService { + private final AliPayConfigService aliPayConfigService; + /** * 余额查询接口 */ @SneakyThrows - public void queryAccountAmount(AliPayConfig config) { + public void queryAccountAmount(AliPayConfig config, AliPayConfig aliPayConfig){ + AlipayClient alipayClient = aliPayConfigService.getAlipayClient(aliPayConfig); AlipayFundAccountQueryModel model = new AlipayFundAccountQueryModel(); model.setAccountType(QUERY_ACCOUNT_TYPE); model.setAlipayUserId(config.getAlipayUserId()); - AlipayFundAccountQueryResponse response = AliPayApi.accountQueryToResponse(model, null); + AlipayFundAccountQueryRequest request = new AlipayFundAccountQueryRequest(); + request.setBizModel(model); + AlipayFundAccountQueryResponse response = alipayClient.execute(request); System.out.println(response); } @@ -48,17 +55,20 @@ public class AliPayTransferService { * 转账接口 */ @SneakyThrows - public void transfer(TransferOrder order) { + 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())); model.setRemark(order.getReason()); - AlipayFundTransToaccountTransferResponse response = AliPayApi.transferToResponse(model); + AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest(); + request.setBizModel(model); + AlipayFundTransToaccountTransferResponse response = alipayClient.execute(request); if (!Objects.equals(AliPayCode.SUCCESS, response.getCode())) { log.error("网关返回退款失败: {}", response.getSubMsg()); throw new PayFailureException(response.getSubMsg()); @@ -70,8 +80,7 @@ public class AliPayTransferService { String payDate = response.getPayDate(); if (StrUtil.isNotBlank(payDate)){ LocalDateTime time = LocalDateTimeUtil.parse(payDate, DatePattern.NORM_DATETIME_PATTERN); - transferInfo.setFinishTime(time) - .setStatus(TransferStatusEnum.SUCCESS); + transferInfo.setFinishTime(time).setStatus(TransferStatusEnum.SUCCESS); } } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/order/allocation/entity/AllocOrder.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/order/allocation/entity/AllocOrder.java index 0f7abc285..f1ad88bca 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/order/allocation/entity/AllocOrder.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/order/allocation/entity/AllocOrder.java @@ -49,7 +49,7 @@ public class AllocOrder extends MpBaseEntity implements EntityBaseFunction1.4.01 0.0.38 3.5.2 - 2.9.10 + 4.39.104.ALL + 2.9.11 2.14.7 4.4.0 1.5.3.Final