From f85face731c824dab846a152900457662cf75d3a Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期六, 22 十一月 2025 18:09:35 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongPayUtil.java |   93 +++++++++++++++++++++++++++++++++++++---------
 1 files changed, 74 insertions(+), 19 deletions(-)

diff --git a/UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongPayUtil.java b/UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongPayUtil.java
index 8d671f2..f2f6301 100644
--- a/UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongPayUtil.java
+++ b/UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongPayUtil.java
@@ -5,32 +5,41 @@
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.huifu.bspay.sdk.opps.core.BasePay;
+import com.huifu.bspay.sdk.opps.core.config.MerConfig;
+import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
 import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.huifu.properties.HuiFuProperties;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.security.KeyFactory;
 import java.security.PrivateKey;
 import java.security.Signature;
 import java.security.spec.PKCS8EncodedKeySpec;
 import java.text.SimpleDateFormat;
-import java.util.Base64;
-import java.util.Date;
-import java.util.TreeMap;
+import java.util.*;
 
 /**
  * 斗拱支付工具类
  */
 public class DouGongPayUtil {
 
-    @Autowired
-    private HuiFuProperties huiFuProperties;
+    @Value("${huifu.product_id}")
+    private static String productId;
+
+    @Value("${huifu.sys_id}")
+    private static String sysId;
+
+    @Value("${huifu.rsa_private_key}")
+    private static String privateKeyBase64;
 
 
-    @Value("${callbackPath}")
-    private static String callbackPath;//支付回调网关地址
+
+    private static String callbackPath = "http://221.182.45.100:8006";//支付回调网关地址
 
     public static void main(String[] args) throws Exception {
 
@@ -38,16 +47,17 @@
         String req_seq_id = System.currentTimeMillis() + ToolUtil.getRandomNumber(10);
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
         String req_date = simpleDateFormat.format(new Date());
-
+        String money ="0.01";
+        money =  new BigDecimal(money).setScale(2, RoundingMode.HALF_UP).toString();
         String a = "{\n" +
                 "    \"req_seq_id\": \"" + req_seq_id + "\",\n" +
                 "    \"req_date\": \"" + req_date + "\",\n" +
                 "    \"huifu_id\": \"6666000182995771\",\n" +
                 "    \"trade_type\": \"A_NATIVE\",\n" +
-                "    \"trans_amt\": \"0.01\",\n" +
+                "    \"trans_amt\": \""+money+"\",\n" +
                 "    \"goods_desc\": \"test\",\n" +
                 "    \"remark\": \"嘉易行\",\n" +
-                "    \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBack"+"\",\n" +
+                "    \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBackZfb"+"\",\n" +
                 "  }";
         // 去掉换行、空格等格式字符
         a = a.replaceAll("\\s", "");
@@ -65,10 +75,10 @@
                 "    \"req_date\": \"" + req_date + "\",\n" +
                 "    \"huifu_id\": \"6666000182995771\",\n" +
                 "    \"trade_type\": \"A_NATIVE\",\n" +
-                "    \"trans_amt\": \"0.01\",\n" +
+                "    \"trans_amt\": \""+money+"\",\n" +
                 "    \"goods_desc\": \"test\",\n" +
                 "    \"remark\": \"嘉易行\",\n" +
-                "    \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBack"+"\",\n" +
+                "    \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBackZfb"+"\",\n" +
                 "  }\n" +
                 "}\n";
         System.out.println(p);
@@ -97,6 +107,8 @@
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
         String req_date = simpleDateFormat.format(new Date());
         String notifyUrl = "";
+
+        money = new BigDecimal(money).setScale(2, RoundingMode.HALF_UP).toString();
         switch (callType) {
             case 1:
                 // 订单支付
@@ -120,7 +132,7 @@
                 break;
             case 6:
                 // 充值
-                notifyUrl = callbackPath + "/base/wxCancelUserBalance";
+                notifyUrl = callbackPath + "/base/DGCancelUserBalance";
                 break;
         }
         String a = "{\n" +
@@ -182,30 +194,32 @@
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
         String req_date = simpleDateFormat.format(new Date());
         String notifyUrl = "";
+
+        money = new BigDecimal(money).setScale(2, RoundingMode.HALF_UP).toString();
         switch (callType) {
             case 1:
                 // 订单支付
-                notifyUrl = callbackPath + "/base/DGCallBack";
+                notifyUrl = callbackPath + "/base/DGCallBackZfb";
                 break;
             case 2:
                 // 支付小件物流差价支付回调
-                notifyUrl = callbackPath +"/base/DGPayOrderLogisticsSpread";
+                notifyUrl = callbackPath +"/base/DGPayOrderLogisticsSpreadZfb";
                 break;
             case 3:
                 // 购买出行卡支付回调
-                notifyUrl = callbackPath+"/base/DGPayTaxiCardPaymentSpread";
+                notifyUrl = callbackPath+"/base/DGPayTaxiCardPaymentSpreadZfb";
                 break;
             case 4:
                 // 感谢费支付回调
-                notifyUrl = callbackPath + "/base/DGPayThankYouFee";
+                notifyUrl = callbackPath + "/base/DGPayThankYouFeeZfb";
                 break;
             case 5:
                 // 取消订单
-                notifyUrl = callbackPath + "/base/DGCancelOrderTaxi";
+                notifyUrl = callbackPath + "/base/DGCancelOrderTaxiZfb";
                 break;
             case 6:
                 // 充值
-                notifyUrl = callbackPath + "/base/wxCancelUserBalance";
+                notifyUrl = callbackPath + "/base/DGCancelUserBalanceZfb";
                 break;
         }
         String a = "{\n" +
@@ -249,6 +263,47 @@
     }
 
 
+
+    public static Map<String, Object> payFromUser(String req_seq_id, String req_date, String ord_amt, String huifu_id) throws Exception {
+        // 1. 数据初始化,填入对应的商户配置
+        MerConfig merConfig = new MerConfig();
+//        merConfig.setProcutId(huiFuProperties.getProductId());
+//        merConfig.setSysId(huiFuProperties.getSysId());
+//        merConfig.setRsaPrivateKey(huiFuProperties.getRsaPrivateKey());
+//        merConfig.setRsaPublicKey(huiFuProperties.getRsaPublicKey());
+        merConfig.setProcutId("KAZX");
+        merConfig.setSysId("6666000182995771");
+        merConfig.setRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCR6W3ynQJL7f2C8vFYMcQkcirpkif9ZhLq1374jIlV87nv0T9uIm6DoW8LyNEl9w2Yc5qoBv70tt/oVpemA6IZY6NXzE2USNi/sv2qUTtapcIRYxe4acCfY8K+x+p7W2e6wUWIpl9qgZA+UnFmHQ0HT6Ywzq2jJL92JdIs147Ud1aVi3aX8LYItj0z3ZKwZQkaJawZSWQk2+EdPfN059L2qFkPtnT7JIthAdUTJYZA13K4tzw6mXp/DbgwVmLhrlmwl/ccSv2Q0ABfEk7jIxF1nZmCmSy3HrEw9xWyrg1BC+DgXBdyF0OEtpNfv+UW080syUVBNN0irHVuDP81BaAjAgMBAAECggEAGlBZprZQErdxz6rWgYxADj6UpJjaI2XEJZwFZveZUOnqb2hyIv+MpKp5Z0upBErApey7SHAyjJlqWfE72hGvqxp/+7Z5izNz+2ZhPtT1ekyIajBPt89CkLwiA9vz2plKZLC0RIeUj5WcGNEvaDX3AomHtCehwtk+uiTp+XJKbOBtkkQszcdCGY1DVoQ0ppFoINnM9VLbEzaFaG7VS3eFkU4cf2CwcrnJB1RncyPFK+bGFvjkLM/eQbsh8YxkBqaGz/8UM1Na1SEidqdyUF71ltqnI0u8pLe0V+5jugVW+3lPL/p1C3i7mAbQOs4yqRWlFaGVTzOawoQUOPVwDpzeeQKBgQDs1P7F4wURqX1qZR0hSTqOigg48ychaOF66new3SuWk2CVBy8Q8b7odGSPyxJSGZvFLoznPYuSaXCtQ935WWfjB7Z5JpSWCi9BmJnkh41k/KvgMqAEGkZP6ul/zFnDWj94VwXEBz3TuRk574vK2coWoxjM6h1dlJjRBVVTs8dnrQKBgQCduKCjPDUuOHbcNn3VsaHEZX1XyiXN5gds08o61PjiHM42wYXxfUt59nBJmg2yAVRIrKYHfswJcxb5XUTDI5ZhCBnIPrdrQzj7FNadm/7mKDvSsvZdpfTiHY341XnvCq7OcNNj8g5fVsWF769strepQReSug7xgX7ojPvVcAZhDwKBgD57KwP2Er5IIuhQ6NCBS0uTqvurWqV70BDnjtBAaWF+XDq0/HvR63XUTzuIbbrvOqNY1p+jIxFrc+iiQQupxLimrkNkJEs5QKJjqiYahPkhmA68DG9Ip0gqR5QJy5y4UIplGwZOiscyzC72vcC0mJZETSSylzC7JV3vtEUy5ua5AoGAEwlDqjAMIyYBgpa5HV+xLKkrNbtaUL2gy8vMLsmhuHjNkuJMrlb3EyNhbiC/4moyqArehy0Qp1tSvIo7UGotLkzx/69CKBoW+IcNWDyJyXG1trqO7cKoCdqTViM98lIRwyzu9rMydONeN8o0HCT5id4nYDhAsXl1vc+2XY6F1pUCgYEA0dxGHBTKD/WzIvTYGYD6Xx224Y84mO6x2Mu16zFoq/NjuIdKi2O+92yrKDCMMCqaY77fXvWD3eI7QYYlbKAOqdLKVipTbhnBccDyNbtYHVg59t4xS+K6HyD+quVkL9n40UkxSZbKZBQhqt+vlQy0FUgONFii1ACZO0A8Sc/bvn4=");
+        merConfig.setRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsWrruP9JBxrUd8uEX5Z8y7pg/UIr5RNHSgDnHqNI1hbi2MfTzB5vZ275wSFFaLDD9BesgDWqsUepPS/opROlDCg9y6WYH8mkN23NmHL9F8kT48OMmH722am+Hp0XVMMwXqA0oNt4f7oW6kDemjZW8/RT4vIE7cyxoxSsVRvjqSpx9wDgFLPWh3o0pHQaoxLyeUsGBATHFrxEDlosBvsuXjMcgjPKXALrcemzKOhBmBkLgyxNVmh61ZK+FNXd+/X4PeZlnWf54NRQAUKe1308E6IIaszo+CjneKuhj1m/X4f7AIvxAqlhuCV5E/DfKRmGopxaWqdtE960Y/H4SmBh2wIDAQAB");
+        BasePay.initWithMerConfig(merConfig);
+
+        ord_amt=new BigDecimal(ord_amt).setScale(2,RoundingMode.HALF_UP).toString();
+
+        // 2.组装请求参数
+        Map<String, Object> paramsInfo = new HashMap<>();
+        // 请求流水号
+        paramsInfo.put("req_seq_id",req_seq_id);
+        // 请求日期
+        paramsInfo.put("req_date", req_date);
+        // 出款方商户号
+        paramsInfo.put("out_huifu_id", "6666000182995771");
+        // 支付金额
+        paramsInfo.put("ord_amt", ord_amt);
+        // 分账对象
+        paramsInfo.put("acct_split_bunch", "{\"acct_infos\":[{\"div_amt\":\""+ord_amt+"\",\"huifu_id\":\""+huifu_id+"\"}]}");
+        // 安全信息
+        paramsInfo.put("risk_check_data", "{\"sub_product\":\"1\",\"transfer_type\":\"05\"}");
+        // 手续费承担方标识余额支付手续费承担方标识;商户余额支付扣收规则为接口指定承担方时必填!枚举值:&lt;br/&gt;OUT:出款方;&lt;br/&gt;IN:分账接受方。&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:IN&lt;/font&gt;
+        paramsInfo.put("trans_fee_take_flag", "OUT");
+        // 核验值verify_type不为空时必填。当verify_type&#x3D;SMS时,填写用户收到的短信验证码
+//        paramsInfo.put("verify_value", "test");
+        // 3. 发起API调用
+        Map<String, Object> response = BasePayRequest.requestBasePay("v2/trade/acctpayment/pay", paramsInfo, null, false);;
+        return response;
+    }
+
+
+
     public static String sign(String data, String privateKeyBase64) {
         // Base64 --> Key
         try {

--
Gitblit v1.7.1