From 0a8d28436b2f7229ecdf40c6b003902002c8947f Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 16 十月 2025 17:37:08 +0800
Subject: [PATCH] 修改bug
---
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/TokenUtil.java | 97 ++++++++++++++++++++++++++++++++++++------------
1 files changed, 72 insertions(+), 25 deletions(-)
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/TokenUtil.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/TokenUtil.java
index d0d4130..8bd3b0f 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/TokenUtil.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/TokenUtil.java
@@ -1,44 +1,91 @@
package com.stylefeng.guns.modular.system.util.zhenglian;
-import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
import com.stylefeng.guns.modular.system.util.UUIDUtil;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.MessageBody;
import com.stylefeng.guns.modular.system.util.zhenglian.model.TokenRequest;
+import com.zlpay.assist.encrypt.sm4.SM4Util;
+import com.zlpay.assist.sign.sm2.SM2Util;
+import lombok.extern.slf4j.Slf4j;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
/**
* @author zhibing.pu
* @Date 2025/7/24 14:06
*/
+@Slf4j
public class TokenUtil {
-
+
private static ZhengLianConfig zhengLianConfig = SpringContextsUtil.getBean(ZhengLianConfig.class).getZhengLianConfig();
-
-
- public static void getToken(TokenRequest request){
- request.setAppid(zhengLianConfig.getAppid());
- HttpRequest post = HttpUtil.createPost(zhengLianConfig.getUrl());
- String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
- post.header("msgId", UUIDUtil.getRandomCode());
- post.header("merchNo", zhengLianConfig.getMerchNo());
- post.header("txCode","ZLPAY.ACC.T0001");
- post.header("version","1.0.1");
- post.header("encrp","1");
- post.header("signa","1");
- post.header("encrpNo","123456");
- post.header("signNo","123456");
- post.header("timestamp", timestamp);
- post.header("Content-Length", "");
- post.header("Content-Type", "application/json;charset=utf-8");
+
+ public static String getToken(TokenRequest tokenRequest) throws Exception {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+ Map<String,String> headerMap = new HashMap<String,String>();
+ MessageBody body = new MessageBody();
+ headerMap.put("msgId", UUIDUtil.getRandomCode());
+ headerMap.put("merchNo", zhengLianConfig.getMerchNo());
+ headerMap.put("txCode", "ZLPAY.ACC.T0001");
+ headerMap.put("version", "1.0.1");
+ headerMap.put("signa", "1");
+ headerMap.put("signNo", zhengLianConfig.getSignNo());
+ headerMap.put("encrp", "1");
+ headerMap.put("encrpNo", zhengLianConfig.getEncrpNo());
+ headerMap.put("timestamp", sdf.format(new Date()));
+ log.info("【证联获取token】请求头报文:"+JSON.toJSONString(headerMap));
+ tokenRequest.setAppId(zhengLianConfig.getAppid());
+ String reqBO = JSON.toJSONString(tokenRequest);
+ log.info("【证联获取token】请求体报文:"+reqBO);
+ // 生成对称加密秘钥
+ String key = ZhengLianUtil.generateKey(16);
+ // 加密数据
+ String jsonData = SM4Util.sm4EcbEncrypt(key, reqBO, "NoPadding");
+ //加密对称加密的秘钥
+ // 获取公钥
+ String publicKey = ZhengLianUtil.getPublicKey();
+ String secrtKey = SM2Util.encrypt(publicKey, key);
+ // 将密文放入body
+ body.setData(jsonData);
+ body.setSign(ZhengLianUtil.sign(jsonData));
+ body.setSecret(secrtKey);
+ log.info("【证联获取token】请求体密文报文:"+JSON.toJSONString(body));
+ String result = ZLHttpClientUtil.doPost(zhengLianConfig.getUrl(), headerMap, JSON.toJSONString(body));
- post.body("{}");
-
-
+ log.info("【证联获取token】应答内容:"+ result);
+ MessageBody respBody = JSON.parseObject(result,MessageBody.class);
+ // 验签
+ boolean checkResult = SM2Util.verify(publicKey, zhengLianConfig.getEncrpNo(), respBody.getSign(), respBody.getData());
+ log.info("【证联获取token】验签结果:" + checkResult);
+ // 获取私钥
+ String privateKey = ZhengLianUtil.getPrivateKey();
+ // 解密对称秘钥
+ String k = SM2Util.decrypt(privateKey, respBody.getSecret());
+ log.info("【证联获取token】对称秘钥:" + k);
+ // 解密业务报文
+ String backData = SM4Util.sm4EcbDecrypt(k, respBody.getData());
+ log.info("【证联获取token】返回业务报文:" + backData);
+ JSONObject jsonObject = JSON.parseObject(backData);
+ String sysRtnCode = jsonObject.getString("sysRtnCode");
+ if(!"000000".equals(sysRtnCode)){
+ log.error("【证联获取token】获取token失败!{}", jsonObject.getString("sysRtnMsg"));
+ throw new Exception(jsonObject.getString("sysRtnMsg"));
+ }
+ JSONObject bizData = jsonObject.getJSONObject("bizData");
+ String resCode = bizData.getString("resCode");
+ if(!"S010000".equals(resCode)){
+ log.error("【证联获取token】获取token失败!{}", bizData.getString("resMsg"));
+ throw new Exception(jsonObject.getString("resMsg"));
+ }
+ JSONObject resData = bizData.getJSONObject("resData");
+ return resData.getString("token");
}
+
}
--
Gitblit v1.7.1