Forráskód Böngészése

支付请求升级

ZhangWenQiang 3 éve
szülő
commit
8793c352c7

+ 7 - 1
happy-cloud-wisdom/happy-cloud-wisdom-biz/src/main/java/org/jeecg/common/zhutils/DCHelper.java

@@ -67,12 +67,18 @@ public class DCHelper {
         return appender.toString();
     }
 
-    public static String getTime() {
+    public static String getTimestamp() {
         LocalDateTime now = LocalDateTime.now(ZoneId.of("+8"));
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
         return formatter.format(now);
     }
 
+    public static String getTime() {
+        LocalDateTime now = LocalDateTime.now(ZoneId.of("+8"));
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        return formatter.format(now);
+    }
+
     public static String doPostForm(String httpUrl, Map<String, String> param) throws Exception {
         HttpURLConnection connection = null;
         InputStream is = null;

+ 14 - 9
happy-cloud-wisdom/happy-cloud-wisdom-biz/src/main/java/org/jeecg/common/zhutils/PayRequest.java

@@ -14,9 +14,14 @@ import java.util.HashMap;
  * @Date: 2021/05/27 9:34
  */
 public class PayRequest {
-    // 采用国密算法
+    /**
+     * 采用国密算法
+     */
     private static final String ALG_SM = "SM";
 
+    private static java.util.Base64.Encoder encoder = java.util.Base64.getEncoder();
+    private static java.util.Base64.Decoder decoder = java.util.Base64.getDecoder();
+
     /**
      * 支付请求统一方法
      *
@@ -36,7 +41,7 @@ public class PayRequest {
         head.put("funcode", funcode);
         head.put("userid", userid);
         // 免前置接入方式时该字段必输,前17位必须满足日期格式yyyyMMddHHmmssSSS(年月日时分秒毫秒)后面的自己定义,长度18-51位
-        String reqid = DCHelper.getTime();
+        String reqid = DCHelper.getTimestamp();
         // 组合随机数(12位),请求id=日期+随机数
         reqid = reqid + RandomRequest.getRandom(12);
         head.put("reqid", reqid);
@@ -51,9 +56,9 @@ public class PayRequest {
         jObject.put("signature", sign);
         String source = DCHelper.serialJsonOrdered(jObject);
         System.out.println("签名原文: " + source);
-        byte[] signature1 = DCCryptor.CMBSM2SignWithSM3(getID_IV(userid), Base64.decode(prvKey), source.getBytes(
+        byte[] signature1 = DCCryptor.CMBSM2SignWithSM3(getID_IV(userid), decoder.decode(prvKey), source.getBytes(
                 StandardCharsets.UTF_8));
-        String sigdat1 = new String(Base64.encode(signature1));
+        String sigdat1 = new String(encoder.encode(signature1));
         System.out.println("签名结果: " + sigdat1);
         sign.put("sigdat", sigdat1);
         jObject.put("signature", sign);
@@ -63,7 +68,7 @@ public class PayRequest {
         System.out.println("加密前req:  " + plaintxt);
         byte[] enInput = DCCryptor.CMBSM4EncryptWithCBC(aesKey.getBytes(), getID_IV(userid), plaintxt.getBytes(
                 StandardCharsets.UTF_8));
-        String req = new String(Base64.encode(enInput));
+        String req = new String(encoder.encode(enInput));
         System.out.println("加密后req:  " + req);
 
         // 发送请求
@@ -76,7 +81,7 @@ public class PayRequest {
         String formResult = PayUtils.doPostForm(payurl, map);
         System.out.println("请求结果: " + formResult);
         try {
-            Base64.decode(formResult);
+            decoder.decode(formResult);
         } catch (Exception e) {
             System.err.println("访问返回错误.");
         }
@@ -84,7 +89,7 @@ public class PayRequest {
         //请求报文通过校验,不再抛异常
         if (!formResult.startsWith(PayConst.CDCServer)) {
             // 解密请求
-            String resPlain = new String(DCCryptor.CMBSM4DecryptWithCBC(aesKey.getBytes(), getID_IV(userid), Base64.decode(formResult)),
+            String resPlain = new String(DCCryptor.CMBSM4DecryptWithCBC(aesKey.getBytes(), getID_IV(userid), decoder.decode(formResult)),
                     StandardCharsets.UTF_8);
             System.out.println("res decrypt: " + resPlain);
             // 验签
@@ -96,8 +101,8 @@ public class PayRequest {
             String resSignSource = DCHelper.serialJsonOrdered(object2);
             System.out.println("验签原文: " + resSignSource);
             System.out.println("验签签名值: " + resSign);
-            Boolean verify = DCCryptor.CMBSM2VerifyWithSM3(getID_IV(userid), Base64.decode(publicKey), resSignSource.getBytes(
-                    StandardCharsets.UTF_8), Base64.decode(resSign));
+            Boolean verify = DCCryptor.CMBSM2VerifyWithSM3(getID_IV(userid), decoder.decode(publicKey), resSignSource.getBytes(
+                    StandardCharsets.UTF_8), decoder.decode(resSign));
             System.out.println("验签结果: " + verify);
             if (verify) {
                 return resSignSource;