diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/ConsumeController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/ConsumeController.java index e8740710..9766448e 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/ConsumeController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/ConsumeController.java @@ -55,20 +55,7 @@ public class ConsumeController { @PostMapping("/order/vip/create") @Operation(summary = "创建VIP订单") @Log(title = "创建VIP订单", businessType = BusinessType.OTHER, isSaveDb = true) - public R vipOrderCreate(@RequestBody AddRechargeOrderDto dto){ - RechargeOrder order = rechargeOrderService.addRechargeOrder(dto); - OrderCreateVo vo = new OrderCreateVo(); - vo.setPrice(order.getPrice()); - vo.setOrderNo(order.getOrderNo()); - vo.setOrderName(order.getRechargeName()); - return R.ok(vo); - } - - - @PostMapping("/order/recharge/create") - @Operation(summary = "创建充值订单") - @Log(title = "创建充值订单", businessType = BusinessType.OTHER, isSaveDb = true) - public R giveGift(@RequestBody AddVipOrderDto dto){ + public R vipOrderCreate(@RequestBody AddVipOrderDto dto){ VipOrder order = vipOrderService.addVipOrder(dto); OrderCreateVo vo = new OrderCreateVo(); vo.setPrice(order.getPrice()); @@ -76,4 +63,17 @@ public class ConsumeController { vo.setOrderName(order.getVipName()); return R.ok(vo); } + + + @PostMapping("/order/recharge/create") + @Operation(summary = "创建充值订单") + @Log(title = "创建充值订单", businessType = BusinessType.OTHER, isSaveDb = true) + public R rechargeOrderCreate(@RequestBody AddRechargeOrderDto dto){ + RechargeOrder order = rechargeOrderService.addRechargeOrder(dto); + OrderCreateVo vo = new OrderCreateVo(); + vo.setPrice(order.getPrice()); + vo.setOrderNo(order.getOrderNo()); + vo.setOrderName(order.getRechargeName()); + return R.ok(vo); + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/PayController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/PayController.java index b6dcfec0..60678fd7 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/PayController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/PayController.java @@ -48,6 +48,10 @@ public class PayController { @Operation(summary = "微信支付") @Log(title = "微信支付", businessType = BusinessType.OTHER, isSaveDb = true) public R appPay(@RequestBody PayControllerDTO dto) { + PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo()); + if(payOrderInfo == null){ + return R.fail(600,"支付失败,未找到订单"); + } PayConfig payConfig = payConfigManager.getWxConfig(); String ip = ServletUtils.getClientIP(); Map params = UnifiedOrderModel @@ -55,9 +59,9 @@ public class PayController { .appid(dto.getWxAppId()) .mch_id(payConfig.getWxMcid()) .nonce_str(WxPayKit.generateStr()) - .body("微信支付") + .body(payOrderInfo.getBody()) .out_trade_no(WxPayKit.generateStr()) - .total_fee("1000") + .total_fee(payOrderInfo.getPriceFenStr()) .spbill_create_ip(ip) .notify_url(payConfig.getNotifyUrl()) .trade_type(TradeType.APP.getTradeType()) @@ -92,17 +96,21 @@ public class PayController { @Operation(summary = "支付宝支付") @Log(title = "支付宝支付", businessType = BusinessType.OTHER, isSaveDb = true) public R aliPay(@RequestBody PayControllerDTO dto) { + PayOrderInfoDTO payOrderInfo = payManager.getOrderInfo(dto.getOrderNo()); + if(payOrderInfo == null){ + return R.fail(600,"支付失败,未找到订单"); + } try { boolean b = payConfigManager.initAliPay(); if(!b){ - return R.fail("支付宝支付失败!请联系管理员"); + return R.fail(600,"支付宝支付失败!请联系管理员"); } AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); - model.setBody("我是测试数据-By Javen"); - model.setSubject("App支付测试-By Javen"); + model.setBody(payOrderInfo.getBody()); + model.setSubject(payOrderInfo.getSubject()); model.setOutTradeNo(WxPayKit.generateStr()); model.setTimeoutExpress("30m"); - model.setTotalAmount("0.01"); + model.setTotalAmount(payOrderInfo.getPrice().toString()); String notifyUrl = AliPayApiConfigKit.getAliPayApiConfig().getServiceUrl(); String orderInfo = AliPayApi.appPayToResponse(model, notifyUrl).getBody(); PayReturnResp resp = new PayReturnResp(); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayControllerDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayControllerDTO.java index f9369087..789aba62 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayControllerDTO.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayControllerDTO.java @@ -6,7 +6,7 @@ import lombok.Data; @Data public class PayControllerDTO { @Schema(description = "订单号") - private String tradeNo; + private String orderNo; @Schema(description = "微信支付的时候需要传") private String wxAppId; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java index d2aa51d4..9797704a 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayManager.java @@ -1,11 +1,16 @@ package com.ruoyi.cai.pay; +import com.ruoyi.cai.domain.RechargeOrder; +import com.ruoyi.cai.domain.VipOrder; import com.ruoyi.cai.dto.ConsumeResp; import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp; import com.ruoyi.cai.manager.AwardManager; import com.ruoyi.cai.manager.ConsumerManager; import com.ruoyi.cai.service.PayTotalService; +import com.ruoyi.cai.service.RechargeOrderService; import com.ruoyi.cai.service.VipOrderService; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -21,10 +26,52 @@ public class PayManager { @Autowired private ConsumerManager consumerManager; @Autowired + private RechargeOrderService rechargeOrderService; + @Autowired private AwardManager awardManager; @Autowired private PayTotalService payTotalService; + public PayOrderInfoDTO getOrderInfo(String orderNo){ + OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo); + if(orderTypeEnum == null){ + log.error("订单类型有误!orderNo={}",orderNo); + throw new ServiceException("支付失败,请检查订单号"); + } + PayOrderInfoDTO dto = null; + switch (orderTypeEnum) { + case VIP_ORDER_SUB: + VipOrder vipOrder = vipOrderService.getByOrderNo(orderNo); + if(vipOrder == null){ + throw new ServiceException("订单不存在,请重新下单支付"); + } + if(!PayStatusEnum.READY_PAY.getCode().equals(vipOrder.getPayStatus())){ + throw new ServiceException("订单状态有误,请重新下单支付"); + } + dto = new PayOrderInfoDTO(); + dto.setBody(vipOrder.getVipName()); + dto.setSubject(vipOrder.getVipName()); + dto.setPrice(vipOrder.getPrice()); + break; + case RECHARGE_ORDER_SUB: + RechargeOrder rechargeOrder = rechargeOrderService.getByOrderNo(orderNo); + if(rechargeOrder == null){ + throw new ServiceException("订单不存在,请重新下单支付"); + } + if(!PayStatusEnum.READY_PAY.getCode().equals(rechargeOrder.getPayStatus())){ + throw new ServiceException("订单状态有误,请重新下单支付"); + } + dto = new PayOrderInfoDTO(); + dto.setBody(rechargeOrder.getRechargeName()); + dto.setSubject(rechargeOrder.getRechargeName()); + dto.setPrice(rechargeOrder.getPrice()); + break; + default: + break; + } + return dto; + } + public void callBack(String orderNo){ callBack(orderNo,null,null,null,null); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayOrderInfoDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayOrderInfoDTO.java new file mode 100644 index 00000000..d882b4c1 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayOrderInfoDTO.java @@ -0,0 +1,17 @@ +package com.ruoyi.cai.pay; + +import cn.hutool.core.util.NumberUtil; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class PayOrderInfoDTO { + private String body; + private String subject; + private BigDecimal price; + + public String getPriceFenStr(){ + return NumberUtil.mul(price,100).longValue()+""; + } +}