From 94ff46df856f6d4f8d8393e22001351c793f4e5b Mon Sep 17 00:00:00 2001
From: wzp <2040239371@qq.com>
Date: 星期一, 05 五月 2025 16:44:36 +0800
Subject: [PATCH] feat: 新增payInfo测试和部分优化appsecret

---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java                          |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java     |   14 +-
 ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderSign.java |   22 ++--
 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java                  |   25 ++++++
 ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderUtil.java |   14 +-
 ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml                  |   10 ++
 ruoyi-ui/src/views/system/clientApp/index.vue                                         |   14 ++
 ruoyi-ui/src/router/index.js                                                          |    6 +
 ruoyi-ui/src/views/system/payInfoTest/index.vue                                       |   78 +++++++++++++++++++
 9 files changed, 155 insertions(+), 30 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java
index 5f0b743..716e251 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java
@@ -130,12 +130,12 @@
             model.setCondition(tbOrders.getRemark()); // 璁剧疆澶囨敞淇℃伅
 //        model.setDoctor("鍖荤敓" + (int) (Math.random() * 10)); // 闅忔満璁剧疆鎮h�呭尰鐢�
 //        model.setDoctorPhone("13" + (int) (Math.random() * 900000000 + 100000000)); // 闅忔満鐢熸垚鎮h�呭尰鐢熺數璇�
-            model.setOfferPrice(tbOrders.getBookingPrice().doubleValue()); // 闅忔満鐢熸垚鎶ヤ环
+            model.setOfferPrice(tbOrders.getBookingPrice().doubleValue()); // 鐢熸垚鎶ヤ环
 //        model.setReferrals("鎺ㄤ粙浜�" + (int) (Math.random() * 10)); // 闅忔満璁剧疆鎺ㄤ粙浜轰俊鎭�
 //        model.setUnitRemarks("鍟嗘埛闅忔満澶囨敞淇℃伅"); // 闅忔満璁剧疆鍟嗘埛澶囨敞
-//        model.setPayQRcodeURL("https://example.com/qrcode/" + (int) (Math.random() * 100)); // 闅忔満鐢熸垚澶栭儴鏀粯浜岀淮鐮侀摼鎺�
+          model.setPayQRcodeURL(scApp.getPayUrl());
 
-            ServiceOrderAppResultVo result = ServiceOrderUtil.CreateServiceOrder(model);
+            ServiceOrderAppResultVo result = ServiceOrderUtil.CreateServiceOrder(model,scApp.getMinAppSecret());
 
             if (result.getResult() == 1) {
                 tbOrders.setOrderID(tbOrders.getOrderID());
@@ -168,7 +168,7 @@
             return AjaxResult.error("璁㈠崟鐘舵�佸凡鍙栨秷");
         }
 
-        SysClientApp scApp = clientAppService.selectSysClientAppByAppId(1L);
+        SysClientApp scApp = clientAppService.selectSysClientAppByAppKey("appId1");
 
 
         ServiceOrderAppVo model = new ServiceOrderAppVo();
@@ -197,9 +197,9 @@
         model.setOfferPrice(tbOrders.getBookingPrice().doubleValue()); // 鎶ヤ环
 //        model.setReferrals("鎺ㄤ粙浜�")); // 璁剧疆鎺ㄤ粙浜轰俊鎭�--娌℃湁鎺ㄤ粙浜轰俊鎭�
 //        model.setUnitRemarks("鍟嗘埛澶囨敞淇℃伅"); // 璁剧疆鍟嗘埛澶囨敞--娌℃湁鍟嗘埛澶囨敞
-//        model.setPayQRcodeURL("https://example.com/qrcode/")); // 澶栭儴鏀粯浜岀淮鐮侀摼鎺�--鐢ㄤ笉鍒�
+       model.setPayQRcodeURL(scApp.getPayUrl());
 
