cbs8 工具类
This commit is contained in:
parent
1f353a3405
commit
c767923d87
|
@ -0,0 +1,187 @@
|
||||||
|
package com.hzya.frame.cbs8.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.alibaba.fastjson.TypeReference;
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description
|
||||||
|
* @Author xiangerlin
|
||||||
|
* @Date 2024/6/7 15:38
|
||||||
|
**/
|
||||||
|
@Component
|
||||||
|
public class CBSUtil {
|
||||||
|
/**
|
||||||
|
* 集中支付模式
|
||||||
|
*/
|
||||||
|
public static final String CENTRALIZED_PAYMENT_TYPE = "401";
|
||||||
|
/**
|
||||||
|
* 分页查询 最大条数
|
||||||
|
*/
|
||||||
|
public static final int MAX_PAGE_SIZE = 1000;
|
||||||
|
/**
|
||||||
|
* 默认分页查询条数
|
||||||
|
*/
|
||||||
|
public static final int DEFAULT_PAGE_SIZE = 100;
|
||||||
|
/**
|
||||||
|
* 默认页码
|
||||||
|
*/
|
||||||
|
public static final int DEFAULT_CURRENT_PAGE = 1;
|
||||||
|
static Logger logger = LogManager.getLogger(CBSUtil.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求参数格式
|
||||||
|
*/
|
||||||
|
public static String TARGET_CONTENT_TYPE = "application/json";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名请求头参数名
|
||||||
|
*/
|
||||||
|
public static String SIGN_HEADER_NAME = "X-MBCLOUD-API-SIGN";
|
||||||
|
/**
|
||||||
|
* 时间戳请求头参数名
|
||||||
|
*/
|
||||||
|
public static String TIMESTAMP_HEADER = "X-MBCLOUD-TIMESTAMP";
|
||||||
|
|
||||||
|
public static String ENCRYPTION_ENABLED_HEADER_NAME = "X-MBCLOUD-ENCRYPTION-ENABLED";
|
||||||
|
|
||||||
|
public static String X_MBCLOUD_COMPRESS = "X-Mbcloud-Compress";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求头token参数名
|
||||||
|
*/
|
||||||
|
public static String AUTHORIZATION = "Authorization";
|
||||||
|
|
||||||
|
/**
|
||||||
|
*token前缀
|
||||||
|
*/
|
||||||
|
public static String BEARER = "Bearer ";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 财资管理云公钥(平台公钥)
|
||||||
|
*/
|
||||||
|
public static String bodyEncryptionKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 企业私钥(加密)
|
||||||
|
*/
|
||||||
|
public static String signEncryptionPrivateKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 企业私钥(解密)
|
||||||
|
*/
|
||||||
|
public static String bodyDecryptionKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 财资管理云公钥(平台公钥)
|
||||||
|
*/
|
||||||
|
@Value("${cbs8.cbs_public_key}")
|
||||||
|
public void setBodyEncryptionKey(String bodyEncryptionKey) {
|
||||||
|
CBSUtil.bodyEncryptionKey = bodyEncryptionKey;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 企业私钥(解密)
|
||||||
|
*/
|
||||||
|
@Value("${cbs8.ya_private_key}")
|
||||||
|
public void setSignEncryptionPrivateKey(String signEncryptionPrivateKey) {
|
||||||
|
CBSUtil.signEncryptionPrivateKey = signEncryptionPrivateKey;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 企业私钥(解密)
|
||||||
|
*/
|
||||||
|
@Value("${cbs8.ya_private_key}")
|
||||||
|
public void setBodyDecryptionKey(String bodyDecryptionKey) {
|
||||||
|
CBSUtil.bodyDecryptionKey = bodyDecryptionKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
//将json数组转为list
|
||||||
|
public static <T> List<T> convertJsonArrayToList(List<JSONObject> list, Class<T> clazz) {
|
||||||
|
String jsonArray = JSON.toJSONString(list);
|
||||||
|
List<T> result = JSON.parseObject(jsonArray, new TypeReference<List<T>>(clazz) {});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将时间戳转换成日期字符串
|
||||||
|
* @param timestamp
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String convertTimestampToString(String timestamp) {
|
||||||
|
if (StrUtil.isNotEmpty(timestamp) && NumberUtil.isNumber(timestamp)){
|
||||||
|
// 创建SimpleDateFormat对象,指定日期时间格式
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
// 将时间戳转换为Date对象
|
||||||
|
Date date = new Date(Long.valueOf(timestamp));
|
||||||
|
|
||||||
|
// 使用SimpleDateFormat格式化Date对象,得到字符串表示
|
||||||
|
return sdf.format(date);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名
|
||||||
|
* @param requestData
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String sign(String requestData){
|
||||||
|
long timestamp = System.currentTimeMillis();
|
||||||
|
return sign(requestData,timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名
|
||||||
|
* @param requestData
|
||||||
|
* @param timestamp
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String sign(String requestData,long timestamp){
|
||||||
|
|
||||||
|
// 请求数据拼接: 报文体+时间戳
|
||||||
|
byte[] requestDataBytes = requestData.getBytes(StandardCharsets.UTF_8);
|
||||||
|
byte[] timestampBytes = ("×tamp=" + timestamp).getBytes(StandardCharsets.UTF_8);
|
||||||
|
byte[] newBytes = new byte[requestDataBytes.length + timestampBytes.length];
|
||||||
|
System.arraycopy(requestDataBytes, 0, newBytes, 0, requestDataBytes.length);
|
||||||
|
System.arraycopy(timestampBytes, 0, newBytes, requestDataBytes.length, timestampBytes.length);
|
||||||
|
|
||||||
|
// 生成签名
|
||||||
|
byte[] signature = SM2Util.sign(signEncryptionPrivateKey, newBytes);
|
||||||
|
String sign = Base64.encodeBase64String(SM2Util.encodeDERSignature(signature));
|
||||||
|
logger.info("签名:{}", sign);
|
||||||
|
return sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加密
|
||||||
|
* @param requestData
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static byte[] encrypt(String requestData){
|
||||||
|
byte[] encrypt = SM2Util.encrypt(bodyEncryptionKey, requestData.getBytes(StandardCharsets.UTF_8));
|
||||||
|
return encrypt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String decrypt(byte[] cipherData){
|
||||||
|
try {
|
||||||
|
byte[] decrypt = SM2Util.decrypt(bodyDecryptionKey, cipherData);
|
||||||
|
String text = new String(decrypt);
|
||||||
|
return text;
|
||||||
|
}catch (Exception e){
|
||||||
|
logger.error("解密失败",e);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue