diff --git a/ruoyi-admin/src/main/resources/application-pay.yml b/ruoyi-admin/src/main/resources/application-pay.yml index 2a50b6b..6866d71 100644 --- a/ruoyi-admin/src/main/resources/application-pay.yml +++ b/ruoyi-admin/src/main/resources/application-pay.yml @@ -1,5 +1,6 @@ pay: sqb: + enabled: false apiDomain: "apiDomain" terminalSn: "terminalSn" terminalKey: "terminalKey" @@ -7,13 +8,15 @@ pay: vendorSn: "vendorSn" vendorKey: "vendorKey" alipay: + enabled: false appId: appId appPrivateKey: appPrivateKey #classpath:pay/alipay/alipay_private_key.pem alipayPublicKey: alipayPublicKey #classpath:pay/alipay/alipay_public_key.pem notifyUrl: http://www.sdaizy.com/prod-api/alipay/notify wechat: + enabled: false merchantId: merchantId - privateKeyPath: privateKeyPath + privateKeyPath: privateKeyPath # classpath:pay/wx/apiclient_key.pem merchantSerialNumber: merchantSerialNumber apiV3Key: apiV3Key appId: appId diff --git a/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/config/AliPayConfig.java b/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/config/AliPayConfig.java index f8c30b3..32a10a4 100644 --- a/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/config/AliPayConfig.java +++ b/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/config/AliPayConfig.java @@ -7,6 +7,7 @@ import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -18,6 +19,7 @@ import com.alipay.easysdk.kernel.Config; * @author zlh */ @Configuration +@ConditionalOnProperty(prefix = "pay.alipay", name = "enabled", havingValue = "true") public class AliPayConfig { @Value("${pay.alipay.appId}") private String appId; diff --git a/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/controller/AliPayController.java b/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/controller/AliPayController.java index e28a00d..3371fad 100644 --- a/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/controller/AliPayController.java +++ b/ruoyi-pay/ruoyi-pay-alipay/src/main/java/com/ruoyi/pay/alipay/controller/AliPayController.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -22,11 +23,13 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; + /** * @author zlh */ @RestController @RequestMapping("/alipay") +@ConditionalOnProperty(prefix = "pay.alipay", name = "enabled", havingValue = "true") @Tag(name = "【支付宝】管理") public class AliPayController { @@ -44,8 +47,11 @@ public class AliPayController { PayOrder aliPay = payOrderService.selectPayOrderByOrderNumber(orderNumber); try { // 发起API调用(以创建当面付收款二维码为例) - response = Factory.Payment.Page() - .pay(aliPay.getOrderContent(), aliPay.getOrderNumber(), aliPay.getTotalAmount(), ""); + response = Factory.Payment.Page().pay( + aliPay.getOrderContent(), + aliPay.getOrderNumber(), + aliPay.getActualAmount(), + ""); } catch (Exception e) { System.err.println("调用遭遇异常,原因:" + e.getMessage()); throw new RuntimeException(e.getMessage(), e); diff --git a/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/domain/PayOrder.java b/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/domain/PayOrder.java index 01e847d..585d876 100644 --- a/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/domain/PayOrder.java +++ b/ruoyi-pay/ruoyi-pay-common/src/main/java/com/ruoyi/pay/domain/PayOrder.java @@ -42,6 +42,11 @@ public class PayOrder extends BaseEntity { @Excel(name = "订单总金额") private String totalAmount; + /** 订单总金额 */ + @Schema(title = "实际支付金额") + @Excel(name = "实际支付金额") + private String actualAmount; + /** 订单内容 */ @Schema(title = "订单内容") @Excel(name = "订单内容") @@ -97,6 +102,14 @@ public class PayOrder extends BaseEntity { return totalAmount; } + public String getActualAmount() { + return actualAmount; + } + + public void setActualAmount(String actualAmount) { + this.actualAmount = actualAmount; + } + public void setOrderContent(String orderContent) { this.orderContent = orderContent; } @@ -129,6 +142,7 @@ public class PayOrder extends BaseEntity { .append("orderNumber", getOrderNumber()) .append("orderStatus", getOrderStatus()) .append("totalAmount", getTotalAmount()) + .append("actualAmount", getActualAmount()) .append("orderContent", getOrderContent()) .append("orderRemark", getOrderRemark()) .append("orderMessage", getOrderMessage()) diff --git a/ruoyi-pay/ruoyi-pay-common/src/main/resources/mapper/pay/PayOrderMapper.xml b/ruoyi-pay/ruoyi-pay-common/src/main/resources/mapper/pay/PayOrderMapper.xml index a43062c..2c14d94 100644 --- a/ruoyi-pay/ruoyi-pay-common/src/main/resources/mapper/pay/PayOrderMapper.xml +++ b/ruoyi-pay/ruoyi-pay-common/src/main/resources/mapper/pay/PayOrderMapper.xml @@ -8,6 +8,7 @@ + @@ -23,12 +24,10 @@ and order_number = #{orderNumber} and order_status = #{orderStatus} and total_amount = #{totalAmount} - and order_content = - #{orderContent} - and order_remark - = #{orderRemark} - and - order_message = #{orderMessage} + and actual_amount = #{actualAmount} + and order_content = #{orderContent} + and order_remark = #{orderRemark} + and order_message = #{orderMessage} @@ -47,9 +46,9 @@ order_id, user_id, order_number, - - order_status, + order_status, total_amount, + actual_amount, order_content, order_remark, @@ -59,12 +58,11 @@ #{orderId}, #{userId}, #{orderNumber}, - - #{orderStatus}, + #{orderStatus}, #{totalAmount}, + #{actualAmount}, #{orderContent}, - - #{orderRemark}, + #{orderRemark}, #{orderMessage}, @@ -72,10 +70,10 @@ update pay_order user_id = #{userId}, - order_number - = #{orderNumber}, + order_number = #{orderNumber}, order_status = #{orderStatus}, total_amount = #{totalAmount}, + actual_amount = #{actualAmount}, order_content = #{orderContent}, order_remark = #{orderRemark}, order_message = #{orderMessage}, @@ -91,13 +89,13 @@ - delete from pay_order where order_id in + delete from pay_order where order_id in - #{orderId} + #{orderId} - update pay_order set order_status = #{orderStatus} where order_number = #{orderNumber} + update pay_order set order_status = #{orderStatus} where order_number = #{orderNumber} \ No newline at end of file diff --git a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/constant/SqbConstant.java b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/config/SqbConfig.java similarity index 86% rename from ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/constant/SqbConstant.java rename to ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/config/SqbConfig.java index f119464..5805981 100644 --- a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/constant/SqbConstant.java +++ b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/config/SqbConfig.java @@ -1,10 +1,12 @@ -package com.ruoyi.pay.sqb.constant; +package com.ruoyi.pay.sqb.config; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; @Component -public class SqbConstant { +@ConditionalOnProperty(prefix = "pay.sqb", name = "enabled", havingValue = "true") +public class SqbConfig { @Value("${pay.sqb.apiDomain}") private String apiDomain; diff --git a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/controller/SQBController.java b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/controller/SQBController.java index cda15e3..275cfd3 100644 --- a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/controller/SQBController.java +++ b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/controller/SQBController.java @@ -1,6 +1,7 @@ package com.ruoyi.pay.sqb.controller; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -24,6 +25,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; @Tag(name = "sqb支付") @RestController @RequestMapping("/pay/sql") +@ConditionalOnProperty(prefix = "pay.sqb", name = "enabled", havingValue = "true") public class SQBController extends BaseController { @Autowired private SQBServiceImpl sqbServiceImpl; diff --git a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java index c704984..e9fb5ae 100644 --- a/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java +++ b/ruoyi-pay/ruoyi-pay-sqb/src/main/java/com/ruoyi/pay/sqb/service/Impl/SQBServiceImpl.java @@ -4,6 +4,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; import com.alibaba.fastjson2.JSON; @@ -11,13 +12,14 @@ import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.sign.Md5Utils; import com.ruoyi.pay.domain.PayOrder; -import com.ruoyi.pay.sqb.constant.SqbConstant; +import com.ruoyi.pay.sqb.config.SqbConfig; import com.ruoyi.pay.sqb.utils.HttpUtil; @Service +@ConditionalOnProperty(prefix = "pay.sqb", name = "enabled", havingValue = "true") public class SQBServiceImpl { @Autowired - private SqbConstant sqbConstant; + private SqbConfig sqbConstant; /** * 计算字符串的MD5值 @@ -107,7 +109,7 @@ public class SQBServiceImpl { try { params.put("terminal_sn", sqbConstant.getTerminalSn()); // 收钱吧终端ID params.put("client_sn", payOrder.getOrderNumber()); // 商户系统订单号,必须在商户系统内唯一;且长度不超过64字节 - params.put("refund_amount", payOrder.getTotalAmount()); // 退款金额 + params.put("refund_amount", payOrder.getActualAmount()); // 退款金额 params.put("refund_request_no", "1"); // 商户退款所需序列号,表明是第几次退款 params.put("operator", "kay"); // 门店操作员 @@ -156,14 +158,14 @@ public class SQBServiceImpl { "&return_url=" + "https://www.shouqianba.com/" + "&subject=" + payOrder.getRemark() + "&terminal_sn=" + sqbConstant.getTerminalSn() + - "&total_amount=" + payOrder.getTotalAmount(); + "&total_amount=" + payOrder.getActualAmount(); String urlParam = "" + "client_sn=" + payOrder.getOrderNumber() + "&operator=" + URLEncoder.encode("admin", "UTF-8") + "&return_url=" + "https://www.shouqianba.com/" + "&subject=" + URLEncoder.encode(payOrder.getRemark(), "UTF-8") + "&terminal_sn=" + sqbConstant.getTerminalSn() + - "&total_amount=" + payOrder.getTotalAmount(); + "&total_amount=" + payOrder.getActualAmount(); String sign = getSign(param + "&key=" + sqbConstant.getTerminalKey()); return "https://qr.shouqianba.com/gateway?" + urlParam + "&sign=" + sign.toUpperCase(); } @@ -179,7 +181,7 @@ public class SQBServiceImpl { try { params.put("terminal_sn", sqbConstant.getTerminalSn()); // 收钱吧终端ID params.put("client_sn", payOrder.getOrderNumber()); // 商户系统订单号,必须在商户系统内唯一;且长度不超过32字节 - params.put("total_amount", payOrder.getTotalAmount()); // 交易总金额 + params.put("total_amount", payOrder.getActualAmount()); // 交易总金额 // params.put("payway", payway); // 支付方式 params.put("subject", "无简介"); // 交易简介 params.put("operator", SecurityUtils.getUsername()); // 门店操作员 diff --git a/ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/config/WxPayAppConfig.java b/ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/config/WxPayConfig.java similarity index 94% rename from ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/config/WxPayAppConfig.java rename to ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/config/WxPayConfig.java index fd19973..a7b7d74 100644 --- a/ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/config/WxPayAppConfig.java +++ b/ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/config/WxPayConfig.java @@ -7,7 +7,7 @@ import java.nio.file.StandardCopyOption; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -23,8 +23,8 @@ import com.wechat.pay.java.service.payments.nativepay.NativePayService; * @author ZlH */ @Configuration -@ConfigurationProperties(prefix = "wechat") -public class WxPayAppConfig { +@ConditionalOnProperty(prefix = "pay.wechat", name = "enabled", havingValue = "true") +public class WxPayConfig { @Value("${pay.wechat.merchantId}") private String wxchantId; diff --git a/ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/controller/WxAppPayController.java b/ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/controller/WxPayController.java similarity index 92% rename from ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/controller/WxAppPayController.java rename to ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/controller/WxPayController.java index cc66df0..1660501 100644 --- a/ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/controller/WxAppPayController.java +++ b/ruoyi-pay/ruoyi-pay-wx/src/main/java/com/ruoyi/pay/wx/controller/WxPayController.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.util.StreamUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -16,7 +17,7 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.pay.domain.PayOrder; import com.ruoyi.pay.service.IPayOrderService; -import com.ruoyi.pay.wx.config.WxPayAppConfig; +import com.ruoyi.pay.wx.config.WxPayConfig; import com.wechat.pay.java.core.exception.ValidationException; import com.wechat.pay.java.core.notification.NotificationParser; import com.wechat.pay.java.core.notification.RequestParam; @@ -38,10 +39,11 @@ import lombok.extern.slf4j.Slf4j; */ @Slf4j @RestController +@ConditionalOnProperty(prefix = "pay.wechat", name = "enabled", havingValue = "true") @RequestMapping("/wxPay") -public class WxAppPayController extends BaseController { +public class WxPayController extends BaseController { @Autowired - private WxPayAppConfig wxPayAppConfig; + private WxPayConfig wxPayAppConfig; @Autowired private IPayOrderService payOrderService; @@ -57,7 +59,7 @@ public class WxAppPayController extends BaseController { @GetMapping("/pay/{orderNumber}") public AjaxResult pay(@PathVariable String orderNumber) throws Exception { PayOrder aliPay = payOrderService.selectPayOrderByOrderNumber(orderNumber); - String amountStr = aliPay.getTotalAmount(); + String amountStr = aliPay.getActualAmount(); double amountDouble = Double.parseDouble(amountStr); int totalAmountInt = (int) (amountDouble * 100); PrepayRequest request = new PrepayRequest(); diff --git a/sql/pay.sql b/sql/pay.sql index 7b30ae0..62aab66 100644 --- a/sql/pay.sql +++ b/sql/pay.sql @@ -8,6 +8,7 @@ CREATE TABLE `pay_order` ( `order_number` varchar(255) NULL DEFAULT NULL COMMENT '订单号', `order_status` varchar(255) NULL DEFAULT NULL COMMENT '订单状态', `total_amount` varchar(255) NULL DEFAULT NULL COMMENT '订单总金额', + `actual_amount` varchar(255) NULL DEFAULT NULL COMMENT '实际支付金额', `order_content` varchar(255) NULL DEFAULT NULL COMMENT '订单内容', `order_remark` varchar(255) NULL DEFAULT NULL COMMENT '订单备注', `order_message` varchar(255) NULL DEFAULT NULL COMMENT '负载信息',