zhs 3 år sedan
förälder
incheckning
df55291b09

+ 1 - 1
build.gradle

@@ -40,7 +40,7 @@ dependencies {
 //    implementation 'com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.3.0'//微信支付
 //    implementation 'org.apache.httpcomponents:httpclient:4.3.2'  //post get请求包
     implementation 'com.baidubce:api-explorer-sdk:1.0.3.1'//百度翻译
-    implementation 'com.alipay.sdk:alipay-sdk-java:3.7.110.ALL'
+    implementation 'com.alipay.sdk:alipay-sdk-java:4.22.57.ALL'
     implementation fileTree(dir:'lib',includes:['*jar'])
     annotationProcessor 'org.projectlombok:lombok'
     developmentOnly 'org.springframework.boot:spring-boot-devtools'

+ 19 - 5
src/main/java/com/travel/controller/ZfbCashController.java

@@ -1,11 +1,13 @@
 package com.travel.controller;
 
+import cn.hutool.core.io.resource.ClassPathResource;
+import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
+import com.alipay.api.CertAlipayRequest;
 import com.alipay.api.DefaultAlipayClient;
 import com.alipay.api.domain.AlipayFundTransUniTransferModel;
 import com.alipay.api.domain.Participant;
 import com.alipay.api.request.AlipayFundTransUniTransferRequest;
-import com.alipay.api.request.AlipayTradeWapPayRequest;
 import com.alipay.api.response.AlipayFundTransUniTransferResponse;
 import com.travel.model.CaSh;
 import com.travel.model.Supplier;
@@ -18,8 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
-
 import javax.servlet.http.HttpServletRequest;
+import java.io.File;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Map;
@@ -46,7 +48,7 @@ public class ZfbCashController extends ZfbPayUtils {
      */
     @RequestMapping("zfbCash")
     @ResponseBody
-    public String cash(CaSh caSh, HttpServletRequest request) throws Exception {
+    public String cash(CaSh caSh, HttpServletRequest request) throws AlipayApiException {
         //获取token
         Map<String, Object> userMap = ParsingToken.tokenParsing(request);
         //获取用户余额
@@ -58,8 +60,19 @@ public class ZfbCashController extends ZfbPayUtils {
         } else {
             return "未找到该用户";
         }
+        CertAlipayRequest alipayConfig  = new CertAlipayRequest();
+        alipayConfig.setPrivateKey(MERCHANTPRIVATEKEY);
+        alipayConfig.setServerUrl(GATEWAYURL);
+        alipayConfig.setAppId(APPID);
+        alipayConfig.setCharset(CHARSET);
+        alipayConfig.setSignType(SIGNTYPE);
+        alipayConfig.setEncryptor("");
+        alipayConfig.setFormat("json");
+        alipayConfig.setCertPath(this.getClass().getClassLoader().getResource("csr/appCertPublicKey_2021003146630260.crt").getPath());
+        alipayConfig.setAlipayPublicCertPath(this.getClass().getClassLoader().getResource("csr/alipayCertPublicKey_RSA2.crt").getPath());
+        alipayConfig.setRootCertPath(this.getClass().getClassLoader().getResource("csr/alipayRootCert.crt").getPath());
         //获得初始化的AlipayClient
-        AlipayClient alipayClient = new DefaultAlipayClient(GATEWAYURL, APPID, MERCHANTPRIVATEKEY, "json", CHARSET, ALIPAYPUBLICKEY, SIGNTYPE);
+        AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
         //设置请求参数
         String out_trade_no = getOrderNo();//订单号
         String uuid = snowflakeUtil.nextId() + "";//不重复编号
@@ -78,7 +91,8 @@ public class ZfbCashController extends ZfbPayUtils {
         model.setProductCode("TRANS_ACCOUNT_NO_PWD");//销售产品码。单笔无密转账固定为 TRANS_ACCOUNT_NO_PWD
         model.setOrderTitle("供应商" + supplier.getName() + "提现" + caSh.getMoney() + "元");//转账业务的标题,用于在支付宝用户的账单里显示。
         requestVal.setBizModel(model);
-        AlipayFundTransUniTransferResponse response = alipayClient.execute(requestVal);
+        AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(requestVal);
+        System.out.println(response.getBody());
         if (response.isSuccess()) {
             WxWithdrawal wxWithdrawal = new WxWithdrawal()
                     .setUuid(uuid)

+ 56 - 9
src/main/java/com/travel/controller/ZfbPayController.java

@@ -1,8 +1,11 @@
 package com.travel.controller;
 
+import com.alipay.api.CertAlipayRequest;
 import com.alipay.api.internal.util.AlipaySignature;
+import com.alipay.api.request.AlipayTradePagePayRequest;
 import com.alipay.api.request.AlipayTradeWapPayRequest;
 import com.travel.model.BuyOfferNum;
+import com.travel.model.Supplier;
 import com.travel.model.SupplierRelease;
 import com.travel.model.ZFBPay;
 import com.travel.service.ZFBPayService;
@@ -44,8 +47,20 @@ public class ZfbPayController extends ZfbPayUtils {
     @RequestMapping("/toPay")
     @ResponseBody
     public String toPay(String price, String attach) throws Exception {
+        //获得初始化的alipayConfig参数 //证书模式
+        CertAlipayRequest alipayConfig  = new CertAlipayRequest();
+        alipayConfig.setPrivateKey(MERCHANTPRIVATEKEY);//应用秘钥
+        alipayConfig.setServerUrl(GATEWAYURL);
+        alipayConfig.setAppId(APPID);
+        alipayConfig.setCharset(CHARSET);
+        alipayConfig.setSignType(SIGNTYPE);
+        alipayConfig.setEncryptor("");
+        alipayConfig.setFormat("json");
+        alipayConfig.setCertPath(this.getClass().getClassLoader().getResource("csr/appCertPublicKey_2021003146630260.crt").getPath());
+        alipayConfig.setAlipayPublicCertPath(this.getClass().getClassLoader().getResource("csr/alipayCertPublicKey_RSA2.crt").getPath());
+        alipayConfig.setRootCertPath(this.getClass().getClassLoader().getResource("csr/alipayRootCert.crt").getPath());
         //获得初始化的AlipayClient
-        AlipayClient alipayClient = new DefaultAlipayClient(GATEWAYURL, APPID, MERCHANTPRIVATEKEY, "json", CHARSET, ALIPAYPUBLICKEY, SIGNTYPE);
+        AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
         //设置请求参数
         String out_trade_no = getOrderNo();//订单号
         String timeout = "30m";
@@ -54,9 +69,9 @@ public class ZfbPayController extends ZfbPayUtils {
                 + "\"subject\":\"途丫-"+ out_trade_no +"\","
                 + "\"timeout_express\":\""+ timeout +"\","
                 + "\"body\":\""+ attach +"\","
-                + "\"qr_pay_mode\":\"4\","
+                + "\"qr_pay_mode\":\"2\","
                 + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}";
-        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
+        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
         alipayRequest.setNotifyUrl(NOTIFYURL);
         alipayRequest.setBizContent(content);
         //请求
@@ -82,8 +97,20 @@ public class ZfbPayController extends ZfbPayUtils {
         Map<String, Object> map1 = zfbPayService.getByNumber();//获取报价单单价
         Map<String, Object> map2 = (Map<String, Object>) map1.get("data");
         String price = (Integer.parseInt(offerNum) * Double.parseDouble(String.valueOf(map2.get("power_unit")))) + ""; //购买次数 * 报价单单价
+        //获得初始化的alipayConfig参数
+        CertAlipayRequest alipayConfig  = new CertAlipayRequest();
+        alipayConfig.setPrivateKey(MERCHANTPRIVATEKEY);//应用秘钥
+        alipayConfig.setServerUrl(GATEWAYURL);
+        alipayConfig.setAppId(APPID);
+        alipayConfig.setCharset(CHARSET);
+        alipayConfig.setSignType(SIGNTYPE);
+        alipayConfig.setEncryptor("");
+        alipayConfig.setFormat("json");
+        alipayConfig.setCertPath(this.getClass().getClassLoader().getResource("csr/appCertPublicKey_2021003146630260.crt").getPath());
+        alipayConfig.setAlipayPublicCertPath(this.getClass().getClassLoader().getResource("csr/alipayCertPublicKey_RSA2.crt").getPath());
+        alipayConfig.setRootCertPath(this.getClass().getClassLoader().getResource("csr/alipayRootCert.crt").getPath());
         //获得初始化的AlipayClient
-        AlipayClient alipayClient = new DefaultAlipayClient(GATEWAYURL, APPID, MERCHANTPRIVATEKEY, "json", CHARSET, ALIPAYPUBLICKEY, SIGNTYPE);
+        AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
         //设置请求参数
         String out_trade_no = getOrderNo();//订单号
         String uuid = snowflakeUtil.nextId() + "";//不重复编号
@@ -92,11 +119,12 @@ public class ZfbPayController extends ZfbPayUtils {
                 + "\"total_amount\":\""+ price +"\","
                 + "\"subject\":\"途丫-"+ out_trade_no +"\","
                 + "\"timeout_express\":\""+ timeout +"\","
-                + "\"qr_pay_mode\":\"4\","
+                + "\"qr_pay_mode\":\"2\","
                 + "\"body\":\""+ "gysOfferNum" + "," + uuid + "," + userMap.get("code") + "," + offerNum +"\","
                 + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}";
-        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
+        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
         alipayRequest.setNotifyUrl(NOTIFYURL);
+        alipayRequest.setReturnUrl(RETURNURL);
         alipayRequest.setBizContent(content);
         //请求
         String result = "";
@@ -122,8 +150,20 @@ public class ZfbPayController extends ZfbPayUtils {
     public String zfbpaySupplierBalance(String price, HttpServletRequest request) throws Exception {
         //获取token
         Map<String, Object> userMap = ParsingToken.tokenParsing(request);
+        //获得初始化的alipayConfig参数
+        CertAlipayRequest alipayConfig  = new CertAlipayRequest();
+        alipayConfig.setPrivateKey(MERCHANTPRIVATEKEY);//应用秘钥
+        alipayConfig.setServerUrl(GATEWAYURL);
+        alipayConfig.setAppId(APPID);
+        alipayConfig.setCharset(CHARSET);
+        alipayConfig.setSignType(SIGNTYPE);
+        alipayConfig.setEncryptor("");
+        alipayConfig.setFormat("json");
+        alipayConfig.setCertPath(this.getClass().getClassLoader().getResource("csr/appCertPublicKey_2021003146630260.crt").getPath());
+        alipayConfig.setAlipayPublicCertPath(this.getClass().getClassLoader().getResource("csr/alipayCertPublicKey_RSA2.crt").getPath());
+        alipayConfig.setRootCertPath(this.getClass().getClassLoader().getResource("csr/alipayRootCert.crt").getPath());
         //获得初始化的AlipayClient
-        AlipayClient alipayClient = new DefaultAlipayClient(GATEWAYURL, APPID, MERCHANTPRIVATEKEY, "json", CHARSET, ALIPAYPUBLICKEY, SIGNTYPE);
+        AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
         //设置请求参数
         String out_trade_no = getOrderNo();//订单号
         String uuid = snowflakeUtil.nextId() + "";//不重复编号
@@ -132,10 +172,12 @@ public class ZfbPayController extends ZfbPayUtils {
                 + "\"total_amount\":\""+ price +"\","
                 + "\"subject\":\"途丫-"+ out_trade_no +"\","
                 + "\"timeout_express\":\""+ timeout +"\","
+                + "\"qr_pay_mode\":\"2\","
                 + "\"body\":\""+ "gysTopUp" + "," + uuid + "," + userMap.get("code") +"\","
                 + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}";
-        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
+        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
         alipayRequest.setNotifyUrl(NOTIFYURL);
+        alipayRequest.setReturnUrl(RETURNURL);
         alipayRequest.setBizContent(content);
         //请求
         String result = "";
@@ -209,7 +251,6 @@ public class ZfbPayController extends ZfbPayUtils {
                                 .setPayType("支付宝支付");
                         zfbPayService.updateBuySupplier(buySupplier); //充值
                     } else if((params.get("body")).indexOf("gysOfferNum") != -1){ //报价单次数购买
-                        System.out.println("ces");
                         BuyOfferNum buyOfferNum = new BuyOfferNum()
                                 .setCode((params.get("body")).split(",")[2])
                                 .setUuid((params.get("body")).split(",")[1])
@@ -230,8 +271,14 @@ public class ZfbPayController extends ZfbPayUtils {
                                     .setCode(supplierRelease1.getCode())
                                     .setDemandUuid(supplierRelease1.getDemandUuid());
                             if(supplierRelease1.getCode().equals(list.get(0).getCode())){
+                                //修改状态为已付费
                                 supplierRelease2.setOrderType("2");
                                 zfbPayService.updatePrivateType(supplierRelease2);
+                                //用户购买报价单后将50%的资金转入供应商余额
+                                Supplier supplier = new Supplier()
+                                        .setCode(list.get(0).getCode())
+                                        .setBalanceOf(String.valueOf(Double.parseDouble(wxPay.getTotalFee()) * 0.5));
+                                zfbPayService.addSupplierBalanceOf(supplier);
                             } else {
                                 supplierRelease2.setOrderType("9");
                                 zfbPayService.updatePrivateType(supplierRelease2);//修改状态

+ 2 - 0
src/main/java/com/travel/mapper/ZFBPayMapper.java

@@ -44,4 +44,6 @@ public interface ZFBPayMapper {
     void zfbCash(WxWithdrawal wxWithdrawal);
 
     void minusBalanceOf(WxWithdrawal wxWithdrawal);
+
+    void addSupplierBalanceOf(Supplier supplier);
 }

+ 4 - 0
src/main/java/com/travel/model/ZFBPay.java

@@ -80,4 +80,8 @@ public class ZFBPay implements Serializable {
      * 支付方式
      */
     private String payType;
+    /**
+     * 供应商余额
+     */
+    private String balanceOf;
 }

+ 2 - 0
src/main/java/com/travel/service/ZFBPayService.java

@@ -33,4 +33,6 @@ public interface ZFBPayService {
     void zfbCash(WxWithdrawal wxWithdrawal);
 
     void minusBalanceOf(WxWithdrawal wxWithdrawal);
+
+    void addSupplierBalanceOf(Supplier supplier);
 }

+ 11 - 0
src/main/java/com/travel/service/impl/ZFBPayServiceImpl.java

@@ -109,6 +109,11 @@ public class ZFBPayServiceImpl extends ZfbPayUtils implements ZFBPayService {
                     map.put("errMsg", "退款金额大于支付金额");
                     return map;
                 }
+                if(Double.parseDouble(refund.getRefundFee()) > Double.parseDouble(wxPay.getBalanceOf())){
+                    map.put("msg", "500");
+                    map.put("errMsg", "余额不足,请先充值");
+                    return map;
+                }
                 Map<String, Object> map1 = refund(refund.getRefundFee(), wxPay);
                 if(map1.get("msg").equals("200")){
                     zfbPayMapper.updateRefundType(zfbRefund.getReleaseUuid(), zfbRefund.getRefundState());
@@ -175,6 +180,12 @@ public class ZFBPayServiceImpl extends ZfbPayUtils implements ZFBPayService {
         zfbPayMapper.minusBalanceOf(wxWithdrawal);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addSupplierBalanceOf(Supplier supplier) {
+        zfbPayMapper.addSupplierBalanceOf(supplier);
+    }
+
     /**
      * 支付宝退款
      * @param money 金额

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 5 - 8
src/main/resources/application.yml


+ 1 - 1
src/main/resources/config/mapping/PrivateOrderMapper.xml

@@ -116,7 +116,7 @@
             a.*
         FROM
             bus_private_ordering a
-            JOIN ( SELECT demand_uuid FROM bus_private_ordering_type WHERE order_type = '0' AND order_type != '9') b ON a.uuid = b.demand_uuid
+            JOIN ( SELECT demand_uuid FROM bus_private_ordering_type WHERE order_type = '0' OR order_type = '1' OR order_type = '6' OR order_type = '7' OR order_type = '14') b ON a.uuid = b.demand_uuid
         WHERE a.start_time <![CDATA[ < ]]> SYSDATETIME()
     </select>
     <!-- 查询那些定制单已经行程开始 -->

+ 16 - 1
src/main/resources/config/mapping/ZFBPayMapper.xml

@@ -73,7 +73,15 @@
     </select>
     <!-- 查询指定报价单的支付信息 -->
     <select id="getRefundVal" resultType="ZFBPay" parameterType="String">
-        select * from bus_pay where release_uuid = #{releUuid}
+        SELECT
+            a.*,
+            c.balance_of
+        FROM
+            bus_pay a
+                LEFT JOIN bus_supplier_release b ON a.release_uuid = b.uuid
+                LEFT JOIN sys_supplier c ON b.code = c.code
+        WHERE
+            a.release_uuid = #{releUuid}
     </select>
     <!-- 修改退款状态 -->
     <update id="updateRefundType" parameterType="String">
@@ -108,4 +116,11 @@
         WHERE
             code = #{code}
     </update>
+    <!-- 用户购买报价单后将50%的资金转入供应商余额 -->
+    <update id="addSupplierBalanceOf" parameterType="Supplier">
+        UPDATE sys_supplier
+        SET balance_of = ( SELECT balance_of + ${balanceOf} FROM sys_supplier WHERE code = #{code} )
+        WHERE
+            code = #{code}
+    </update>
 </mapper>

+ 43 - 0
src/main/resources/csr/alipayCertPublicKey_RSA2.crt

@@ -0,0 +1,43 @@
+-----BEGIN CERTIFICATE-----
+MIIDljCCAn6gAwIBAgIQICIJBwkWptPLPl/+F73q5TANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
+YXNzIDIgUjEwHhcNMjIwOTA3MDk1NjU0WhcNMjcwOTA2MDk1NjU0WjB3MQswCQYDVQQGEwJDTjES
+MBAGA1UECgwJ54mf5rSq6ImzMQ8wDQYDVQQLDAZBbGlwYXkxQzBBBgNVBAMMOuaUr+S7mOWunSjk
+uK3lm70p572R57uc5oqA5pyv5pyJ6ZmQ5YWs5Y+4LTIwODg1MjI0MjM5NTExNTEwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCJbygruLksO0KaTKZ4J0ywRP5Oabf5HKYXgTUuabLiKQM/
+R/7sAR/Roz03pRJv65nOQ8Ob5znXDOy/wN3UZgjUB8ZDD0gBC6LTyVJCJMfiqYlq7szMJ7dWvsic
+mzv3+pxukukXTh6IP9q6n1rU4JQNyi1zhuCYnEPACaVfqM22IKgZ4llifEHoj/lvzl3A0jZrmV9z
+FVyspqjukcSKyJdnx/dUrmblMUdfOfFPLXJPWhuaPWo+2BTqlV/e/6x+3Q2F5KZYzR0zrHaJTD8o
+RzecUWsW9Zi3u4xUUc19VDzhbzonVXnG/OmriV8h2gb0WyHqtTSravlZNr/cwLNRiqElAgMBAAGj
+EjAQMA4GA1UdDwEB/wQEAwID+DANBgkqhkiG9w0BAQsFAAOCAQEAhsL5dY2cBX6JtfE2Bh+izXFA
+YhRVOETq0bbq2unxGP8hMlb/YzRCZustFE4sX3TOW5Kcer+nnUF+FGmtiHaRQOuNIdpSy8KhFUBs
+RkRatIsA0WWKvSTrKmNgCqQWyeORLD1uQyavbLVjnVmzlo7rjEyNAcSOmLW/FySIeFHMxpZdrO8R
+pjhaR3QyPQaJDDmUdjq8h9uGydfeyH2wkPawgZ74iq4GR6darwiAen87IL0N54YhT9pb4T3UDw8T
+FFbtqTVdILdcSDb1s6kUp6aAF3uEFCWTqai9ixgs1MA7UnhshFpM1Em621Kj56+655jM3dr9bqXU
+wgP2h6ZZiXTjVg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU
+BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw
+LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy
+MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu
+YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp
+bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA
+NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ
+fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN
+G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R
+iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf
+BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy
+oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB
+AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt
+a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw
+7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B
+L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+
+14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ
+EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64
+fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6
+OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD
+aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr
+-----END CERTIFICATE-----

+ 88 - 0
src/main/resources/csr/alipayRootCert.crt

@@ -0,0 +1,88 @@
+-----BEGIN CERTIFICATE-----
+MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
+EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
+MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
+UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
+MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
+V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
+W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
+MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
+53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
+pDoiVhsLwg==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
+MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
+BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
+aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
+rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
+xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
+dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
+vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
+YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
+Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
+DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
+SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
+PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
+9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
+AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
+tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
+nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
+tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
+JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
+IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
+05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
+T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
+kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
+PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
+1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
+jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
+77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
+kT9qhqn+lw==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
+EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
+WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
+CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
+YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
+WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
+rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
+4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
+zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
+wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
+Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
+BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
+E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
+MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
+MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
+bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
+b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
+nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
+4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
+wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
+WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
+z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
+KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
+uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
+emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
+U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
+UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
+DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
+1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
+Yf4Zr0fJsGuv
+-----END CERTIFICATE-----

+ 23 - 0
src/main/resources/csr/appCertPublicKey_2021003146630260.crt

@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIEljCCA36gAwIBAgIQICIJB1cKDLvvGCjyTPzYHjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
+YXNzIDEgUjEwHhcNMjIwOTA3MDk1NjU0WhcNMjcwOTA2MDk1NjU0WjBeMQswCQYDVQQGEwJDTjES
+MBAGA1UECgwJ54mf5rSq6ImzMQ8wDQYDVQQLDAZBbGlwYXkxKjAoBgNVBAMMITIwODg1MjI0MjM5
+NTExNTEtMjAyMTAwMzE0NjYzMDI2MDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK5b
+k0LXDZgl+g0/Imz4wOkp0SWmGyvp2INbJaxQBCpWB6COqrqPTjNQ81Y2/xT41gijRJ7aAMOxPBT8
+qvADL9fMfHBr05GegaABqyrTjzidINLF053ozypMvGAt03OOWw7E9l6eGR+kMa+wwy1kFWSCkkhc
+ynxIyAGtz+vKxOa6XTVz1GBOYBfruWpQlRerDVv6pvrNlMGChB5bMh5e6+HAlIiHkBaxxN3MEFgr
+4CmPm4vnFooxaOGblSVnLfWuFhy10N833Ysv42dvGhlpZqC8uFJFnkP+nwxekb7Kvgc8rlsfMmNI
+9BO6iMqoR1WQUXAhMdp74Mlhwy8wY44z44sCAwEAAaOCASkwggElMB8GA1UdIwQYMBaAFHEH4gRh
+FuTl8mXrMQ/J4PQ8mtWRMB0GA1UdDgQWBBRsmoCCCJ3SkrV+pawBPzpimqtiWjBABgNVHSAEOTA3
+MDUGB2CBHAFuAQEwKjAoBggrBgEFBQcCARYcaHR0cDovL2NhLmFsaXBheS5jb20vY3BzLnBkZjAO
+BgNVHQ8BAf8EBAMCBsAwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NhLmFsaXBheS5jb20vY3Js
+NjkuY3JsMGAGCCsGAQUFBwEBBFQwUjAoBggrBgEFBQcwAoYcaHR0cDovL2NhLmFsaXBheS5jb20v
+Y2E2LmNlcjAmBggrBgEFBQcwAYYaaHR0cDovL2NhLmFsaXBheS5jb206ODM0MC8wDQYJKoZIhvcN
+AQELBQADggEBAK+aNmq95gg+M8M7mzMdBKGvEpQ2KC4LC274SzQtQmUtDtAAMwXDti6jAWOtW+Ua
+PmvQQ/Qjo5op0TY1r28YtytJ+ei+RnqeQIv23BOWYz+V6cFDDmmKBxg7jtvz36I5WRhofbcWmuff
+D1SDfiGMxShEV/OJe6XxOrQIgaph9lTltEKdcMjjcfjD/4uDMy3ZLjyMj4Ss4vmaN4XaOdQNQIRc
+xFkKrZDulSZiKfzrzcL0b7zR+KO1eFdBjcCFoiTYEJ38mppFmDlgRW0U6tYIWnjTFqzaWacfjbN/
+x2xomhznXoc2DQlOtJXNHGoxDMUgFVsaDVICLbZ6ugWdV0dMlis=
+-----END CERTIFICATE-----