From 6a217b12c65f956b5f21bd73adfd26e98a8e2aff Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Wed, 13 Mar 2019 00:56:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E6=A8=A1=E5=9D=97=EF=BC=8C?= =?UTF-8?q?=E5=8F=91=E8=B5=B7=E4=BA=A4=E6=98=93=EF=BC=8C=E6=9A=82=E6=97=B6?= =?UTF-8?q?=E6=98=AF=E6=AF=94=E8=BE=83=20demo=20=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E3=80=82=E6=9C=AA=E5=AE=8C=E6=88=90~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/PayNotifyAppJob.java | 2 +- .../mall/pay/api/PayTransactionService.java | 4 +- .../pay/api/bo/PayTransactionSubmitBO.java | 35 ++++++++ .../mall/pay/api/constant/PayChannelEnum.java | 5 +- .../pay/api/constant/PayErrorCodeEnum.java | 3 +- .../pay/api/dto/PayTransactionSubmitDTO.java | 68 ++++++++++++++++ pay/pay-service-impl/pom.xml | 18 +++++ .../mall/pay/client/AbstractPaySDK.java | 16 ++++ .../mall/pay/client/PaySDKFactory.java | 24 ++++++ .../iocoder/mall/pay/client/PingxxPaySDK.java | 80 +++++++++++++++++++ .../pay/convert/PayTransactionConvert.java | 5 ++ .../dao/PayTransactionExtensionMapper.java | 11 +++ .../mall/pay/dao/PayTransactionMapper.java | 4 + .../mall/pay/service/PayServiceImpl.java | 72 +++++++++++++++-- 14 files changed, 338 insertions(+), 9 deletions(-) rename pay/{pay-service-impl/src/main/java/cn/iocoder/mall/pay => pay-application/src/main/java/cn/iocoder/mall/pay/application}/scheduler/PayNotifyAppJob.java (74%) create mode 100644 pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/PayTransactionSubmitBO.java create mode 100644 pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/PayTransactionSubmitDTO.java create mode 100644 pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/AbstractPaySDK.java create mode 100644 pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/PaySDKFactory.java create mode 100644 pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/PingxxPaySDK.java create mode 100644 pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/dao/PayTransactionExtensionMapper.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/scheduler/PayNotifyAppJob.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/application/scheduler/PayNotifyAppJob.java similarity index 74% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/scheduler/PayNotifyAppJob.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/application/scheduler/PayNotifyAppJob.java index 91f6745cc..18ab2ebf2 100644 --- a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/scheduler/PayNotifyAppJob.java +++ b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/application/scheduler/PayNotifyAppJob.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.pay.scheduler; +package cn.iocoder.mall.pay.application.scheduler; /** * TODO diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java index 046b26a28..51700b443 100644 --- a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java +++ b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java @@ -2,13 +2,15 @@ package cn.iocoder.mall.pay.api; import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.mall.pay.api.bo.PayTransactionBO; +import cn.iocoder.mall.pay.api.bo.PayTransactionSubmitBO; import cn.iocoder.mall.pay.api.dto.PayTransactionCreateDTO; +import cn.iocoder.mall.pay.api.dto.PayTransactionSubmitDTO; public interface PayTransactionService { CommonResult createTransaction(PayTransactionCreateDTO payTransactionCreateDTO); - CommonResult submitTransaction(); // TODO 1. params 2. result + CommonResult submitTransaction(PayTransactionSubmitDTO payTransactionSubmitDTO); CommonResult cancelTransaction(); // TODO 1. params 2. result diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/PayTransactionSubmitBO.java b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/PayTransactionSubmitBO.java new file mode 100644 index 000000000..1fc33d240 --- /dev/null +++ b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/PayTransactionSubmitBO.java @@ -0,0 +1,35 @@ +package cn.iocoder.mall.pay.api.bo; + +/** + * 支付交易提交结果 BO + */ +public class PayTransactionSubmitBO { + + /** + * 支付交易拓展单编号 + */ + private Integer id; + /** + * 调用三方平台的响应结果 + */ + private String invokeResponse; + + public Integer getId() { + return id; + } + + public PayTransactionSubmitBO setId(Integer id) { + this.id = id; + return this; + } + + public String getInvokeResponse() { + return invokeResponse; + } + + public PayTransactionSubmitBO setInvokeResponse(String invokeResponse) { + this.invokeResponse = invokeResponse; + return this; + } + +} \ No newline at end of file diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayChannelEnum.java b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayChannelEnum.java index 0325e6bb7..b39bbcce4 100644 --- a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayChannelEnum.java +++ b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayChannelEnum.java @@ -8,7 +8,10 @@ public enum PayChannelEnum { WEIXIN_APP(100, "wx", "微信 App 支付"), WEIXIN_PUB(100, "wx", "微信 JS API 支付"), - ALIPAY(200, "alipay", "微信支付"); + ALIPAY(200, "alipay", "微信支付"), + + PINGXX(9999, "ping++", "ping++ 支付"), + ; /** * 渠道编号 diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayErrorCodeEnum.java b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayErrorCodeEnum.java index 827a35eb3..1d60cd387 100644 --- a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayErrorCodeEnum.java +++ b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayErrorCodeEnum.java @@ -12,7 +12,8 @@ public enum PayErrorCodeEnum { PAY_APP_IS_DISABLE(1004000001, "App 已经被禁用"), // ========== TRANSACTION 模块 ========== - + PAY_TRANSACTION_NOT_FOUND(100401000, "支付交易单不存在"), + PAY_TRANSACTION_STATUS_IS_NOT_WAITING(100401001, "支付交易单不处于待支付"), ; diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/PayTransactionSubmitDTO.java b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/PayTransactionSubmitDTO.java new file mode 100644 index 000000000..782da8990 --- /dev/null +++ b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/PayTransactionSubmitDTO.java @@ -0,0 +1,68 @@ +package cn.iocoder.mall.pay.api.dto; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * 支付交易提交 DTO + */ +public class PayTransactionSubmitDTO { + + /** + * 应用编号 + */ + @NotEmpty(message = "应用编号不能为空") + private String appId; + /** + * 发起交易的 IP + */ + @NotEmpty(message = "IP 不能为空") + private String createIp; + /** + * 业务线的订单编号 + */ + @NotEmpty(message = "订单号不能为空") + private String orderId; + /** + * 支付渠道 + */ + @NotNull(message = "支付渠道") + private Integer payChannel; + + public String getAppId() { + return appId; + } + + public PayTransactionSubmitDTO setAppId(String appId) { + this.appId = appId; + return this; + } + + public String getCreateIp() { + return createIp; + } + + public PayTransactionSubmitDTO setCreateIp(String createIp) { + this.createIp = createIp; + return this; + } + + public String getOrderId() { + return orderId; + } + + public PayTransactionSubmitDTO setOrderId(String orderId) { + this.orderId = orderId; + return this; + } + + public Integer getPayChannel() { + return payChannel; + } + + public PayTransactionSubmitDTO setPayChannel(Integer payChannel) { + this.payChannel = payChannel; + return this; + } + +} \ No newline at end of file diff --git a/pay/pay-service-impl/pom.xml b/pay/pay-service-impl/pom.xml index df25e7ea6..9513972f2 100644 --- a/pay/pay-service-impl/pom.xml +++ b/pay/pay-service-impl/pom.xml @@ -60,6 +60,13 @@ 27.0.1-jre + + Pingplusplus + pingpp-java + 2.2.4 + jar + + @@ -85,4 +92,15 @@ + + + + false + + central + bintray + http://jcenter.bintray.com + + + \ No newline at end of file diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/AbstractPaySDK.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/AbstractPaySDK.java new file mode 100644 index 000000000..8be86179b --- /dev/null +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/AbstractPaySDK.java @@ -0,0 +1,16 @@ +package cn.iocoder.mall.pay.client; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.pay.dataobject.PayTransactionDO; +import cn.iocoder.mall.pay.dataobject.PayTransactionExtensionDO; + +import java.util.Map; + +public abstract class AbstractPaySDK { + + // extra 属性,用于支持不同支付平台的拓展字段。例如说,微信公众号支付,需要多传递一个 openid + public abstract CommonResult submitTransaction(PayTransactionDO transaction, + PayTransactionExtensionDO transactionExtension, + Map extra); + +} \ No newline at end of file diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/PaySDKFactory.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/PaySDKFactory.java new file mode 100644 index 000000000..119bdca61 --- /dev/null +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/PaySDKFactory.java @@ -0,0 +1,24 @@ +package cn.iocoder.mall.pay.client; + +import cn.iocoder.mall.pay.api.constant.PayChannelEnum; + +import java.util.HashMap; +import java.util.Map; + +public class PaySDKFactory { + + private static Map SDKS = new HashMap<>(); + + static { + SDKS.put(PayChannelEnum.PINGXX.getId(), new PingxxPaySDK()); + } + + public static AbstractPaySDK getSDK(Integer payChannel) { + AbstractPaySDK sdk = SDKS.get(payChannel); + if (sdk == null) { + throw new NullPointerException("找不到合适的 PaySDK :" + payChannel); + } + return sdk; + } + +} \ No newline at end of file diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/PingxxPaySDK.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/PingxxPaySDK.java new file mode 100644 index 000000000..9c2e887b9 --- /dev/null +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/client/PingxxPaySDK.java @@ -0,0 +1,80 @@ +package cn.iocoder.mall.pay.client; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.pay.dataobject.PayTransactionDO; +import cn.iocoder.mall.pay.dataobject.PayTransactionExtensionDO; +import com.google.common.collect.ImmutableMap; +import com.pingplusplus.Pingpp; +import com.pingplusplus.exception.*; +import com.pingplusplus.model.Charge; + +import java.util.HashMap; +import java.util.Map; + +// TODO 代码略乱,后面重构下 +public class PingxxPaySDK extends AbstractPaySDK { + + static { + Pingpp.privateKeyPath = "/Users/yunai/Downloads/pingxx.pem"; + Pingpp.apiKey = "sk_test_8a9SGSXLKqX1ennjX9DenvbT"; + } + + @Override + public CommonResult submitTransaction(PayTransactionDO transaction, PayTransactionExtensionDO transactionExtension, Map extra) { + Map reqObj = createChargeRequest(transaction, transactionExtension, extra); + // 请求ping++ + try { + Charge charge = Charge.create(reqObj); +// System.out.println(charge.toString()); + return CommonResult.success(charge.toString()); + } catch (AuthenticationException e) { + e.printStackTrace(); + } catch (InvalidRequestException e) { + e.printStackTrace(); + } catch (APIConnectionException e) { + e.printStackTrace(); + } catch (APIException e) { + e.printStackTrace(); + } catch (ChannelException e) { + e.printStackTrace(); + } catch (RateLimitException e) { + e.printStackTrace(); + } + return null; + } + + + private Map createChargeRequest(PayTransactionDO transaction, PayTransactionExtensionDO transactionExtension, Map extra) { + // 计算支付渠道和支付额外参数 + String channel = "wx_pub"; // 因为 ping++ 是用来做模拟支付的渠道,所以这里强制就选择了 wx_pub 微信公众号支付 + extra = new HashMap<>(); // TODO 临时 + extra.put("open_id", "just_for_test"); + // 生成支付对象 + Map reqObj = new HashMap<>(); + reqObj.put("subject", transaction.getOrderSubject()); + reqObj.put("body", transaction.getOrderDescription()); + reqObj.put("description", transaction.getOrderMemo()); + reqObj.put("amount", transaction.getPrice()); + reqObj.put("order_no", transactionExtension.getTransactionCode()); + reqObj.put("channel", channel); + reqObj.put("currency", "cny"); + reqObj.put("client_ip", transactionExtension.getCreateIp()); + reqObj.put("app", ImmutableMap.of("id", "app_aTyfXDjrvzDSbLuz")); // TODO 写死先 + reqObj.put("extra", extra); + return reqObj; + } + + public static void main(String[] args) { + PayTransactionDO transaction = new PayTransactionDO(); + transaction.setOrderSubject("测试商品"); + transaction.setOrderDescription("测试描述"); + transaction.setPrice(1); + + PayTransactionExtensionDO extension = new PayTransactionExtensionDO(); + extension.setTransactionCode(System.currentTimeMillis() + ""); + extension.setCreateIp("127.0.0.1"); + + new PingxxPaySDK().submitTransaction(transaction, extension, null); + } + +} \ No newline at end of file diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/convert/PayTransactionConvert.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/convert/PayTransactionConvert.java index 27b6b0fe6..cc801afd6 100644 --- a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/convert/PayTransactionConvert.java +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/convert/PayTransactionConvert.java @@ -2,7 +2,9 @@ package cn.iocoder.mall.pay.convert; import cn.iocoder.mall.pay.api.bo.PayTransactionBO; import cn.iocoder.mall.pay.api.dto.PayTransactionCreateDTO; +import cn.iocoder.mall.pay.api.dto.PayTransactionSubmitDTO; import cn.iocoder.mall.pay.dataobject.PayTransactionDO; +import cn.iocoder.mall.pay.dataobject.PayTransactionExtensionDO; import org.mapstruct.Mapper; import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; @@ -18,4 +20,7 @@ public interface PayTransactionConvert { @Mappings({}) PayTransactionBO convert(PayTransactionDO payTransactionDO); + @Mappings({}) + PayTransactionExtensionDO convert(PayTransactionSubmitDTO payTransactionSubmitDTO); + } \ No newline at end of file diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/dao/PayTransactionExtensionMapper.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/dao/PayTransactionExtensionMapper.java new file mode 100644 index 000000000..118204e3f --- /dev/null +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/dao/PayTransactionExtensionMapper.java @@ -0,0 +1,11 @@ +package cn.iocoder.mall.pay.dao; + +import cn.iocoder.mall.pay.dataobject.PayTransactionExtensionDO; +import org.springframework.stereotype.Repository; + +@Repository +public interface PayTransactionExtensionMapper { + + void insert(PayTransactionExtensionDO payTransactionExtensionDO); + +} \ No newline at end of file diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/dao/PayTransactionMapper.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/dao/PayTransactionMapper.java index a1ba6e4d2..0e59255ac 100644 --- a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/dao/PayTransactionMapper.java +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/dao/PayTransactionMapper.java @@ -1,6 +1,7 @@ package cn.iocoder.mall.pay.dao; import cn.iocoder.mall.pay.dataobject.PayTransactionDO; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @Repository @@ -8,4 +9,7 @@ public interface PayTransactionMapper { void insert(PayTransactionDO entity); + PayTransactionDO selectByAppIdAndOrderId(@Param("appId") String appId, + @Param("orderId") String orderId); + } \ No newline at end of file diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/service/PayServiceImpl.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/service/PayServiceImpl.java index 5ba872134..b265c97b1 100644 --- a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/service/PayServiceImpl.java +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/service/PayServiceImpl.java @@ -1,24 +1,43 @@ package cn.iocoder.mall.pay.service; +import cn.iocoder.common.framework.util.ServiceExceptionUtil; import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.mall.pay.api.PayTransactionService; import cn.iocoder.mall.pay.api.bo.PayTransactionBO; +import cn.iocoder.mall.pay.api.bo.PayTransactionSubmitBO; +import cn.iocoder.mall.pay.api.constant.PayErrorCodeEnum; +import cn.iocoder.mall.pay.api.constant.PayTransactionStatusEnum; import cn.iocoder.mall.pay.api.dto.PayTransactionCreateDTO; +import cn.iocoder.mall.pay.api.dto.PayTransactionSubmitDTO; +import cn.iocoder.mall.pay.client.PaySDKFactory; +import cn.iocoder.mall.pay.convert.PayTransactionConvert; +import cn.iocoder.mall.pay.dao.PayTransactionExtensionMapper; import cn.iocoder.mall.pay.dao.PayTransactionMapper; import cn.iocoder.mall.pay.dataobject.PayAppDO; +import cn.iocoder.mall.pay.dataobject.PayTransactionDO; +import cn.iocoder.mall.pay.dataobject.PayTransactionExtensionDO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Date; + @Service @com.alibaba.dubbo.config.annotation.Service(validation = "true") public class PayServiceImpl implements PayTransactionService { + private Logger logger = LoggerFactory.getLogger(getClass()); + @Autowired private PayTransactionMapper payTransactionMapper; @Autowired + private PayTransactionExtensionMapper payTransactionExtensionMapper; + @Autowired private PayAppServiceImpl payAppService; @Override + @SuppressWarnings("Duplicates") public CommonResult createTransaction(PayTransactionCreateDTO payTransactionCreateDTO) { // 校验 App CommonResult appResult = payAppService.validPayApp(payTransactionCreateDTO.getAppId()); @@ -26,12 +45,57 @@ public class PayServiceImpl implements PayTransactionService { return CommonResult.error(appResult); } // 插入 PayTransactionDO - return null; + PayTransactionDO payTransaction = payTransactionMapper.selectByAppIdAndOrderId( + payTransactionCreateDTO.getAppId(), payTransactionCreateDTO.getOrderId()); + if (payTransaction != null) { + logger.warn("[createTransaction][appId({}) orderId({}) exists]", payTransactionCreateDTO.getAppId(), + payTransactionCreateDTO.getOrderId()); // 理论来说,不会出现这个情况 + // TODO 芋艿 可能要考虑,更新订单。例如说,业务线订单可以修改价格 + } else { + payTransaction = PayTransactionConvert.INSTANCE.convert(payTransactionCreateDTO); + payTransaction.setStatus(PayTransactionStatusEnum.WAITTING.getValue()) + .setNotifyUrl(appResult.getData().getNotifyUrl()); + payTransaction.setCreateTime(new Date()); + payTransactionMapper.insert(payTransaction); + } + // 返回成功 + return CommonResult.success(PayTransactionConvert.INSTANCE.convert(payTransaction)); } @Override - public CommonResult submitTransaction() { - return null; + @SuppressWarnings("Duplicates") + public CommonResult submitTransaction(PayTransactionSubmitDTO payTransactionSubmitDTO) { + // TODO 校验支付渠道是否有效 + // 校验 App 是否有效 + CommonResult appResult = payAppService.validPayApp(payTransactionSubmitDTO.getAppId()); + if (appResult.isError()) { + return CommonResult.error(appResult); + } + // 获得 PayTransactionDO ,并校验其是否存在 + PayTransactionDO payTransaction = payTransactionMapper.selectByAppIdAndOrderId( + payTransactionSubmitDTO.getAppId(), payTransactionSubmitDTO.getOrderId()); + if (payTransaction == null) { // 是否存在 + return ServiceExceptionUtil.error(PayErrorCodeEnum.PAY_TRANSACTION_NOT_FOUND.getCode()); + } + if (PayTransactionStatusEnum.WAITTING.getValue().equals(payTransaction.getStatus())) { // 校验状态 + return ServiceExceptionUtil.error(PayErrorCodeEnum.PAY_TRANSACTION_STATUS_IS_NOT_WAITING.getCode()); + } + // 插入 PayTransactionExtensionDO + PayTransactionExtensionDO payTransactionExtensionDO = PayTransactionConvert.INSTANCE.convert(payTransactionSubmitDTO) + .setTransactionId(payTransaction.getId()) + .setTransactionCode("TODO") + .setStatus(PayTransactionStatusEnum.WAITTING.getValue()); + payTransactionExtensionMapper.insert(payTransactionExtensionDO); + // 调用三方接口 + CommonResult invokeResult = PaySDKFactory.getSDK(payTransactionSubmitDTO.getPayChannel()).submitTransaction(payTransaction, payTransactionExtensionDO, null); // TODO 暂时传入 extra = null + if (invokeResult.isError()) { + return CommonResult.error(invokeResult); + } + // TODO 轮询三方接口,是否已经支付的任务 + // 返回成功 + PayTransactionSubmitBO payTransactionSubmitBO = new PayTransactionSubmitBO() + .setId(payTransactionExtensionDO.getId()).setInvokeResponse(invokeResult.getData()); + return CommonResult.success(payTransactionSubmitBO); } @Override @@ -39,6 +103,4 @@ public class PayServiceImpl implements PayTransactionService { return null; } - - } \ No newline at end of file