From 5dc40fcd64b0513150f1d8335ab849e6d8cdc28e Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 04 七月 2025 19:42:49 +0800
Subject: [PATCH] 支付版本更新 根据资金流向使用V2或V3服务商版本支付

---
 cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java |  107 +++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 86 insertions(+), 21 deletions(-)

diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java
index 2d90ee4..e5124c8 100644
--- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java
@@ -10,6 +10,10 @@
 import com.alipay.api.request.*;
 import com.alipay.api.response.*;
 import com.dsh.communityWorldCup.util.httpClinet.HttpClientUtil;
+import com.dsh.communityWorldCup.util.wx.PartnerAppPrepay;
+import com.dsh.communityWorldCup.util.wx.WXPayUtility;
+import com.dsh.communityWorldCup.util.wx.WeChatV3SignUtil;
+import com.dsh.communityWorldCup.util.wx.WxV3PayConfig;
 import org.apache.commons.collections.map.HashedMap;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.dom4j.Document;
@@ -49,15 +53,15 @@
 
     private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
 
-    private String appid = "";//微信appid
+    private String appid = "wx41d32f362ba0f911";//微信appid
 
-    private String appletsAppid = "";//微信小程序appid
+    private String appSecret = "cf0ebf950f5926a69041a0e2bbe20f3e";
 
-    private String mchId = "";//微信商户号
+    private String mchId = "1501481761";//微信商户号
 
-    private String key = "";//微信商户号
+    private String key = "6f5e0c2dcabfa9c27b5da5836a362fef";//微信商户号
 
-    private String callbackPath = "http://8.137.22.229:56666/competition";//支付回调网关地址
+    private String callbackPath = "https://online.daowepark.com:443/communityWorldCup";//支付回调网关地址
 
     private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
 
@@ -65,7 +69,8 @@
 
     private String alipay_root_cert_path = "C:/cert/alipay/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径
 
