Просмотр исходного кода

feature: 微信充值
1.自助机二维码充值

luoyb 1 год назад
Родитель
Сommit
36335e2980

+ 35 - 15
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/ThirdPayBusiness.java

@@ -9,7 +9,7 @@ import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.dromara.backstage.payment.config.WechatPayConfig;
+import org.dromara.backstage.config.ThirdPayConfig;
 import org.dromara.backstage.payment.domain.bo.PayOrderBo;
 import org.dromara.backstage.payment.domain.bo.PurseInOutBo;
 import org.dromara.backstage.payment.domain.vo.PayOrderVo;
@@ -18,6 +18,7 @@ import org.dromara.common.core.domain.R;
 import org.dromara.common.core.enums.BalanceUpdateEnum;
 import org.dromara.common.core.enums.CreditStatusEnum;
 import org.dromara.common.core.enums.CreditTypeEnum;
+import org.dromara.common.core.enums.PayStatusEnum;
 import org.springframework.stereotype.Service;
 
 import java.text.MessageFormat;
@@ -40,15 +41,15 @@ import java.util.Map;
 public class ThirdPayBusiness {
     private final IPayOrderService payOrderService;
     private final PayOrderBusiness payOrderBusiness;
-    private final WechatPayConfig wechatPayConfig;
-    //private final PayServiceManager manager;
+    private final ThirdPayConfig thirdPayConfig;
 
     /**
      * 生成充值收款二维码
+     *
      * @param bo 充值订单
      * @return 二维码信息
      */
-    public R<Map<String,String>> createCollectQrCode(PayOrderBo bo) throws Exception {
+    public R<Map<String, String>> createCollectQrCode(PayOrderBo bo) throws Exception {
         R<PayOrderVo> result = createThirdPayOrder(bo);
         if (R.isError(result)) {
             return R.fail(result.getMsg());
@@ -69,7 +70,7 @@ public class ThirdPayBusiness {
      * @param bo 订单信息
      * @return 处理结果
      */
-    public R<PayOrderVo> payCallBackHandler(PayOrderBo bo){
+    public R<PayOrderVo> payCallBackHandler(PayOrderBo bo) {
         // 1.设置支付订单的支付状态
         R<PayOrderVo> result = setOrderPayResult(bo);
         if (R.isError(result)) {
@@ -103,6 +104,7 @@ public class ThirdPayBusiness {
 
     /**
      * 生成第三方支付订单
+     *
      * @param bo 订单信息
      * @return 订单信息
      */
@@ -116,6 +118,7 @@ public class ThirdPayBusiness {
 
     /**
      * 第三方支付订单入账
+     *
      * @param bo 订单信息
      * @return 入账结果
      */
@@ -141,6 +144,7 @@ public class ThirdPayBusiness {
 
     /**
      * 更新订单的支付状态
+     *
      * @param bo 订单信息
      * @return 更新结果
      */
@@ -165,6 +169,7 @@ public class ThirdPayBusiness {
 
     /**
      * 更新订单的入账状态
+     *
      * @param bo 订单信息
      * @return 更新结果
      */
@@ -177,27 +182,42 @@ public class ThirdPayBusiness {
         return R.ok(vo);
     }
 
-    public R<Map<String,String>> createWechatQrCode(PayOrderVo vo) throws Exception {
-        String sendUrl = "http://localhost:8083/pay/qrCode";
-        vo.setBackUrl("http://localhost:8001/dev-api/self/teacher/api/v1/wechat/recharge/result/");
-        HttpRequest req = HttpUtil.createPost(sendUrl);
+    /**
+     * 生成微信的二维码
+     * @param vo 订单信息
+     * @return 二维码
+     */
+    public R<Map<String, String>> createWechatQrCode(PayOrderVo vo) {
+        String qrCodeUrl = thirdPayConfig.getPayApi() + "qrCode";
+        vo.setBackUrl(thirdPayConfig.getRechargeBackUrl() + vo.getOrderId());
+        HttpRequest req = HttpUtil.createPost(qrCodeUrl);
         req.body(JSONUtil.toJsonStr(vo));
-        try(HttpResponse res = req.execute()){
+        try (HttpResponse res = req.execute()) {
             JSONObject object = JSONUtil.parseObj(res.body());
             String resCode = object.getStr("code");
-            String resMessage = object.getStr("message");
             String resData = object.getStr("data");
             if (ObjectUtil.equals(resCode, "200")) {
                 Map<String, String> map = new HashMap<>();
-                map.put("orderSn",vo.getOrderId().toString());
+                map.put("orderSn", vo.getOrderId().toString());
                 map.put("qrCode", resData);
 
                 return R.ok(map);
             }
-            return R.fail(String.format("[生成微信收款码错误]-[%s]",resMessage));
-        }catch (Exception e){
-            log.error("[生成微信收款码错误]-[{0}]",e);
+            return R.fail(String.format("[生成微信收款码错误]-[%s]", object));
+        } catch (Exception e) {
+            log.error("[生成微信收款码错误]-[{0}]", e);
             return R.fail("[生成微信收款码错误]");
         }
     }
+
+    public R<Void> queryOrderPayResult(String orderSn) {
+        PayOrderVo vo = payOrderService.queryById(Long.valueOf(orderSn));
+        if (ObjectUtil.isEmpty(vo)) {
+            return R.fail(String.format("[无此订单]-[订单号:%s]", orderSn));
+        }
+        if (ObjectUtil.equals(vo.getPayStatus(), PayStatusEnum.SUCCESS.code().toString())) {
+            return R.ok(String.format("[订单已支付]-[订单号:%s]", orderSn));
+        }
+        return R.fail(String.format("[订单待支付]-[订单号:%s]", orderSn));
+    }
 }

+ 32 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/config/ThirdPayConfig.java

@@ -0,0 +1,32 @@
+package org.dromara.backstage.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * name: LockConfig
+ * package: org.dromara.backstage.config
+ * description: 第三方支付相关配置
+ * date: 2024-11-20 08:46:52 08:46
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+@Configuration
+@Data
+public class ThirdPayConfig {
+    /**
+     * 支付服务地址
+     */
+    @Value("${third-api.pay-api}")
+    private String payApi;
+
+    /**
+     * 自助充值回调地址
+     */
+    @Value("${third-api.recharge-back-url}")
+    private String rechargeBackUrl;
+
+}

+ 12 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/controller/self/SelfController.java

@@ -2,9 +2,11 @@ package org.dromara.backstage.controller.self;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.backstage.business.payments.ThirdPayBusiness;
 import org.dromara.backstage.business.self.SelfBusiness;
 import org.dromara.common.core.api.ResponseResult;
 import org.dromara.common.core.api.ReturnResult;
+import org.dromara.common.core.domain.R;
 import org.dromara.common.core.enums.ResultCodeEnum;
 import org.springframework.web.bind.annotation.*;
 
@@ -25,7 +27,7 @@ import java.util.Map;
 @RequiredArgsConstructor
 public class SelfController {
     private final SelfBusiness selfBusiness;
-
+    private final ThirdPayBusiness thirdPayBusiness;
     /**
      * 发送手机短信
      *
@@ -38,6 +40,7 @@ public class SelfController {
 
         selfBusiness.sendSms(mobile, message);
     }
+
     @PostMapping(value = "/api/v1/sms/no")
     public void sendNoRoomSms(@RequestBody Map<String, String> mapSendInfo){
         String phone = mapSendInfo.get("mobile");
@@ -61,4 +64,12 @@ public class SelfController {
 
     }
 
+    @GetMapping("/api/v1/wechat/result/{orderSn}")
+    public ReturnResult queryPayResultByOrderSn(@PathVariable("orderSn") String orderSn){
+        R<Void> result = thirdPayBusiness.queryOrderPayResult(orderSn);
+        if (R.isSuccess(result)) {
+            return ReturnResult.success();
+        }
+        return ReturnResult.failure(ResultCodeEnum.SYSTEM_INNER_ERROR.code(),result.getMsg());
+    }
 }

+ 30 - 7
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/ThirdPayController.java

@@ -1,18 +1,27 @@
 package org.dromara.backstage.payment.controller;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import lombok.RequiredArgsConstructor;
 import org.dromara.backstage.business.payments.ThirdPayBusiness;
+import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBackBo;
+import org.dromara.backstage.consumption.domain.vo.XfCreditAccountBackVo;
 import org.dromara.backstage.payment.domain.bo.PayOrderBo;
 import org.dromara.backstage.payment.domain.vo.PayOrderVo;
 import org.dromara.common.core.api.ResponseResult;
+import org.dromara.common.core.api.ReturnResult;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.enums.CreditStatusEnum;
 import org.dromara.common.core.enums.PayStatusEnum;
+import org.dromara.common.core.enums.ResultCodeEnum;
 import org.dromara.common.web.core.BaseController;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * name: ThirdPayController
@@ -32,18 +41,32 @@ import org.springframework.web.bind.annotation.RestController;
 public class ThirdPayController extends BaseController {
     private final ThirdPayBusiness thirdPayBusiness;
     /**
-     * 第三方支付结果回调
+     * 第三方支付结果回调,支付成功后入账一卡账户
      * @param orderSn 订单号(一卡通创建)
      * @param paySn 支付流水号(第三方支付收款方创建)
      */
-    @RequestMapping("/result/{orderSn}/{paySn}")
-    public R<PayOrderVo> callBackThirdPay(@PathVariable("orderSn") String orderSn,@PathVariable("paySn") String paySn){
+    @RequestMapping("/back/{orderSn}/{paySn}/{payTime}")
+    public R<PayOrderVo> callBackThirdPay(@PathVariable("orderSn") String orderSn, @PathVariable("paySn") String paySn, @PathVariable("payTime")Date payTime){
         PayOrderBo bo = new PayOrderBo();
         bo.setOrderId(Long.valueOf(orderSn));
         bo.setPaySn(paySn);
         bo.setPayStatus(PayStatusEnum.SUCCESS.code().toString());
-        bo.setCreditTime(DateUtil.date());
+        bo.setCreditTime(DateUtil.date(payTime));
 
         return thirdPayBusiness.payCallBackHandler(bo);
     }
+
+    /**
+     * 查询充值订单支付状态
+     * @param orderSn 充值订单
+     * @return 查询结果
+     */
+    @PostMapping("/result/{orderSn}")
+    public ReturnResult queryOrderPayResult(@PathVariable("orderSn") String orderSn) {
+        R<Void> result = thirdPayBusiness.queryOrderPayResult(orderSn);
+        if (R.isSuccess(result)) {
+            ReturnResult.success();
+        }
+        return ReturnResult.failure(ResultCodeEnum.SYSTEM_INNER_ERROR.code(),result.getMsg());
+    }
 }

+ 1 - 3
ruoyi-modules/ruoyi-backstage/src/main/resources/MET-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -1,4 +1,2 @@
 org.dromara.backstage.config.LockConfig
-org.dromara.backstage.payment.config.WechatPayConfig
-org.dromara.backstage.payment.config.ThirdPayBaseConfig
-org.dromara.backstage.payment.config.MerchantPayServiceConfigurer
+org.dromara.backstage.config.ThirdPayConfig