From df4733091b30b0434a04dacd0e844663114d4cfe Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 09 七月 2025 17:51:56 +0800
Subject: [PATCH] 修改支付宝支付和bug修改

---
 cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java |  146 +++++++++++++++++++-----------------------------
 1 files changed, 58 insertions(+), 88 deletions(-)

diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java b/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
index 1450e74..870c561 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
@@ -3,10 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.AlipayClient;
-import com.alipay.api.CertAlipayRequest;
-import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.*;
 import com.alipay.api.domain.*;
 import com.alipay.api.request.*;
 import com.alipay.api.response.*;
@@ -76,45 +73,63 @@
 
     private String certPath = "/usr/playpai/cert/weixin/apiclient_cert.p12";//微信证书
 
-    public ResultUtil confirm(String smid,String code, String outTradeNo, String amount) {
-        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
-                aliAppid,
-                appPrivateKey,
-                "json",
-                "GBK",
-                alipay_public_key,
-                "RSA2");
+    public ResultUtil confirm(String smid1,String code, String outTradeNo, String amount) throws AlipayApiException {
+        // 初始化SDK
+        AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
+
+        // 构造请求参数以调用接口
         AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest();
-        request.setBizContent("{" +
-                "  \"out_request_no\":\""+code+"\"," +
-                "  \"trade_no\":\""+outTradeNo+"\"," +
-                "  \"settle_info\":{" +
-                "    \"settle_detail_infos\":[" +
-                "      {" +
-                "        \"trans_in_type\":\"defaultSettle\"," +
-                "        \"settle_entity_id\":\""+smid+"\"," +
-                "        \"settle_entity_type\":\"SecondMerchant\"," +
-                "        \"amount\":"+amount+"," +
-                "      }" +
-                "    ]" +
-                "  }," +
-                "  \"extend_params\":{" +
-                "    \"royalty_freeze\":\"true\"" +
-                "  }" +
-                "}");
-        AlipayTradeSettleConfirmResponse response = null;
-        try {
-            response = alipayClient.execute(request);
-        } catch (AlipayApiException e) {
-            e.printStackTrace();
-        }
-        if(response.isSuccess()){
+        AlipayTradeSettleConfirmModel model = new AlipayTradeSettleConfirmModel();
+
+        // 设置确认结算请求流水号
+        model.setOutRequestNo(code);
+
+        // 设置支付宝交易号
+        model.setTradeNo(outTradeNo);
+
+        // 设置描述结算信息
+        SettleInfo settleInfo = new SettleInfo();
+        List<SettleDetailInfo> settleDetailInfos = new ArrayList<SettleDetailInfo>();
+        SettleDetailInfo settleDetailInfos0 = new SettleDetailInfo();
+        settleDetailInfos0.setAmount(amount);
+        settleDetailInfos0.setTransIn(smid1);
+        settleDetailInfos0.setSettleEntityType("SecondMerchant");
+        settleDetailInfos0.setSettleEntityId(smid1);
+        settleDetailInfos0.setTransInType("defaultSettle");
+        settleDetailInfos.add(settleDetailInfos0);
+        settleInfo.setSettleDetailInfos(settleDetailInfos);
+        model.setSettleInfo(settleInfo);
+        request.setBizModel(model);
+        System.err.println("结算金额"+amount);
+        // 第三方代调用模式下请设置app_auth_token
+        // request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
+
+        AlipayTradeSettleConfirmResponse response = alipayClient.execute(request);
+        System.out.println("返回体"+response.getBody());
+
+
+        if (response.isSuccess()) {
             System.out.println("调用成功");
-            return ResultUtil.success();
         } else {
             System.out.println("调用失败");
-            return ResultUtil.error("出现问题啦");
+            // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接
+            // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
+            // System.out.println(diagnosisUrl);
         }
+        return ResultUtil.success(response.getBody());
+    }
+    private static AlipayConfig getAlipayConfig() {
+        String privateKey  = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==";
+        String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";
+        AlipayConfig alipayConfig = new AlipayConfig();
+        alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
+        alipayConfig.setAppId("2021004105665036");
+        alipayConfig.setPrivateKey(privateKey);
+        alipayConfig.setFormat("json");
+        alipayConfig.setAlipayPublicKey(alipayPublicKey);
+        alipayConfig.setCharset("UTF-8");
+        alipayConfig.setSignType("RSA2");
+        return alipayConfig;
     }
     // 属于平台的运营商 因为无需分账不冻结资金
     public ResultUtil confirm1(String smid,String code, String outTradeNo, String amount) {
@@ -161,56 +176,6 @@
      * 支付宝支付
      */
     public ResultUtil alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
-//        //构造client
-//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
-//        //设置网关地址
-//        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
-//        //设置应用Id
-//        certAlipayRequest.setAppId(aliAppid);
-//        //设置应用私钥
-//        certAlipayRequest.setPrivateKey(appPrivateKey);
-//        //设置请求格式,固定值json
-//        certAlipayRequest.setFormat("json");
-//        //设置字符集
-//        certAlipayRequest.setCharset("UTF-8");
-//        //设置签名类型
-//        certAlipayRequest.setSignType("RSA2");
-//        //设置应用公钥证书路径
-//        certAlipayRequest.setCertPath(app_cert_path);
-//        //设置支付宝公钥证书路径
-//        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
-//        //设置支付宝根证书路径
-//        certAlipayRequest.setRootCertPath(alipay_root_cert_path);
-//        //构造client
-//        AlipayClient alipayClient = null;
-//        try {
-//            alipayClient = new DefaultAlipayClient(certAlipayRequest);
-//        } catch (AlipayApiException e) {
-//            e.printStackTrace();
-//        }
-//        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
-//        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
-//        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
-//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
-//        model.setBody(body);
-//        model.setSubject (subject);
-//        model.setOutTradeNo (outTradeNo);
-//        model.setTimeoutExpress ("30m" );
-//        model.setTotalAmount (amount);
-//        model.setProductCode ( "QUICK_MSECURITY_PAY" );
-//        model.setPassbackParams(passbackParams);//自定义参数
-//        request.setBizModel ( model );
-//        request.setNotifyUrl (callbackPath + notifyUrl);
-//        try  {
-//            //这里和普通的接口调用不同,使用的是sdkExecute
-//            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
-//            Map<String, String> map = new HashMap<>();
-//            map.put("orderString", response.getBody());
-//            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
-//            return ResultUtil.success(map);
-//        }  catch (AlipayApiException e ) {
-//            e.printStackTrace();
-//        }
         //实例化客户端
         AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
         //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
@@ -236,6 +201,11 @@
         SubMerchant subMerchant = new SubMerchant();
         subMerchant.setMerchantId(smid);
         model.setSubMerchant(subMerchant);
+        if (!smid.equals("2088330203191220")){
+            ExtendParams extendParams = new ExtendParams();
+            extendParams.setRoyaltyFreeze("true");
+            model.setExtendParams(extendParams);
+        }
         request.setBizModel(model);
         request.setNotifyUrl(callbackPath + notifyUrl);
         try {

--
Gitblit v1.7.1