Przeglądaj źródła

欧普特眯着

java110 2 lat temu
rodzic
commit
4b47d63f3a

+ 18 - 83
service-acct/src/main/java/com/java110/acct/payment/adapt/bbgpay/BbgPaymentFactoryAdapt.java

@@ -195,11 +195,10 @@ public class BbgPaymentFactoryAdapt implements IPaymentFactoryAdapt {
     private Map<String, String> java110UnifieldOrder(String feeName, String orderNum,
     private Map<String, String> java110UnifieldOrder(String feeName, String orderNum,
                                                      String tradeType, double payAmount, String openid,
                                                      String tradeType, double payAmount, String openid,
                                                      SmallWeChatDto smallWeChatDto, String notifyUrl) throws Exception {
                                                      SmallWeChatDto smallWeChatDto, String notifyUrl) throws Exception {
-        String mchtNo_RSA2 = CommunitySettingFactory.getValue(smallWeChatDto.getObjId(), "mchtNo_RSA2");
-        String productNo_RSA2 = CommunitySettingFactory.getValue(smallWeChatDto.getObjId(), "productNo_RSA2");
-        String opToken_RSA2 = CommunitySettingFactory.getValue(smallWeChatDto.getObjId(), "opToken_RSA2");
-        String mcht_PrivateKey_RSA2 = CommunitySettingFactory.getRemark(smallWeChatDto.getObjId(), "mcht_PrivateKey_RSA2");
-        String bank_PublicKey_RSA2 = CommunitySettingFactory.getRemark(smallWeChatDto.getObjId(), "bank_PublicKey_RSA2");
+
+        String mchtNo_SM4 = CommunitySettingFactory.getValue(smallWeChatDto.getObjId(), "mchtNo_SM4");
+        String productNo_SM4 = CommunitySettingFactory.getValue(smallWeChatDto.getObjId(), "productNo_SM4");
+        String publicKey_SM4 = CommunitySettingFactory.getValue(smallWeChatDto.getObjId(), "publicKey_SM4");
 
 
         if (feeName.length() > 127) {
         if (feeName.length() > 127) {
             feeName = feeName.substring(0, 126);
             feeName = feeName.substring(0, 126);
@@ -207,8 +206,8 @@ public class BbgPaymentFactoryAdapt implements IPaymentFactoryAdapt {
 
 
         Map<String, Object> params = new HashMap<>();
         Map<String, Object> params = new HashMap<>();
         params.put("version", VERSION);// 版本号 1.0
         params.put("version", VERSION);// 版本号 1.0
-        params.put("mcht_no", mchtNo_RSA2);// 收款商户编号
-        params.put("product_no", productNo_RSA2);// 产品编号
+        params.put("mcht_no", mchtNo_SM4);// 收款商户编号
+        params.put("product_no", productNo_SM4);// 产品编号
         params.put("biz_type", "WX_GZH");// 业务类型
         params.put("biz_type", "WX_GZH");// 业务类型
         params.put("tran_no", String.valueOf(System.nanoTime()));// 商户流水
         params.put("tran_no", String.valueOf(System.nanoTime()));// 商户流水
         params.put("code", "");// 授权码
         params.put("code", "");// 授权码
@@ -218,58 +217,7 @@ public class BbgPaymentFactoryAdapt implements IPaymentFactoryAdapt {
         params.put("ware_name", feeName);// 商品名称
         params.put("ware_name", feeName);// 商品名称
         params.put("ware_describe", "");// 商户数据包
         params.put("ware_describe", "");// 商户数据包
         params.put("asyn_url", notifyUrl + "?wId=" + WechatFactory.getWId(smallWeChatDto.getAppId()));// 通知地址
         params.put("asyn_url", notifyUrl + "?wId=" + WechatFactory.getWId(smallWeChatDto.getAppId()));// 通知地址
-        String json = JsonUtil.mapToJson(params);
-        System.out.println("加密前:" + json);
-
-        Map<String, Object> soreMap = JsonUtil.sortMapByKey(params);
-
-        // 开始加密
-        byte[] en = AesEncrypt.encryptByte(json, "utf-8", opToken_RSA2);
-        if (en == null || en.length <= 0) {
-            System.err.println("加密失败");
-            throw new IllegalArgumentException("加密失败");
-        }
-        String encryptBase64Str = AesEncrypt.parseByte2HexStr(en);
-        System.out.println("加密后:" + encryptBase64Str);
-
-        String signtBase64Str = CAUtil.rsa256Sign(json, "utf-8", mcht_PrivateKey_RSA2);
-        System.out.println("加签串:" + signtBase64Str);
-
-        Map<String, Object> signParams = new HashMap<>();
-        signParams.put("mcht_no", mchtNo_RSA2);// 收款商户编号
-        signParams.put("sign_type", SIGN_TYPE);
-        signParams.put("sign", signtBase64Str);
-        signParams.put("enc_data", encryptBase64Str);// 加密后请求参数
-
-        String requestParams = JsonUtil.mapToJson(signParams);
-        System.out.println("最终请求参数:" + requestParams);
-        System.err.println("");
-        String returnResult = HttpRequestUtil.httpPost(gzhPayUrl, requestParams);
-        System.out.println("支付结果返回值(原文):" + returnResult);
-        if (returnResult == null) {
-            System.err.println("通道响应异常");
-            throw new IllegalArgumentException("通道响应异常");
-        }
-        // 开始解密
-        Map<String, Object> responseParams = JsonUtil.jsonToMap(returnResult);
-        // 开始解密
-        String decryptBase64Str = (String) responseParams.get("enc_data");
-        String verifyBase64Str = (String) responseParams.get("sign");
-        byte[] bt = AesEncrypt.parseHexStr2Byte(decryptBase64Str);
-        byte[] decrypt = AesEncrypt.decryptByte(bt, opToken_RSA2);
-        if (decrypt == null) {
-            System.err.println("解密失败");
-            throw new IllegalArgumentException("解密失败");
-        }
-        boolean isSuccess = CAUtil.rsa256Verify(decrypt, verifyBase64Str, bank_PublicKey_RSA2);
-        System.out.println("数据验签:" + isSuccess);
-        if (!isSuccess) {
-            System.err.println("验签失败");
-            throw new IllegalArgumentException("验签失败");
-        }
-        String decryParams = new String(decrypt);
-        System.out.println("支付结果返回值(解密后):" + decryParams);
-
+        String decryParams = EncryptDecryptFactory.execute(smallWeChatDto.getObjId(), gzhPayUrl, params);
         JSONObject paramOut = JSONObject.parseObject(decryParams);
         JSONObject paramOut = JSONObject.parseObject(decryParams);
         if (!"0000".equals(paramOut.getString("return_code"))
         if (!"0000".equals(paramOut.getString("return_code"))
                 || !"SUCCESS".equals(paramOut.getString("status"))
                 || !"SUCCESS".equals(paramOut.getString("status"))
@@ -294,39 +242,26 @@ public class BbgPaymentFactoryAdapt implements IPaymentFactoryAdapt {
     @Override
     @Override
     public PaymentOrderDto java110NotifyPayment(NotifyPaymentOrderDto notifyPaymentOrderDto) {
     public PaymentOrderDto java110NotifyPayment(NotifyPaymentOrderDto notifyPaymentOrderDto) {
 
 
-        String opToken_RSA2 = CommunitySettingFactory.getValue(notifyPaymentOrderDto.getCommunityId(), "opToken_RSA2");
-        String bank_PublicKey_RSA2 = CommunitySettingFactory.getRemark(notifyPaymentOrderDto.getCommunityId(), "bank_PublicKey_RSA2");
+        String privateKey_SM4 = CommunitySettingFactory.getValue(notifyPaymentOrderDto.getCommunityId(), "privateKey_SM4");
 
 
         String resXml = "";
         String resXml = "";
         String param = notifyPaymentOrderDto.getParam();
         String param = notifyPaymentOrderDto.getParam();
         PaymentOrderDto paymentOrderDto = new PaymentOrderDto();
         PaymentOrderDto paymentOrderDto = new PaymentOrderDto();
-        Map<String, Object> responseParams = JsonUtil.jsonToMap(param);
         // 开始解密
         // 开始解密
-        String decryptBase64Str = (String) responseParams.get("enc_data");
-        String verifyBase64Str = (String) responseParams.get("sign");
-        byte[] bt = AesEncrypt.parseHexStr2Byte(decryptBase64Str);
-        byte[] decrypt = new byte[0];
-        try {
-            decrypt = AesEncrypt.decryptByte(bt, opToken_RSA2);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
+        Map<String, Object> responseParams = JsonUtil.jsonToMap(param);
+        if (!responseParams.containsKey("enc_data")) {
+            System.err.println("通知失败");
+            throw new IllegalArgumentException("通知失败");
         }
         }
-        if (decrypt == null) {
+        String decryptStr = (String) responseParams.get("enc_data");
+        String messageKey = (String) responseParams.get("message_key");
+        String secretKey = GmUtil.decryptSm2(messageKey, privateKey_SM4);
+        if (secretKey == null) {
             System.err.println("解密失败");
             System.err.println("解密失败");
             throw new IllegalArgumentException("解密失败");
             throw new IllegalArgumentException("解密失败");
         }
         }
-        boolean isSuccess = false;
-        try {
-            isSuccess = CAUtil.rsa256Verify(decrypt, verifyBase64Str, bank_PublicKey_RSA2);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        System.out.println("数据验签:" + isSuccess);
-        if (!isSuccess) {
-            System.err.println("验签失败");
-            throw new IllegalArgumentException("验签失败");
-        }
-        String decryParams = new String(decrypt);
+        String decryParams = GmUtil.decryptSm4(decryptStr, secretKey);
+
         System.out.println("支付结果返回值(解密后):" + decryParams);
         System.out.println("支付结果返回值(解密后):" + decryParams);
 
 
         JSONObject paramOut = JSONObject.parseObject(decryParams);
         JSONObject paramOut = JSONObject.parseObject(decryParams);

+ 63 - 0
service-acct/src/main/java/com/java110/acct/payment/adapt/bbgpay/EncryptDecryptFactory.java

@@ -0,0 +1,63 @@
+package com.java110.acct.payment.adapt.bbgpay;
+
+import com.java110.acct.payment.adapt.bbgpay.lib.GmUtil;
+import com.java110.acct.payment.adapt.bbgpay.lib.HttpRequestUtil;
+import com.java110.acct.payment.adapt.bbgpay.lib.JsonUtil;
+import com.java110.core.factory.CommunitySettingFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class EncryptDecryptFactory {
+
+
+    public static String execute(String communityId,String url, Map<String, Object> params){
+        String decrypt = "";
+        try {
+            String mchtNo_SM4 = CommunitySettingFactory.getValue(communityId, "mchtNo_SM4");
+            String publicKey_SM4 = CommunitySettingFactory.getValue(communityId, "publicKey_SM4");
+            // 格式为json
+            String json = JsonUtil.mapToJson(params);
+            System.out.println("加密前:" + json);
+            // 报文加密
+            String secretKey = GmUtil.generateSm4Key();
+            String encrypt = GmUtil.encryptSm4(json, secretKey);
+            System.out.println("加密后:" + encrypt);
+
+            Map<String, Object> signParams = new HashMap<>();
+            signParams.put("mcht_no", mchtNo_SM4);// 收款商户编号
+            signParams.put("sign_type", "SM4");
+            signParams.put("message_key", GmUtil.encryptSm2(secretKey, publicKey_SM4));// 密钥加密
+            signParams.put("enc_data", encrypt);// 加密后请求参数
+
+            String requestParams = JsonUtil.mapToJson(signParams);
+            System.out.println("最终请求参数:" + requestParams);
+            System.err.println("");
+            String returnResult = HttpRequestUtil.httpPost(url, requestParams);
+            System.out.println("支付结果返回值(原文):" + returnResult);
+            if (returnResult == null) {
+                System.err.println("通道响应异常");
+                throw new IllegalArgumentException("通道响应异常");
+
+            }
+            // 开始解密
+            Map<String, Object> responseParams = JsonUtil.jsonToMap(returnResult);
+            if (!responseParams.containsKey("enc_data")) {
+                System.err.println("交易失败-->" + responseParams.get("return_code") + ":" + responseParams.get("return_message"));
+                throw new IllegalArgumentException("交易失败-->" + responseParams.get("return_code") + ":" + responseParams.get("return_message"));
+            }
+            String decryptStr = (String) responseParams.get("enc_data");
+
+             decrypt = GmUtil.decryptSm4(decryptStr, secretKey);
+            if (decrypt == null) {
+                System.err.println("解密失败");
+                throw new IllegalArgumentException("解密失败");
+            }
+            System.out.println("支付结果返回值(解密后):" + decrypt);
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new IllegalArgumentException(e.getMessage());
+        }
+        return decrypt;
+    }
+}

+ 12 - 139
service-acct/src/main/java/com/java110/acct/smo/impl/QrCodeBbgPaymentAdapt.java

@@ -1,6 +1,7 @@
 package com.java110.acct.smo.impl;
 package com.java110.acct.smo.impl;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.java110.acct.payment.adapt.bbgpay.EncryptDecryptFactory;
 import com.java110.acct.payment.adapt.bbgpay.lib.AesEncrypt;
 import com.java110.acct.payment.adapt.bbgpay.lib.AesEncrypt;
 import com.java110.acct.payment.adapt.bbgpay.lib.CAUtil;
 import com.java110.acct.payment.adapt.bbgpay.lib.CAUtil;
 import com.java110.acct.payment.adapt.bbgpay.lib.HttpRequestUtil;
 import com.java110.acct.payment.adapt.bbgpay.lib.HttpRequestUtil;
@@ -70,16 +71,14 @@ public class QrCodeBbgPaymentAdapt implements IQrCodePaymentSMO {
         logger.debug("resMap=" + resMap);
         logger.debug("resMap=" + resMap);
         String systemName = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_GOOD_NAME);
         String systemName = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_GOOD_NAME);
 
 
-        String mchtNo_RSA2 = CommunitySettingFactory.getValue(communityId, "mchtNo_RSA2");
-        String productNo_RSA2 = CommunitySettingFactory.getValue(communityId, "productNo_RSA2");
-        String opToken_RSA2 = CommunitySettingFactory.getValue(communityId, "opToken_RSA2");
-        String mcht_PrivateKey_RSA2 = CommunitySettingFactory.getRemark(communityId, "mcht_PrivateKey_RSA2");
-        String bank_PublicKey_RSA2 = CommunitySettingFactory.getRemark(communityId, "bank_PublicKey_RSA2");
+        String mchtNo_SM4 = CommunitySettingFactory.getValue(communityId, "mchtNo_SM4");
+        String productNo_SM4 = CommunitySettingFactory.getValue(communityId, "productNo_SM4");
+        String publicKey_SM4 = CommunitySettingFactory.getValue(communityId, "publicKey_SM4");
 
 
         Map<String, Object> params = new HashMap<>();
         Map<String, Object> params = new HashMap<>();
         params.put("version", VERSION);// 版本号 1.0
         params.put("version", VERSION);// 版本号 1.0
-        params.put("mcht_no", mchtNo_RSA2);// 收款商户编号
-        params.put("product_no", productNo_RSA2);// 产品编号
+        params.put("mcht_no", mchtNo_SM4);// 收款商户编号
+        params.put("product_no", productNo_SM4);// 产品编号
         params.put("tran_no", orderNum);// 商户流水
         params.put("tran_no", orderNum);// 商户流水
         params.put("auth_code", authCode);// 码类型
         params.put("auth_code", authCode);// 码类型
         params.put("amt", payAmount);// 交易金额
         params.put("amt", payAmount);// 交易金额
@@ -87,57 +86,7 @@ public class QrCodeBbgPaymentAdapt implements IQrCodePaymentSMO {
         params.put("device_ip", "172.0.0.1");// 商户数据包
         params.put("device_ip", "172.0.0.1");// 商户数据包
         params.put("recog_no", "123123");// 交易终端编号
         params.put("recog_no", "123123");// 交易终端编号
 
 
-        String json = JsonUtil.mapToJson(params);
-        System.out.println("加密前:" + json);
-
-        Map<String, Object> soreMap = JsonUtil.sortMapByKey(params);
-
-        // 开始加密
-        byte[] en = AesEncrypt.encryptByte(json, "utf-8", opToken_RSA2);
-        if (en == null || en.length <= 0) {
-            System.err.println("加密失败");
-            throw new IllegalArgumentException("加密失败");
-        }
-        String encryptBase64Str = AesEncrypt.parseByte2HexStr(en);
-        System.out.println("加密后:" + encryptBase64Str);
-
-        String signtBase64Str = CAUtil.rsa256Sign(json, "utf-8", mcht_PrivateKey_RSA2);
-        System.out.println("加签串:" + signtBase64Str);
-
-        Map<String, Object> signParams = new HashMap<>();
-        signParams.put("mcht_no", mchtNo_RSA2);// 收款商户编号
-        signParams.put("sign_type", SIGN_TYPE);
-        signParams.put("sign", signtBase64Str);
-        signParams.put("enc_data", encryptBase64Str);// 加密后请求参数
-
-        String requestParams = JsonUtil.mapToJson(signParams);
-        System.out.println("最终请求参数:" + requestParams);
-        System.err.println("");
-        String returnResult = HttpRequestUtil.httpPost(gzhPayUrl, requestParams);
-        System.out.println("支付结果返回值(原文):" + returnResult);
-        if (returnResult == null) {
-            System.err.println("通道响应异常");
-            throw new IllegalArgumentException("通道响应异常");
-        }
-        // 开始解密
-        Map<String, Object> responseParams = JsonUtil.jsonToMap(returnResult);
-        // 开始解密
-        String decryptBase64Str = (String) responseParams.get("enc_data");
-        String verifyBase64Str = (String) responseParams.get("sign");
-        byte[] bt = AesEncrypt.parseHexStr2Byte(decryptBase64Str);
-        byte[] decrypt = AesEncrypt.decryptByte(bt, opToken_RSA2);
-        if (decrypt == null) {
-            System.err.println("解密失败");
-            throw new IllegalArgumentException("解密失败");
-        }
-        boolean isSuccess = CAUtil.rsa256Verify(decrypt, verifyBase64Str, bank_PublicKey_RSA2);
-        System.out.println("数据验签:" + isSuccess);
-        if (!isSuccess) {
-            System.err.println("验签失败");
-            throw new IllegalArgumentException("验签失败");
-        }
-        String decryParams = new String(decrypt);
-        System.out.println("支付结果返回值(解密后):" + decryParams);
+        String decryParams = EncryptDecryptFactory.execute(communityId, gzhPayUrl, params);
 
 
         JSONObject paramOut = JSONObject.parseObject(decryParams);
         JSONObject paramOut = JSONObject.parseObject(decryParams);
         if (!"0000".equals(paramOut.getString("return_code"))
         if (!"0000".equals(paramOut.getString("return_code"))
@@ -160,93 +109,17 @@ public class QrCodeBbgPaymentAdapt implements IQrCodePaymentSMO {
 
 
     public ResultVo checkPayFinish(String communityId, String orderNum) {
     public ResultVo checkPayFinish(String communityId, String orderNum) {
         Map<String, String> result = null;
         Map<String, String> result = null;
-        String mchtNo_RSA2 = CommunitySettingFactory.getValue(communityId, "mchtNo_RSA2");
-        String productNo_RSA2 = CommunitySettingFactory.getValue(communityId, "productNo_RSA2");
-        String opToken_RSA2 = CommunitySettingFactory.getValue(communityId, "opToken_RSA2");
-        String mcht_PrivateKey_RSA2 = CommunitySettingFactory.getRemark(communityId, "mcht_PrivateKey_RSA2");
-        String bank_PublicKey_RSA2 = CommunitySettingFactory.getRemark(communityId, "bank_PublicKey_RSA2");
+        String mchtNo_SM4 = CommunitySettingFactory.getValue(communityId, "mchtNo_SM4");
+        String productNo_SM4 = CommunitySettingFactory.getValue(communityId, "productNo_SM4");
+        String publicKey_SM4 = CommunitySettingFactory.getValue(communityId, "publicKey_SM4");
         Map<String, Object> params = new HashMap<>();
         Map<String, Object> params = new HashMap<>();
         params.put("version", VERSION);// 版本号 1.0
         params.put("version", VERSION);// 版本号 1.0
-        params.put("mcht_no", orderNum);// 收款商户编号
+        params.put("mcht_no", mchtNo_SM4);// 收款商户编号
         params.put("tran_no", orderNum);// 商户流水
         params.put("tran_no", orderNum);// 商户流水
         params.put("txn_no", "");// 支付流水
         params.put("txn_no", "");// 支付流水
 
 
         // 对准备加签参数排序
         // 对准备加签参数排序
-        Map<String, Object> soreMap = JsonUtil.sortMapByKey(params);
-        // 格式为json
-        String json = JsonUtil.mapToJson(soreMap);
-        System.out.println("加密前:" + json);
-        // 开始加密
-        byte[] en = new byte[0];
-        try {
-            en = AesEncrypt.encryptByte(json, "utf-8", opToken_RSA2);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        if (en == null || en.length <= 0) {
-            System.err.println("加密失败");
-            throw new IllegalArgumentException("加密失败");
-        }
-        String encryptBase64Str = AesEncrypt.parseByte2HexStr(en);
-        System.out.println("加密后:" + encryptBase64Str);
-
-        String signtBase64Str = null;
-        try {
-            signtBase64Str = CAUtil.rsa256Sign(json, "utf-8", mcht_PrivateKey_RSA2);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        System.out.println("加签串:" + signtBase64Str);
-
-        Map<String, Object> signParams = new HashMap<>();
-        signParams.put("mcht_no", mchtNo_RSA2);// 收款商户编号
-        signParams.put("sign_type", SIGN_TYPE);
-        signParams.put("sign", signtBase64Str);
-        signParams.put("enc_data", encryptBase64Str);// 加密后请求参数
-
-        String requestParams = JsonUtil.mapToJson(signParams);
-        System.out.println("最终请求参数:" + requestParams);
-        System.err.println("");
-        String returnResult = null;
-        try {
-            returnResult = HttpRequestUtil.httpPost(queryUrl, requestParams);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        System.out.println("支付结果返回值(原文):" + returnResult);
-        if (returnResult == null) {
-            System.err.println("通道响应异常");
-            throw new IllegalArgumentException("通道响应异常");
-        }
-        // 开始解密
-        Map<String, Object> responseParams = JsonUtil.jsonToMap(returnResult);
-        // 开始解密
-        String decryptBase64Str = (String) responseParams.get("enc_data");
-        String verifyBase64Str = (String) responseParams.get("sign");
-        byte[] bt = AesEncrypt.parseHexStr2Byte(decryptBase64Str);
-        byte[] decrypt = new byte[0];
-        try {
-            decrypt = AesEncrypt.decryptByte(bt, opToken_RSA2);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        if (decrypt == null) {
-            System.err.println("解密失败");
-            throw new IllegalArgumentException("解密失败");
-        }
-        boolean isSuccess = false;
-        try {
-            isSuccess = CAUtil.rsa256Verify(decrypt, verifyBase64Str, bank_PublicKey_RSA2);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        System.out.println("数据验签:" + isSuccess);
-        if (!isSuccess) {
-            System.err.println("验签失败");
-            throw new IllegalArgumentException("验签失败");
-        }
-        String decryParams = new String(decrypt);
-        System.out.println("支付结果返回值(解密后):" + decryParams);
+        String decryParams = EncryptDecryptFactory.execute(communityId, queryUrl, params);
 
 
         JSONObject paramOut = JSONObject.parseObject(decryParams);
         JSONObject paramOut = JSONObject.parseObject(decryParams);
         if (!"0000".equals(paramOut.getString("return_code"))
         if (!"0000".equals(paramOut.getString("return_code"))

+ 63 - 0
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/EncryptDecryptFactory.java

@@ -0,0 +1,63 @@
+package com.java110.job.adapt.returnMoney.bbg;
+
+import com.java110.core.factory.CommunitySettingFactory;
+import com.java110.job.adapt.returnMoney.bbg.lib.GmUtil;
+import com.java110.job.adapt.returnMoney.bbg.lib.HttpRequestUtil;
+import com.java110.job.adapt.returnMoney.bbg.lib.JsonUtil;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class EncryptDecryptFactory {
+
+
+    public static String execute(String communityId, String url, Map<String, Object> params) {
+        String decrypt = "";
+        try {
+            String mchtNo_SM4 = CommunitySettingFactory.getValue(communityId, "mchtNo_SM4");
+            String publicKey_SM4 = CommunitySettingFactory.getValue(communityId, "publicKey_SM4");
+            // 格式为json
+            String json = JsonUtil.mapToJson(params);
+            System.out.println("加密前:" + json);
+            // 报文加密
+            String secretKey = GmUtil.generateSm4Key();
+            String encrypt = GmUtil.encryptSm4(json, secretKey);
+            System.out.println("加密后:" + encrypt);
+
+            Map<String, Object> signParams = new HashMap<>();
+            signParams.put("mcht_no", mchtNo_SM4);// 收款商户编号
+            signParams.put("sign_type", "SM4");
+            signParams.put("message_key", GmUtil.encryptSm2(secretKey, publicKey_SM4));// 密钥加密
+            signParams.put("enc_data", encrypt);// 加密后请求参数
+
+            String requestParams = JsonUtil.mapToJson(signParams);
+            System.out.println("最终请求参数:" + requestParams);
+            System.err.println("");
+            String returnResult = HttpRequestUtil.httpPost(url, requestParams);
+            System.out.println("支付结果返回值(原文):" + returnResult);
+            if (returnResult == null) {
+                System.err.println("通道响应异常");
+                throw new IllegalArgumentException("通道响应异常");
+
+            }
+            // 开始解密
+            Map<String, Object> responseParams = JsonUtil.jsonToMap(returnResult);
+            if (!responseParams.containsKey("enc_data")) {
+                System.err.println("交易失败-->" + responseParams.get("return_code") + ":" + responseParams.get("return_message"));
+                throw new IllegalArgumentException("交易失败-->" + responseParams.get("return_code") + ":" + responseParams.get("return_message"));
+            }
+            String decryptStr = (String) responseParams.get("enc_data");
+
+            decrypt = GmUtil.decryptSm4(decryptStr, secretKey);
+            if (decrypt == null) {
+                System.err.println("解密失败");
+                throw new IllegalArgumentException("解密失败");
+            }
+            System.out.println("支付结果返回值(解密后):" + decrypt);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new IllegalArgumentException(e.getMessage());
+        }
+        return decrypt;
+    }
+}

+ 4 - 56
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/ReturnPayFeeBbgMoneyAdapt.java

@@ -124,15 +124,11 @@ public class ReturnPayFeeBbgMoneyAdapt extends DatabusAdaptImpl {
 
 
         String communityId = "";
         String communityId = "";
 
 
-        String mchtNo_RSA2 = CommunitySettingFactory.getValue(communityId, "mchtNo_RSA2");
-        String productNo_RSA2 = CommunitySettingFactory.getValue(communityId, "productNo_RSA2");
-        String opToken_RSA2 = CommunitySettingFactory.getValue(communityId, "opToken_RSA2");
-        String mcht_PrivateKey_RSA2 = CommunitySettingFactory.getRemark(communityId, "mcht_PrivateKey_RSA2");
-        String bank_PublicKey_RSA2 = CommunitySettingFactory.getRemark(communityId, "bank_PublicKey_RSA2");
+        String mchtNo_SM4 = CommunitySettingFactory.getValue(communityId, "mchtNo_SM4");
 
 
         Map<String, Object> params = new HashMap<>();
         Map<String, Object> params = new HashMap<>();
         params.put("version", VERSION);// 版本号 1.0
         params.put("version", VERSION);// 版本号 1.0
-        params.put("mcht_no", mchtNo_RSA2);// 收款商户编号
+        params.put("mcht_no", mchtNo_SM4);// 收款商户编号
         params.put("tran_no", onlinePayDto.getOrderId());// 商户流水
         params.put("tran_no", onlinePayDto.getOrderId());// 商户流水
         params.put("org_txn_no", onlinePayDto.getTransactionId());// 原平台流水
         params.put("org_txn_no", onlinePayDto.getTransactionId());// 原平台流水
         params.put("device_ip", "172.0.0.1");// 设备发起交易IP
         params.put("device_ip", "172.0.0.1");// 设备发起交易IP
@@ -140,56 +136,8 @@ public class ReturnPayFeeBbgMoneyAdapt extends DatabusAdaptImpl {
         params.put("ware_name", onlinePayDto.getPayName());// 摘要备注
         params.put("ware_name", onlinePayDto.getPayName());// 摘要备注
 
 
         // 对准备加签参数排序
         // 对准备加签参数排序
-        Map<String, Object> soreMap = JsonUtil.sortMapByKey(params);
-        // 格式为json
-        String json = JsonUtil.mapToJson(soreMap);
-        System.out.println("加密前:" + json);
-        // 开始加密
-        byte[] en = AesEncrypt.encryptByte(json, "utf-8", opToken_RSA2);
-        if (en == null || en.length <= 0) {
-            System.err.println("加密失败");
-            return;
-        }
-        String encryptBase64Str = AesEncrypt.parseByte2HexStr(en);
-        System.out.println("加密后:" + encryptBase64Str);
-
-        String signtBase64Str = CAUtil.rsa256Sign(json, "utf-8", mcht_PrivateKey_RSA2);
-        System.out.println("加签串:" + signtBase64Str);
-
-        Map<String, Object> signParams = new HashMap<>();
-        signParams.put("mcht_no", mchtNo_RSA2);// 收款商户编号
-        signParams.put("sign_type", SIGN_TYPE);
-        signParams.put("sign", signtBase64Str);
-        signParams.put("enc_data", encryptBase64Str);// 加密后请求参数
-
-        String requestParams = JsonUtil.mapToJson(signParams);
-        System.out.println("最终请求参数:" + requestParams);
-        System.err.println("");
-        String returnResult = HttpRequestUtil.httpPost(refundUrl, requestParams);
-        System.out.println("支付结果返回值(原文):" + returnResult);
-        if (returnResult == null) {
-            System.err.println("通道响应异常");
-            return;
-        }
-        // 开始解密
-        Map<String, Object> responseParams = JsonUtil.jsonToMap(returnResult);
-        // 开始解密
-        String decryptBase64Str = (String) responseParams.get("enc_data");
-        String verifyBase64Str = (String) responseParams.get("sign");
-        byte[] bt = AesEncrypt.parseHexStr2Byte(decryptBase64Str);
-        byte[] decrypt = AesEncrypt.decryptByte(bt, opToken_RSA2);
-        if (decrypt == null) {
-            System.err.println("解密失败");
-            return;
-        }
-        boolean isSuccess = CAUtil.rsa256Verify(decrypt, verifyBase64Str, bank_PublicKey_RSA2);
-        System.out.println("数据验签:" + isSuccess);
-        if (!isSuccess) {
-            System.err.println("验签失败");
-            return;
-        }
-        String decryParams = new String(decrypt);
-        System.out.println("支付结果返回值(解密后):" + decryParams);
+        String decryParams = EncryptDecryptFactory.execute(communityId, refundUrl, params);
+
         JSONObject paramOut = JSONObject.parseObject(decryParams);
         JSONObject paramOut = JSONObject.parseObject(decryParams);
         if (!"0000".equals(paramOut.getString("return_code"))
         if (!"0000".equals(paramOut.getString("return_code"))
                 || !"SUCCESS".equals(paramOut.getString("status"))
                 || !"SUCCESS".equals(paramOut.getString("status"))