diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/pay/syb/enums/SybTrxStatus.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/pay/syb/enums/SybTrxStatus.java index fca4a548..97d6e327 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/pay/syb/enums/SybTrxStatus.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/pay/syb/enums/SybTrxStatus.java @@ -1,9 +1,10 @@ package com.ruoyi.common.pay.syb.enums; import lombok.AllArgsConstructor; -import lombok.Data; import lombok.Getter; +import java.util.Map; + /** * 交易结果 * @author wjh @@ -27,6 +28,10 @@ public enum SybTrxStatus { return SUCCESS.getCode().equals(code); } + public static boolean isSuccess(Map result) { + return result != null && isSuccess(result.get("trxstatus")); + } + public static SybTrxStatus getByCode(String code) { for (SybTrxStatus value : SybTrxStatus.values()) { if (value.getCode().equals(code)) { diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/pay/syb/service/ApiTestV2.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/pay/syb/service/ApiTestV2.java index c44a63de..09bbbccb 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/pay/syb/service/ApiTestV2.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/pay/syb/service/ApiTestV2.java @@ -1,12 +1,9 @@ package com.ruoyi.common.pay.syb.service; import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.math.BigDecimal; -import java.util.Map; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @RestController @@ -16,39 +13,44 @@ public class ApiTestV2 extends BaseController { @Autowired private SybPayClient service; - @GetMapping("/scanPay") - public AjaxResult testScanPay() throws Exception { - // TODO Auto-generated method stub - String reqsn = String.valueOf(System.currentTimeMillis()); - Map map = service.scanPay(1, reqsn, "标题", "备注", "134775931316089668", "", "", "", ""); - return success(map); - } - - @GetMapping("/query") - public AjaxResult testQuery(@RequestParam String trxid) throws Exception { - Map map = service.query("", trxid); - return success(map); - } - - @PostMapping("/refund") - public AjaxResult testRefund() throws Exception { - String reqsn = String.valueOf(System.currentTimeMillis()); - Map map = service.refund(1, reqsn, "", "20160712167578.2547"); - return success(map); - } - - @PostMapping("/cancel") - public AjaxResult testCancel() throws Exception { - String reqsn = String.valueOf(System.currentTimeMillis()); - Map map = service.cancel(1, reqsn, "112094120001088316", ""); - return success(map); - } - - @PostMapping("/pay") - public AjaxResult testPay() throws Exception { - - String reqsn = String.valueOf(System.currentTimeMillis()); - Map map = service.pay(1L, reqsn, "W06", "标题", "备注", "ol5kD7eeXNGeYE5z7uIhk12K-rBA", "123", "https://test.allinpaygd.com/JWeb/NotifyServlet", "", "", "", "", "", "", "", "", "", "", "", ""); - return success(map); - } +// @GetMapping("/scanPay") +// public AjaxResult testScanPay() throws Exception { +// // TODO Auto-generated method stub +// String reqsn = String.valueOf(System.currentTimeMillis()); +// Map map = service.scanPay(1, reqsn, "标题", "备注", "134775931316089668", "", "", "", ""); +// return success(map); +// } +// +// @GetMapping("/query") +// public AjaxResult testQuery(@RequestParam String trxid) throws Exception { +// Map map = service.query("", trxid); +// return success(map); +// } +// +// @PostMapping("/refund") +// public AjaxResult testRefund(@RequestParam String sn,@RequestParam Integer amount) throws Exception { +// Map map = service.refund(amount, null, "", sn); +// return success(map); +// } +// +// @PostMapping("/cancel") +// public AjaxResult testCancel() throws Exception { +// String reqsn = String.valueOf(System.currentTimeMillis()); +// Map map = service.cancel(1, reqsn, "112094120001088316", ""); +// return success(map); +// } +// +// @PostMapping("/close") +// public AjaxResult close(@RequestParam String id, @RequestParam String sn) throws Exception { +// Map map = service.close(id, sn); +// return success(map); +// } +// +// @PostMapping("/pay") +// public AjaxResult testPay() throws Exception { +// +// String reqsn = String.valueOf(System.currentTimeMillis()); +// Map map = service.pay(1L, reqsn, "W06", "标题", "备注", "ol5kD7eeXNGeYE5z7uIhk12K-rBA", "123", "https://test.allinpaygd.com/JWeb/NotifyServlet", "", "", "", "", "", "", "", "", "", "", "", ""); +// return success(map); +// } } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/payBill/service/impl/PayBillServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/payBill/service/impl/PayBillServiceImpl.java index d9bd8ce9..cf1da606 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/payBill/service/impl/PayBillServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/payBill/service/impl/PayBillServiceImpl.java @@ -1,24 +1,20 @@ package com.ruoyi.ss.payBill.service.impl; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - import com.ruoyi.common.core.redis.RedisLock; import com.ruoyi.common.core.redis.enums.RedisLockKey; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.pay.syb.enums.SybTrxStatus; import com.ruoyi.common.pay.syb.service.SybPayService; +import com.ruoyi.common.pay.wx.service.WxPayService; import com.ruoyi.common.pay.wx.util.WxPayUtil; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.common.utils.SnowFlakeUtil; import com.ruoyi.common.utils.collection.CollectionUtils; import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.ss.payBill.domain.PayBill; +import com.ruoyi.ss.payBill.domain.PayBillQuery; +import com.ruoyi.ss.payBill.domain.PayBillVO; import com.ruoyi.ss.payBill.domain.bo.PayBillRefundBO; import com.ruoyi.ss.payBill.domain.bo.RefundSuccessBO; import com.ruoyi.ss.payBill.domain.dto.PayBillRefundDTO; @@ -28,23 +24,27 @@ import com.ruoyi.ss.payBill.domain.vo.DoPayVO; import com.ruoyi.ss.payBill.domain.vo.PayResultVO; import com.ruoyi.ss.payBill.interfaces.AfterPay; import com.ruoyi.ss.payBill.interfaces.AfterRefund; +import com.ruoyi.ss.payBill.mapper.PayBillMapper; import com.ruoyi.ss.payBill.service.PayBillConverter; +import com.ruoyi.ss.payBill.service.PayBillService; import com.ruoyi.ss.refund.domain.RefundVO; import com.ruoyi.ss.refund.service.RefundConverter; import com.ruoyi.ss.refund.service.RefundService; import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillPayType; -import com.ruoyi.common.pay.wx.service.WxPayService; import com.wechat.pay.java.service.payments.model.Transaction; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.ruoyi.ss.payBill.mapper.PayBillMapper; -import com.ruoyi.ss.payBill.domain.PayBill; -import com.ruoyi.ss.payBill.domain.PayBillVO; -import com.ruoyi.ss.payBill.domain.PayBillQuery; -import com.ruoyi.ss.payBill.service.PayBillService; import org.springframework.transaction.support.TransactionTemplate; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + /** * 支付订单Service业务层处理 * @@ -165,11 +165,11 @@ public class PayBillServiceImpl implements PayBillService return null; }; try { - return transactionTemplate.execute(status -> { - // 关闭旧的支付订单 - boolean close = this.closeByBstId(bill.getBstId(), bill.getBstType()); - ServiceUtil.assertion(!close, "关闭旧支付订单失败"); + // 尝试关闭旧的支付订单 + boolean close = this.closeByBstId(bill.getBstId(), bill.getBstType()); + ServiceUtil.assertion(!close, "关闭旧支付订单失败"); + return transactionTemplate.execute(status -> { // 插入订单 bill.setStatus(PayBillStatus.PAYING.getStatus()); int insert = this.insertPayBill(bill); @@ -218,7 +218,16 @@ public class PayBillServiceImpl implements PayBillService } // 通联微信 else if (TransactionBillPayType.TL_WX.getType().equals(bill.getChannelId())) { - sybPayService.closeOrderWx(bill.getPayNo()); + try { + sybPayService.closeOrderWx(bill.getPayNo()); + } catch (Exception e) { + Map result = sybPayService.queryOrderByOutTradeNo(bill.getPayNo()); + if (SybTrxStatus.isSuccess(result)) { + throw new ServiceException("交易已成功,无法关闭"); + } else { + log.error("关闭通联支付订单出错:{}", e.getMessage()); + } + } } } } @@ -473,7 +482,7 @@ public class PayBillServiceImpl implements PayBillService } else if (TransactionBillPayType.TL_WX.getType().equals(bill.getChannelId())) { // 通联微信支付 Map result = sybPayService.queryOrderByOutTradeNo(bill.getPayNo()); - if (SybTrxStatus.isSuccess(result.get("trxstatus"))) { + if (SybTrxStatus.isSuccess(result)) { return PayResultVO.success(DateUtils.toLocalDate(result.get("fintime"), "yyyyMMddHHmmss")); } else { return PayResultVO.fail("暂未支付成功"); diff --git a/smart-switch-web/src/main/resources/application-dev.yml b/smart-switch-web/src/main/resources/application-dev.yml index 16a5d5d7..1d527908 100644 --- a/smart-switch-web/src/main/resources/application-dev.yml +++ b/smart-switch-web/src/main/resources/application-dev.yml @@ -26,7 +26,7 @@ wx: # 转账回调地址 transferNotifyUrl: https://kg-dev.chuangtewl.com/dev-api/app/pay/notify/wx/transfer # 密钥所在位置 - privateKeyPath: D:/project/证书/wxpay-kg/apiclient_key.pem + privateKeyPath: H:/project/创特/证书/wxpay-kg/apiclient_key.pem # 证书序列号 merchantSerialNumber: 6AD69237C0F22A9AE51A64F1927E3A0962AC1FB0