-        ServiceOrderAppResultVo result = ServiceOrderUtil.CreateServiceOrder(model);
+        ServiceOrderAppResultVo result = ServiceOrderUtil.CreateServiceOrder(model,scApp.getMinAppSecret());
 
         if (result.getResult() == 1) {
             tbOrders.setOrderID(tbOrders.getOrderID());
@@ -235,7 +235,7 @@
             model.setServiceOrdID(cancelVo.getThirdOrderNo()); // 璁剧疆绗笁鏂硅鍗曞彿
             model.setDELRemarks(cancelVo.getReason()); // 璁剧疆鍙栨秷鍘熷洜
 
-            ServiceOrderAppResultVo result = ServiceOrderUtil.CancelServiceOrder(model);
+            ServiceOrderAppResultVo result = ServiceOrderUtil.CancelServiceOrder(model,scApp.getMinAppSecret());
 
             if (result.getResult() == 1) {
                 // 鏇存柊鏈湴璁㈠崟鐘舵��
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderSign.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderSign.java
index fd03165..9dc2790 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderSign.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderSign.java
@@ -10,7 +10,6 @@
     private static final int BITS_TO_A_BYTE = 8;
     private static final int BYTES_TO_A_WORD = 4;
     private static final int BITS_TO_A_WORD = 32;
-    private static final String APP_SECRET = "JR6o8RQItoa2bzlneOCQ";
 
     private static final long[] m_lOnBits = new long[31];
     private static final long[] m_l2Power = new long[31];
@@ -280,7 +279,7 @@
      * @param params 璇锋眰鍙傛暟闆嗗悎
      * @return 绛惧悕鍊�
      */
-    public static String generateSign(Map<String, String> params) {
+    public static String generateSign(Map<String, String> params,String APP_SECRET) {
         // 1. 绉婚櫎sign鍙傛暟
         params.remove("sign");
         params.remove("Sign");
@@ -331,8 +330,9 @@
      * @return 楠岃瘉缁撴灉
      */
     public static boolean verifySign(Map<String, String> params, String sign) {
-        String generatedSign = generateSign(params);
-        return generatedSign.equalsIgnoreCase(sign);
+//        String generatedSign = generateSign(params);
+//        return generatedSign.equalsIgnoreCase(sign);
+        return  false;
     }
 
     /**
@@ -340,13 +340,13 @@
      */
     public static void main(String[] args) {
         // 娴嬭瘯鐢ㄤ緥
-        Map<String, String> params = new HashMap<>();
-        params.put("method", "User_Login");
-        params.put("LoginType", "0");
-        params.put("UserID", "10");
-
-        String sign = generateSign(params);
-        System.out.println("鐢熸垚鐨勭鍚�: " + sign);
+//        Map<String, String> params = new HashMap<>();
+//        params.put("method", "User_Login");
+//        params.put("LoginType", "0");
+//        params.put("UserID", "10");
+//
+//        String sign = generateSign(params);
+//        System.out.println("鐢熸垚鐨勭鍚�: " + sign);
         // 搴旇緭鍑�: 9a0a8659f005d6984697e2ca0a9cf3b7
     }
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderUtil.java
index e0bafdf..4e7498f 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderUtil.java
@@ -29,7 +29,7 @@
      * @param model 鏈嶅姟鍗曞簲鐢ㄥ�煎璞�
      * @return 鏈嶅姟鍗曟帴鍙h皟鐢ㄧ粨鏋�
      */
-    public static ServiceOrderAppResultVo CreateServiceOrder(ServiceOrderAppVo model) {
+    public static ServiceOrderAppResultVo CreateServiceOrder(ServiceOrderAppVo model,String appSecret) {
         if (AddServiceOrederAPI.isEmpty()) {
             // log.info("AddServiceOrederAPI 鏈缃紝璇峰厛璁剧疆鎺ュ彛鍦板潃銆�");
             return null;
@@ -54,7 +54,7 @@
             }
         }
 
-        model.setSign(ServiceOrderSign.generateSign(params)); // 鐢熸垚绛惧悕骞惰缃埌妯″瀷涓�
+        model.setSign(ServiceOrderSign.generateSign(params,appSecret)); // 鐢熸垚绛惧悕骞惰缃埌妯″瀷涓�
 
 
         // 鏇挎崲涓�
@@ -105,7 +105,7 @@
      * @param model 鏈嶅姟璁㈠崟鍒犻櫎璇锋眰鍊煎璞�
      * @return 鏈嶅姟璁㈠崟鍒犻櫎鎺ュ彛璋冪敤缁撴灉
      */
-    public static ServiceOrderAppResultVo CancelServiceOrder(ServiceOrderDelVo model) {
+    public static ServiceOrderAppResultVo CancelServiceOrder(ServiceOrderDelVo model,String appSecret) {
         if (AddServiceOrederAPI.isEmpty()) {
             // log.info("AddServiceOrederAPI 鏈缃紝璇峰厛璁剧疆鎺ュ彛鍦板潃銆�");
             return null;
@@ -130,7 +130,7 @@
             }
         }
 
-        model.setSign(ServiceOrderSign.generateSign(params));
+        model.setSign(ServiceOrderSign.generateSign(params,appSecret));
 
         // 鏋勫缓琛ㄥ崟鏁版嵁
         StringBuilder formData = new StringBuilder();
@@ -188,8 +188,8 @@
         model.setDELRemarks("娴嬭瘯");
 
         // 璋冪敤 CancelServiceOrder 鏂规硶鍙栨秷鏈嶅姟鍗�
-        ServiceOrderAppResultVo result = CancelServiceOrder(model);
-        System.out.println("1");
+//        ServiceOrderAppResultVo result = CancelServiceOrder(model);
+//        System.out.println("1");
     }
 
     public static  void test()
@@ -224,7 +224,7 @@
          model.setPayQRcodeURL("https://example.com/qrcode/" + (int) (Math.random() * 100)); // 闅忔満鐢熸垚澶栭儴鏀粯浜岀淮鐮侀摼鎺�
 
          // 璋冪敤 CreateServiceOrder 鏂规硶鍒涘缓鏈嶅姟鍗�
-         ServiceOrderAppResultVo result = CreateServiceOrder(model);
+//         ServiceOrderAppResultVo result = CreateServiceOrder(model);
     }
     
 }
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index 10363e2..e187354 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -111,7 +111,7 @@
                         log.error("鑾峰彇璋冨害鍗曞紓甯革細"+e.getMessage());
                     }
 
-                    SysClientApp clientApp = sysClientAppService.selectSysClientAppByAppId(1L);
+                    SysClientApp clientApp = sysClientAppService.selectSysClientAppByAppKey("appId1");
                     if(clientApp==null){
                         log.error("鍥炶皟鍦板潃涓嶅瓨鍦�");
                         return;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java
index 78c4a8e..4c6536b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java
@@ -51,11 +51,20 @@
     @Excel(name = "min_app_id")
     private String minAppId;
 
+    /** min_app_secret */
+    @Excel(name = "min_app_secret")
+    private String minAppSecret;
+
+
 
     /** 鍥炶皟鍦板潃 */
     @Excel(name = "鍥炶皟鍦板潃")
     private String callbackUrl;
 
+
+    /** 鏀粯鍦板潃 */
+    @Excel(name = "鏀粯鍦板潃")
+    private String payUrl;
 
 
     public Long getAppId() {
@@ -138,6 +147,22 @@
         this.callbackUrl = callbackUrl;
     }
 
+    public String getPayUrl() {
+        return payUrl;
+    }
+
+    public void setPayUrl(String payUrl) {
+        this.payUrl = payUrl;
+    }   
+
+    public String getMinAppSecret() {
+        return minAppSecret;
+    }
+
+    public void setMinAppSecret(String minAppSecret) {
+        this.minAppSecret = minAppSecret;
+    }
+    
     @Override
     public String toString() {
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml
index 647484c..b9cc0f2 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml
@@ -19,11 +19,13 @@
         <result property="updateTime"    column="update_time"    />
         <result property="remark"    column="remark"    />
         <result property="minAppId"    column="min_app_id"    />
+        <result property="minAppSecret"    column="min_app_secret"    />
         <result property="callbackUrl"    column="callback_url"    />
+        <result property="payUrl"    column="pay_url"    />
     </resultMap>
 
     <sql id="selectSysClientAppVo">
-        select app_id, client_name, app_key, security_key, valid_start_time, valid_end_time, status, del_flag, create_by, create_time, update_by, update_time, remark, min_app_id, callback_url from sys_client_app
+        select app_id, client_name, app_key, security_key, valid_start_time, valid_end_time, status, del_flag, create_by, create_time, update_by, update_time, remark, min_app_id, min_app_secret, callback_url, pay_url from sys_client_app
     </sql>
 
     <select id="selectSysClientAppList" parameterType="SysClientApp" resultMap="SysClientAppResult">
@@ -63,7 +65,9 @@
             <if test="updateTime != null">update_time,</if>
             <if test="remark != null">remark,</if>
             <if test="minAppId != null">min_app_id,</if>
+            <if test="minAppSecret != null">min_app_secret,</if>
             <if test="callbackUrl != null">callback_url,</if>
+            <if test="payUrl != null">pay_url,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="clientName != null">#{clientName},</if>
@@ -79,7 +83,9 @@
             <if test="updateTime != null">#{updateTime},</if>
             <if test="remark != null">#{remark},</if>
             <if test="minAppId != null">#{minAppId},</if>
+            <if test="minAppSecret != null">#{minAppSecret},</if>
             <if test="callbackUrl != null">#{callbackUrl},</if>
+            <if test="payUrl != null">#{payUrl},</if>
          </trim>
     </insert>
 
@@ -94,7 +100,9 @@
             <if test="status != null and status != ''">status = #{status},</if>
             <if test="remark != null">remark = #{remark},</if>
             <if test="minAppId != null">min_app_id = #{minAppId},</if>
+            <if test="minAppSecret != null">min_app_secret = #{minAppSecret},</if>
             <if test="callbackUrl != null">callback_url = #{callbackUrl},</if>
+            <if test="payUrl != null">pay_url = #{payUrl},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
             update_time = sysdate()
         </set>
diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js
index 3826ac3..8f09ae1 100644
--- a/ruoyi-ui/src/router/index.js
+++ b/ruoyi-ui/src/router/index.js
@@ -111,6 +111,12 @@
     component: () => import('@/views/system/gps/map'),
     name: 'GpsMap',
     meta: { title: '杞﹁締杞ㄨ抗', icon: 'map' ,anonymous: true}
+  },
+  {
+    path: '/payInfoTest',
+    component: (resolve) => require(['@/views/system/payInfoTest/index'], resolve),
+    hidden: true,
+    meta: { title: '鏀粯淇℃伅娴嬭瘯', anonymous: true }
   }
 ]
 
diff --git a/ruoyi-ui/src/views/system/clientApp/index.vue b/ruoyi-ui/src/views/system/clientApp/index.vue
index ee47357..faea463 100644
--- a/ruoyi-ui/src/views/system/clientApp/index.vue
+++ b/ruoyi-ui/src/views/system/clientApp/index.vue
@@ -102,8 +102,10 @@
           <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
         </template>
       </el-table-column>
-      <el-table-column label="姘戣埅鍒嗗叕鍙窱d" align="center" prop="minAppId" />
+      <el-table-column label="姘戣埅鍚堜綔鍏徃Id" align="center" prop="minAppId" />
+      <el-table-column label="姘戣埅鍚堜綔鍏徃瀵嗛挜" align="center" prop="minAppSecret" />
       <el-table-column label="鍥炶皟鍦板潃" align="center" prop="callbackUrl" />
+      <el-table-column label="鏀粯鍦板潃" align="center" prop="payUrl" />
       <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -164,12 +166,18 @@
             >{{dict.label}}</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="姘戣埅鍒嗗叕鍙窱d" prop="minAppId">
-          <el-input v-model="form.minAppId" placeholder="璇疯緭鍏ユ皯鑸垎鍏徃Id" />
+        <el-form-item label="姘戣埅鍚堜綔鍏徃Id" prop="minAppId">
+          <el-input v-model="form.minAppId" placeholder="璇疯緭鍏ユ皯鑸悎浣滃叕鍙窱d" />
+        </el-form-item>
+        <el-form-item label="姘戣埅鍚堜綔鍏徃瀵嗛挜" prop="minAppSecret">
+          <el-input v-model="form.minAppSecret" placeholder="璇疯緭鍏ユ皯鑸悎浣滃叕鍙稿瘑閽�" />
         </el-form-item>
         <el-form-item label="鍥炶皟鍦板潃" prop="callbackUrl">
           <el-input v-model="form.callbackUrl" placeholder="璇疯緭鍏ュ洖璋冨湴鍧�" />
         </el-form-item>
+        <el-form-item label="鏀粯鍦板潃" prop="payUrl">
+          <el-input v-model="form.payUrl" placeholder="璇疯緭鍏ユ敮浠樺湴鍧�" />
+        </el-form-item>
         <el-form-item label="澶囨敞" prop="remark">
           <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
diff --git a/ruoyi-ui/src/views/system/payInfoTest/index.vue b/ruoyi-ui/src/views/system/payInfoTest/index.vue
new file mode 100644
index 0000000..8bbcb4d
--- /dev/null
+++ b/ruoyi-ui/src/views/system/payInfoTest/index.vue
@@ -0,0 +1,78 @@
+<template>
+  <div class="app-container">
+    <div v-if="!validated" class="loading-container">
+      <el-alert
+        :title="errorMessage || '姝e湪鍔犺浇鏀粯鏁版嵁...'"
+        :type="errorMessage ? 'error' : 'info'"
+        :closable="false"
+        show-icon>
+      </el-alert>
+    </div>
+    <div v-else>
+      <el-card class="box-card">
+        <div slot="header" class="clearfix">
+          <span>鏀粯淇℃伅璇︽儏</span>
+        </div>
+        <el-descriptions :column="1" border>
+          <el-descriptions-item label="鏀粯閲戦">
+            {{ payAmount }} 鍏�
+          </el-descriptions-item>
+          <el-descriptions-item label="璁㈠崟鍙�">
+            {{ orderNo }}
+          </el-descriptions-item>
+          <el-descriptions-item label="浜ゆ槗娴佹按鍙�">
+            {{ transactionNo }}
+          </el-descriptions-item>
+        </el-descriptions>
+      </el-card>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'PayInfoTest',
+  data() {
+    return {
+      validated: false,
+      errorMessage: '',
+      payAmount: '',
+      orderNo: '',
+      transactionNo: ''
+    }
+  },
+  created() {
+    this.initData();
+  },
+  methods: {
+    initData() {
+      // 浠嶶RL鍙傛暟涓幏鍙栨暟鎹�
+      const query = this.$route.query;
+      if (!query.payAmount || !query.orderNo || !query.transactionNo) {
+        this.errorMessage = '缂哄皯蹇呰鐨勫弬鏁颁俊鎭�';
+        return;
+      }
+
+      // 璁剧疆鏁版嵁
+      this.payAmount = query.payAmount;
+      this.orderNo = query.orderNo;
+      this.transactionNo = query.transactionNo;
+
+      // 妯℃嫙鍔犺浇寤惰繜
+      setTimeout(() => {
+        this.validated = true;
+      }, 500);
+    }
+  }
+}
+</script>
+
+<style scoped>
+.loading-container {
+  margin: 20px;
+  text-align: center;
+}
+.box-card {
+  margin: 20px;
+}
+</style>

--
Gitblit v1.9.1