-    private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书
+    private String certPath = "/usr/playpai/cert/weixin/apiclient_cert.p12";//微信证书
+
 
 
     /**
@@ -149,9 +154,6 @@
         SubMerchant subMerchant = new SubMerchant();
         subMerchant.setMerchantId(smid);
         model.setSubMerchant(subMerchant);
-        ExtendParams extendParams = new ExtendParams();
-        extendParams.setRoyaltyFreeze("true");// 冻结资金 用于后续分账处理
-        model.setExtendParams(extendParams);
         request.setBizModel(model);
         request.setNotifyUrl(callbackPath + notifyUrl);
 
@@ -252,17 +254,23 @@
 
 
         Map<String, String> map = new HashMap<>();
-        String out_trade_no = params.get("out_trade_no");
-        String subject = params.get("subject");
-        String total_amount = params.get("total_amount");
-        String trade_no = params.get("trade_no");
-        String passback_params = params.get("passback_params");
-        map.put("out_trade_no", out_trade_no);//商家订单号
-        map.put("subject", subject);
-        map.put("total_amount", total_amount);
-        map.put("trade_no", trade_no);//支付宝交易号
-        map.put("passback_params", passback_params);//回传参数
-        return map;
+        System.err.println("返回码"+params);
+        if (params.get("trade_status").equals("TRADE_SUCCESS")){
+            String out_trade_no = params.get("out_trade_no");
+            String subject = params.get("subject");
+            String total_amount = params.get("total_amount");
+            String trade_no = params.get("trade_no");
+            String passback_params = params.get("passback_params");
+            map.put("out_trade_no", out_trade_no);//商家订单号
+            map.put("subject", subject);
+            map.put("total_amount", total_amount);
+            map.put("trade_no", trade_no);//支付宝交易号
+            map.put("passback_params", passback_params);//回传参数
+            System.err.println("回调map");
+            return map;
+        }else{
+            return null;
+        }
     }
 
 
@@ -359,7 +367,7 @@
         }
         String nonce_str = UUIDUtil.getRandomCode(16);
         Map<String, Object> map = new HashMap<>();
-        map.put("appid", "APP".equals(tradeType) ? appid : appletsAppid);
+        map.put("appid", appid);
         map.put("mch_id", mchId);
         map.put("nonce_str", nonce_str);
         map.put("body", body);
@@ -453,6 +461,62 @@
         }
     }
 
+    public ResultUtil weixinpayV3(String subMchid,String description, String outTradeNo, String notifyUrl, String totalFee) throws Exception {
+        int i = new BigDecimal(totalFee).multiply(new BigDecimal("100")).intValue();
+        // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340
+        PartnerAppPrepay client = new PartnerAppPrepay(
+//                "1681873607",                  // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考https://pay.weixin.qq.com/doc/v3/partner/4013080340
+//                "55714944F7A7E52526F708280B176DCC838F371A",       // 商户API证书序列号,如何获取请参考https://pay.weixin.qq.com/doc/v3/partner/4013058924
+//                "E:\\wanpai\\1681873607_20250424_cert\\apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径
+//                "PUB_KEY_ID_0116818736072025042400351694002605",          // 微信支付公钥ID,如何获取请参考https://pay.weixin.qq.com/doc/v3/partner/4013038589
+//                "E:\\wanpai\\pub_key.pem"     // 微信支付公钥文件路径,本地文件路径
+
+                "1681873607",                  // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考https://pay.weixin.qq.com/doc/v3/partner/4013080340
+                "55714944F7A7E52526F708280B176DCC838F371A",       // 商户API证书序列号,如何获取请参考https://pay.weixin.qq.com/doc/v3/partner/4013058924
+                "/usr/playpai/server/wxV3/1681873607_20250424_cert/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径
+                "PUB_KEY_ID_0116818736072025042400351694002605",          // 微信支付公钥ID,如何获取请参考https://pay.weixin.qq.com/doc/v3/partner/4013038589
+                "/usr/playpai/server/wxV3/pub_key.pem"     // 微信支付公钥文件路径,本地文件路径
+        );
+
+        PartnerAppPrepay.PartnerAPIv3CommonPrepayRequest request = new PartnerAppPrepay.PartnerAPIv3CommonPrepayRequest();
+        request.spAppid = appid;// appid
+        request.spMchid = WxV3PayConfig.Mch_ID;// 服务商商户号
+        request.subMchid = subMchid;// 子商户号
+        request.description = description;// 描述
+        request.outTradeNo = outTradeNo;// 订单号
+        request.notifyUrl = callbackPath+notifyUrl;// 回调地址
+        request.amount = new PartnerAppPrepay.CommonAmountInfo();
+        request.amount.total = (long) i;// 金额 单位分
+        request.amount.currency = "CNY";
+        String prepayId ="";
+        Map<String, Object> map3 = new HashMap<>();
+        try {
+            PartnerAppPrepay.PartnerAPIv3AppPrepayResponse response = client.run(request);
+            // TODO: 请求成功,继续业务逻辑
+            System.err.println("微信申请成功,预支付ID: " + response.prepayId);
+            prepayId = response.prepayId;
+        } catch (WXPayUtility.ApiException e) {
+            // TODO: 请求失败,根据状态码执行不同的逻辑
+            e.printStackTrace();
+        }
+        map3.put("appid", appid);
+        map3.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));
+        String nonce_str = UUIDUtil.getRandomCode(16);
+        map3.put("noncestr", nonce_str);
+        map3.put("prepayid", prepayId);
+        // 构造待签名字符串
+        String message = WeChatV3SignUtil.buildSignMessage(map3);
+        // 私钥路径(pem 文件)
+        String privateKeyPath = "/usr/playpai/server/wxV3/1681873607_20250424_cert/apiclient_key.pem";
+//      String privateKeyPath = "E:\\wanpai\\1681873607_20250424_cert\\apiclient_key.pem";
+        // 生成签名
+        String sign = WeChatV3SignUtil.signWithPrivateKey(message, privateKeyPath);
+        map3.put("sign", sign);
+        map3.put("package", "Sign=WXPay");
+        map3.put("partnerid", WxV3PayConfig.Mch_ID);// 服务商商户号
+        System.err.println(map3);
+        return ResultUtil.success(map3);
+    }
 
     /**
      * 微信支付成功后的回调处理
@@ -718,6 +782,7 @@
                 Map<String, String> map1 = new HashMap<>();
                 map1.put("refund_id", map.get("refund_id"));
                 map1.put("out_refund_no", map.get("out_refund_no"));
+                map1.put("out_refund_no", map.get("out_refund_no"));
                 String result = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
                 map1.put("result", result);
                 return map1;

--
Gitblit v1.7.1