记得上下班打卡 | git大法好,push需谨慎

Commit cb347737 authored by anjiabin's avatar anjiabin

提交unionpay代码

parent 97b35e40
...@@ -4,7 +4,9 @@ import lombok.extern.slf4j.Slf4j; ...@@ -4,7 +4,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import java.net.InetAddress; import java.net.InetAddress;
...@@ -12,6 +14,7 @@ import java.util.Arrays; ...@@ -12,6 +14,7 @@ import java.util.Arrays;
@Slf4j @Slf4j
@SpringBootApplication(scanBasePackages = {"com.liquidnet"}) @SpringBootApplication(scanBasePackages = {"com.liquidnet"})
@EnableConfigurationProperties
public class ServiceDragonApplication implements CommandLineRunner { public class ServiceDragonApplication implements CommandLineRunner {
@Autowired @Autowired
private Environment environment; private Environment environment;
......
...@@ -2,6 +2,7 @@ package com.liquidnet.service.dragon.channel.unionpay.sdk; ...@@ -2,6 +2,7 @@ package com.liquidnet.service.dragon.channel.unionpay.sdk;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException; import java.io.IOException;
import java.security.PublicKey; import java.security.PublicKey;
...@@ -15,6 +16,15 @@ import java.util.Map; ...@@ -15,6 +16,15 @@ import java.util.Map;
*/ */
@Slf4j @Slf4j
public class Acp6Service { public class Acp6Service {
@Autowired
private SDKConfig sdkConfig;
@Autowired
private CertUtil certUtil;
@Autowired
private SDKUtil sdkUtil;
/** /**
* 请求报文签名(使用配置文件中配置的私钥证书或者对称密钥签名)<br> * 请求报文签名(使用配置文件中配置的私钥证书或者对称密钥签名)<br>
* 功能:对请求报文进行签名,并计算赋值certid,signature字段并返回<br> * 功能:对请求报文进行签名,并计算赋值certid,signature字段并返回<br>
...@@ -22,8 +32,8 @@ public class Acp6Service { ...@@ -22,8 +32,8 @@ public class Acp6Service {
* @param encoding 上送请求报文域encoding字段的值<br> * @param encoding 上送请求报文域encoding字段的值<br>
* @return 签名后的map对象<br> * @return 签名后的map对象<br>
*/ */
public static Map<String, String> sign(Map<String, String> reqData,String encoding) { public Map<String, String> sign(Map<String, String> reqData,String encoding) {
return signByCertInfo(reqData, SDKConfig.getConfig().getSignCertPath(), SDKConfig.getConfig().getSignCertPwd(), encoding); return signByCertInfo(reqData, sdkConfig.getSignCertPath(), sdkConfig.getSignCertPwd(), encoding);
} }
/** /**
...@@ -35,7 +45,7 @@ public class Acp6Service { ...@@ -35,7 +45,7 @@ public class Acp6Service {
* @param encoding 上送请求报文域encoding字段的值<br> * @param encoding 上送请求报文域encoding字段的值<br>
* @return 签名后的map对象<br> * @return 签名后的map对象<br>
*/ */
public static Map<String, String> signByCertInfo(Map<String, String> reqData, String certPath, public Map<String, String> signByCertInfo(Map<String, String> reqData, String certPath,
String certPwd, String encoding) { String certPwd, String encoding) {
Map<String, String> data = SDKUtil.filterBlank(reqData); Map<String, String> data = SDKUtil.filterBlank(reqData);
...@@ -50,8 +60,8 @@ public class Acp6Service { ...@@ -50,8 +60,8 @@ public class Acp6Service {
} }
try { try {
data.put(SDKConstants.param_certId, CertUtil.getCertIdByKeyStoreMap(certPath, certPwd)); data.put(SDKConstants.param_certId, certUtil.getCertIdByKeyStoreMap(certPath, certPwd));
data.put(SDKConstants.param_signature, SDKUtil.signRsa2(data, certPath, certPwd, encoding)); data.put(SDKConstants.param_signature, sdkUtil.signRsa2(data, certPath, certPwd, encoding));
return data; return data;
} catch (Exception e) { } catch (Exception e) {
log.error("Sign Error", e); log.error("Sign Error", e);
...@@ -65,7 +75,7 @@ public class Acp6Service { ...@@ -65,7 +75,7 @@ public class Acp6Service {
* @param encoding 上送请求报文域encoding字段的值<br> * @param encoding 上送请求报文域encoding字段的值<br>
* @return true 通过 false 未通过<br> * @return true 通过 false 未通过<br>
*/ */
public static boolean validate(Map<String, String> data, String encoding) { public boolean validate(Map<String, String> data, String encoding) {
log.info("验签处理开始"); log.info("验签处理开始");
if (SDKUtil.isEmpty(encoding)) { if (SDKUtil.isEmpty(encoding)) {
encoding = "UTF-8"; encoding = "UTF-8";
...@@ -73,7 +83,7 @@ public class Acp6Service { ...@@ -73,7 +83,7 @@ public class Acp6Service {
String certId = data.get(SDKConstants.param_certId); String certId = data.get(SDKConstants.param_certId);
log.info("对返回报文串验签使用的验签公钥序列号:[" + certId + "]"); log.info("对返回报文串验签使用的验签公钥序列号:[" + certId + "]");
PublicKey verifyKey = CertUtil.getValidatePublicKey(certId); PublicKey verifyKey = certUtil.getValidatePublicKey(certId);
if(verifyKey == null) { if(verifyKey == null) {
log.error("未找到此序列号证书。"); log.error("未找到此序列号证书。");
return false; return false;
...@@ -94,8 +104,8 @@ public class Acp6Service { ...@@ -94,8 +104,8 @@ public class Acp6Service {
* 更新成功则返回1,无更新返回0,失败异常返回-1<br> * 更新成功则返回1,无更新返回0,失败异常返回-1<br>
* @return * @return
*/ */
public static int updateEncryptCert(String strCert, String certType) { public int updateEncryptCert(String strCert, String certType) {
return SDKUtil.updateEncryptCert(strCert, certType); return sdkUtil.updateEncryptCert(strCert, certType);
} }
/** /**
...@@ -105,9 +115,9 @@ public class Acp6Service { ...@@ -105,9 +115,9 @@ public class Acp6Service {
* @param encoding<br> * @param encoding<br>
* @return 加密的内容<br> * @return 加密的内容<br>
*/ */
public static String encryptPin(String accNo, String pin, String encoding) { public String encryptPin(String accNo, String pin, String encoding) {
byte[] pinblock = SecureUtil.pinblock(accNo, pin); byte[] pinblock = SecureUtil.pinblock(accNo, pin);
return Base64.encodeBase64String(SecureUtil.encrypt(CertUtil.getPinEncryptCert().pubKey, pinblock)); return Base64.encodeBase64String(SecureUtil.encrypt(certUtil.getPinEncryptCert().pubKey, pinblock));
} }
// /** // /**
...@@ -117,7 +127,7 @@ public class Acp6Service { ...@@ -117,7 +127,7 @@ public class Acp6Service {
// * @param encoding<br> // * @param encoding<br>
// * @return 加密的内容<br> // * @return 加密的内容<br>
// */ // */
// public static String encryptPin(String pin, String encoding) { // public String encryptPin(String pin, String encoding) {
// byte[] pinblock = SecureUtil.pinblock(pin); // byte[] pinblock = SecureUtil.pinblock(pin);
// return Base64.encodeBase64String(SecureUtil.encrypt(CertUtil.getPinEncryptCert().pubKey, pinblock)); // return Base64.encodeBase64String(SecureUtil.encrypt(CertUtil.getPinEncryptCert().pubKey, pinblock));
// } // }
...@@ -128,8 +138,8 @@ public class Acp6Service { ...@@ -128,8 +138,8 @@ public class Acp6Service {
* @param encoding<br> * @param encoding<br>
* @return 加密的密文<br> * @return 加密的密文<br>
*/ */
public static String encryptData(String data, String encoding) { public String encryptData(String data, String encoding) {
return AcpService.encryptData(data, encoding); return this.encryptData(data, encoding);
} }
...@@ -137,9 +147,9 @@ public class Acp6Service { ...@@ -137,9 +147,9 @@ public class Acp6Service {
* @param data 明文<br> * @param data 明文<br>
* @return 加密的密文<br> * @return 加密的密文<br>
*/ */
public static String encryptData(byte[] data) { public String encryptData(byte[] data) {
try { try {
return Base64.encodeBase64String(SecureUtil.encrypt(CertUtil.getEncryptCert().pubKey, data)); return Base64.encodeBase64String(SecureUtil.encrypt(certUtil.getEncryptCert().pubKey, data));
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return null; return null;
...@@ -151,7 +161,7 @@ public class Acp6Service { ...@@ -151,7 +161,7 @@ public class Acp6Service {
* @param data 明文<br> * @param data 明文<br>
* @return 加密的密文<br> * @return 加密的密文<br>
*/ */
public static String tripleDesEncryptECBPKCS5Padding(byte[] key, byte[] data) { public String tripleDesEncryptECBPKCS5Padding(byte[] key, byte[] data) {
try { try {
return Base64.encodeBase64String(SecureUtil.tripleDesEncryptECBPKCS5Padding(key, SecureUtil.rightPadZero(data, 8))); return Base64.encodeBase64String(SecureUtil.tripleDesEncryptECBPKCS5Padding(key, SecureUtil.rightPadZero(data, 8)));
} catch (Exception e) { } catch (Exception e) {
...@@ -166,8 +176,8 @@ public class Acp6Service { ...@@ -166,8 +176,8 @@ public class Acp6Service {
* @param encoding<br> * @param encoding<br>
* @return 解密后的明文<br> * @return 解密后的明文<br>
*/ */
public static String decryptData(String base64EncryptedInfo, String encoding) { public String decryptData(String base64EncryptedInfo, String encoding) {
return AcpService.decryptData(base64EncryptedInfo, encoding); return this.decryptData(base64EncryptedInfo, encoding);
} }
/** /**
...@@ -178,25 +188,25 @@ public class Acp6Service { ...@@ -178,25 +188,25 @@ public class Acp6Service {
* @param encoding<br> * @param encoding<br>
* @return * @return
*/ */
public static String decryptData(String base64EncryptedInfo, String certPath, public String decryptData(String base64EncryptedInfo, String certPath,
String certPwd, String encoding) { String certPwd, String encoding) {
return AcpService.decryptData(base64EncryptedInfo, certPath, certPwd, encoding); return this.decryptData(base64EncryptedInfo, certPath, certPwd, encoding);
} }
/** /**
* 获取敏感信息加密证书的物理序列号<br> * 获取敏感信息加密证书的物理序列号<br>
* @return * @return
*/ */
public static String getEncryptCertId(){ public String getEncryptCertId(){
return CertUtil.getEncryptCert().certId; return certUtil.getEncryptCert().certId;
} }
/** /**
* 获取敏感信息加密证书的物理序列号<br> * 获取敏感信息加密证书的物理序列号<br>
* @return * @return
*/ */
public static String getPinEncryptCertId(){ public String getPinEncryptCertId(){
return CertUtil.getPinEncryptCert().certId; return certUtil.getPinEncryptCert().certId;
} }
...@@ -207,13 +217,13 @@ public class Acp6Service { ...@@ -207,13 +217,13 @@ public class Acp6Service {
* @param encoding<br> * @param encoding<br>
* @return 应答http 200返回true ,其他false<br> * @return 应答http 200返回true ,其他false<br>
*/ */
public static Map<String,String> post(Map<String, String> reqData, String reqUrl,String encoding) { public Map<String,String> post(Map<String, String> reqData, String reqUrl,String encoding) {
if(reqData == null || reqUrl == null) { if(reqData == null || reqUrl == null) {
log.error("null input"); log.error("null input");
return null; return null;
} }
log.info("请求银联地址:" + reqUrl + ",请求参数:" + reqData.toString()); log.info("请求银联地址:" + reqUrl + ",请求参数:" + reqData.toString());
if(reqUrl.startsWith("https://") && !SDKConfig.getConfig().isIfValidateRemoteCert()) { if(reqUrl.startsWith("https://") && !sdkConfig.isIfValidateRemoteCert()) {
reqUrl = "u" + reqUrl; reqUrl = "u" + reqUrl;
} }
try{ try{
...@@ -238,13 +248,13 @@ public class Acp6Service { ...@@ -238,13 +248,13 @@ public class Acp6Service {
* @param encoding<br> * @param encoding<br>
* @return 应答http 200返回true ,其他false<br> * @return 应答http 200返回true ,其他false<br>
*/ */
public static String postNotice(Map<String, String> reqData, String reqUrl,String encoding) { public String postNotice(Map<String, String> reqData, String reqUrl,String encoding) {
if(reqData == null || reqUrl == null) { if(reqData == null || reqUrl == null) {
log.error("null input"); log.error("null input");
return null; return null;
} }
log.info("请求银联地址:" + reqUrl + ",请求参数:" + reqData.toString()); log.info("请求银联地址:" + reqUrl + ",请求参数:" + reqData.toString());
if(reqUrl.startsWith("https://") && !SDKConfig.getConfig().isIfValidateRemoteCert()) { if(reqUrl.startsWith("https://") && !sdkConfig.isIfValidateRemoteCert()) {
reqUrl = "u" + reqUrl; reqUrl = "u" + reqUrl;
} }
try{ try{
...@@ -269,7 +279,7 @@ public class Acp6Service { ...@@ -269,7 +279,7 @@ public class Acp6Service {
* @return<br> * @return<br>
* @throws IOException * @throws IOException
*/ */
public static String base64Encode(String rawStr, String encoding){ public String base64Encode(String rawStr, String encoding){
return AcpService.base64Encode(rawStr, encoding); return AcpService.base64Encode(rawStr, encoding);
} }
...@@ -280,7 +290,7 @@ public class Acp6Service { ...@@ -280,7 +290,7 @@ public class Acp6Service {
* @return<br> * @return<br>
* @throws IOException * @throws IOException
*/ */
public static String base64Decode(String base64Str, String encoding){ public String base64Decode(String base64Str, String encoding){
return AcpService.base64Decode(base64Str, encoding); return AcpService.base64Decode(base64Str, encoding);
} }
} }
...@@ -2,6 +2,8 @@ package com.liquidnet.service.dragon.channel.unionpay.sdk; ...@@ -2,6 +2,8 @@ package com.liquidnet.service.dragon.channel.unionpay.sdk;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
...@@ -16,8 +18,13 @@ import static com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConstants.*; ...@@ -16,8 +18,13 @@ import static com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConstants.*;
* @date 2018-12-10 下午2:44:37 * @date 2018-12-10 下午2:44:37
*/ */
@Slf4j @Slf4j
@Component
public class QrcService { public class QrcService {
@Autowired
private SDKConfig sdkConfig;
@Autowired
private CertUtil certUtil;
/** /**
* 请求报文签名(使用配置文件中配置的私钥证书或者对称密钥签名)<br> * 请求报文签名(使用配置文件中配置的私钥证书或者对称密钥签名)<br>
* 功能:对请求报文进行签名,并计算赋值certid,signature字段并返回<br> * 功能:对请求报文进行签名,并计算赋值certid,signature字段并返回<br>
...@@ -25,8 +32,8 @@ public class QrcService { ...@@ -25,8 +32,8 @@ public class QrcService {
* @param encoding 上送请求报文域encoding字段的值<br> * @param encoding 上送请求报文域encoding字段的值<br>
* @return 签名后的map对象<br> * @return 签名后的map对象<br>
*/ */
public static Map<String, String> sign(Map<String, String> reqData,String encoding) { public Map<String, String> sign(Map<String, String> reqData,String encoding) {
return signByCertInfo(reqData, SDKConfig.getConfig().getSignCertPath(), SDKConfig.getConfig().getSignCertPwd(), encoding); return signByCertInfo(reqData, sdkConfig.getSignCertPath(), sdkConfig.getSignCertPwd(), encoding);
} }
/** /**
...@@ -38,7 +45,7 @@ public class QrcService { ...@@ -38,7 +45,7 @@ public class QrcService {
* @param encoding 上送请求报文域encoding字段的值<br> * @param encoding 上送请求报文域encoding字段的值<br>
* @return 签名后的map对象<br> * @return 签名后的map对象<br>
*/ */
public static Map<String, String> signByCertInfo(Map<String, String> reqData, String certPath, public Map<String, String> signByCertInfo(Map<String, String> reqData, String certPath,
String certPwd, String encoding) { String certPwd, String encoding) {
Map<String, String> data = SDKUtil.filterBlank(reqData); Map<String, String> data = SDKUtil.filterBlank(reqData);
...@@ -65,11 +72,11 @@ public class QrcService { ...@@ -65,11 +72,11 @@ public class QrcService {
if (QRC_SIGNTYPE_SHA256WITHRSA.equals(signType) if (QRC_SIGNTYPE_SHA256WITHRSA.equals(signType)
|| "0420000903".equals(reqType) || "0420000903".equals(reqType)
|| "0410000903".equals(reqType)) { || "0410000903".equals(reqType)) {
data.put(SDKConstants.param_certId, CertUtil.getCertIdByKeyStoreMap(certPath, certPwd)); data.put(SDKConstants.param_certId, certUtil.getCertIdByKeyStoreMap(certPath, certPwd));
data.put(SDKConstants.param_signature, SDKUtil.signRsa2(data, certPath, certPwd, encoding)); data.put(SDKConstants.param_signature, SDKUtil.signRsa2(data, certPath, certPwd, encoding));
return data; return data;
} else if (QRC_SIGNTYPE_SHA1WITHRSA.equals(signType)) { } else if (QRC_SIGNTYPE_SHA1WITHRSA.equals(signType)) {
data.put(SDKConstants.param_certId, CertUtil.getCertIdByKeyStoreMap(certPath, certPwd)); data.put(SDKConstants.param_certId, certUtil.getCertIdByKeyStoreMap(certPath, certPwd));
data.put(SDKConstants.param_signature, SDKUtil.signRsa(data, certPath, certPwd, encoding)); data.put(SDKConstants.param_signature, SDKUtil.signRsa(data, certPath, certPwd, encoding));
return data; return data;
} else if (QRC_SIGNTYPE_SM3WITHSM2.equals(signType)) { } else if (QRC_SIGNTYPE_SM3WITHSM2.equals(signType)) {
...@@ -91,14 +98,14 @@ public class QrcService { ...@@ -91,14 +98,14 @@ public class QrcService {
* @param encoding 上送请求报文域encoding字段的值<br> * @param encoding 上送请求报文域encoding字段的值<br>
* @return true 通过 false 未通过<br> * @return true 通过 false 未通过<br>
*/ */
public static boolean validate(Map<String, String> resData, String encoding) { public boolean validate(Map<String, String> resData, String encoding) {
log.info("验签处理开始"); log.info("验签处理开始");
if (SDKUtil.isEmpty(encoding)) { if (SDKUtil.isEmpty(encoding)) {
encoding = "UTF-8"; encoding = "UTF-8";
} }
String certId = resData.get(SDKConstants.param_certId); String certId = resData.get(SDKConstants.param_certId);
log.info("对返回报文串验签使用的验签公钥序列号:[" + certId + "]"); log.info("对返回报文串验签使用的验签公钥序列号:[" + certId + "]");
PublicKey verifyKey = CertUtil.getValidatePublicKey(certId); PublicKey verifyKey = certUtil.getValidatePublicKey(certId);
if(verifyKey == null) { if(verifyKey == null) {
log.error("未找到此序列号证书。"); log.error("未找到此序列号证书。");
return false; return false;
...@@ -185,8 +192,8 @@ public class QrcService { ...@@ -185,8 +192,8 @@ public class QrcService {
* 获取敏感信息加密证书的物理序列号<br> * 获取敏感信息加密证书的物理序列号<br>
* @return * @return
*/ */
public static String getEncryptCertId(){ public String getEncryptCertId(){
return CertUtil.getEncryptCert().certId; return certUtil.getEncryptCert().certId;
} }
/** /**
......
...@@ -19,6 +19,8 @@ import lombok.extern.slf4j.Slf4j; ...@@ -19,6 +19,8 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.binary.Hex;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
...@@ -39,8 +41,10 @@ import static com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConstants.*; ...@@ -39,8 +41,10 @@ import static com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConstants.*;
* @date 2016-7-22 下午4:06:18 * @date 2016-7-22 下午4:06:18
*/ */
@Slf4j @Slf4j
@Component
public class SDKUtil { public class SDKUtil {
@Autowired
private CertUtil certUtil;
/** /**
* 全渠道5.0、二维码signType=01用。 * 全渠道5.0、二维码signType=01用。
* 1. 按ascii排序。【注意不是字母顺序】 * 1. 按ascii排序。【注意不是字母顺序】
...@@ -55,14 +59,14 @@ public class SDKUtil { ...@@ -55,14 +59,14 @@ public class SDKUtil {
* @param encoding * @param encoding
* @return * @return
*/ */
public static String signRsa(Map<String, String> data, String certPath, String certPwd, String encoding) { public String signRsa(Map<String, String> data, String certPath, String certPwd, String encoding) {
try{ try{
String stringData = createLinkString(data, true, false, encoding); String stringData = createLinkString(data, true, false, encoding);
log.info("打印排序后待签名请求报文串(交易返回11验证签名失败时可以用来同正确的进行比对):[" + stringData + "]"); log.info("打印排序后待签名请求报文串(交易返回11验证签名失败时可以用来同正确的进行比对):[" + stringData + "]");
byte[] sha1 = SecureUtil.sha1(stringData.getBytes(encoding)); byte[] sha1 = SecureUtil.sha1(stringData.getBytes(encoding));
String sha1Hex = byteArrayToHexString(sha1).toLowerCase(); String sha1Hex = byteArrayToHexString(sha1).toLowerCase();
log.info("sha1结果(交易返回11验证签名失败可以用来同正确的进行比对):[" + sha1Hex + "]"); log.info("sha1结果(交易返回11验证签名失败可以用来同正确的进行比对):[" + sha1Hex + "]");
return Base64.encodeBase64String(SecureUtil.getSignature(CertUtil.getSignCertPrivateKeyByStoreMap(certPath, certPwd), sha1Hex.getBytes())); return Base64.encodeBase64String(SecureUtil.getSignature(certUtil.getSignCertPrivateKeyByStoreMap(certPath, certPwd), sha1Hex.getBytes()));
} catch (Exception e) { } catch (Exception e) {
log.error("calcSignRsa Error", e); log.error("calcSignRsa Error", e);
return null; return null;
...@@ -83,14 +87,14 @@ public class SDKUtil { ...@@ -83,14 +87,14 @@ public class SDKUtil {
* @param encoding * @param encoding
* @return * @return
*/ */
public static String signRsa2(Map<String, String> data, String certPath, String certPwd, String encoding) { public String signRsa2(Map<String, String> data, String certPath, String certPwd, String encoding) {
try { try {
String stringData = createLinkString(data, true, false, encoding); String stringData = createLinkString(data, true, false, encoding);
log.info("打印排序后待签名请求报文串(交易返回11验证签名失败时可以用来同正确的进行比对):[" + stringData + "]"); log.info("打印排序后待签名请求报文串(交易返回11验证签名失败时可以用来同正确的进行比对):[" + stringData + "]");
byte[] sha256 = SecureUtil.sha256(stringData.getBytes(encoding)); byte[] sha256 = SecureUtil.sha256(stringData.getBytes(encoding));
String sha256Hex = byteArrayToHexString(sha256).toLowerCase(); String sha256Hex = byteArrayToHexString(sha256).toLowerCase();
log.info("sha256(交易返回11验证签名失败可以用来同正确的进行比对):[" + sha256Hex + "]"); log.info("sha256(交易返回11验证签名失败可以用来同正确的进行比对):[" + sha256Hex + "]");
return Base64.encodeBase64String(SecureUtil.getSignatureSHA256(CertUtil.getSignCertPrivateKeyByStoreMap(certPath, certPwd), sha256Hex.getBytes())); return Base64.encodeBase64String(SecureUtil.getSignatureSHA256(certUtil.getSignCertPrivateKeyByStoreMap(certPath, certPwd), sha256Hex.getBytes()));
} catch (Exception e) { } catch (Exception e) {
log.error("calcSignRsa2 Error", e); log.error("calcSignRsa2 Error", e);
return null; return null;
...@@ -426,15 +430,15 @@ public class SDKUtil { ...@@ -426,15 +430,15 @@ public class SDKUtil {
* @param certType * @param certType
* @return * @return
*/ */
public static int updateEncryptCert(String strCert, String certType ) { public int updateEncryptCert(String strCert, String certType ) {
if (isEmpty(strCert) || isEmpty(certType)) if (isEmpty(strCert) || isEmpty(certType))
return -1; return -1;
if (CERTTYPE_01.equals(certType)) { if (CERTTYPE_01.equals(certType)) {
// 更新敏感信息加密公钥 // 更新敏感信息加密公钥
return CertUtil.resetEncryptCertPublicKey(strCert); return certUtil.resetEncryptCertPublicKey(strCert);
} else if (CERTTYPE_02.equals(certType)) { } else if (CERTTYPE_02.equals(certType)) {
// 更新pin敏感信息加密公钥 // 更新pin敏感信息加密公钥
return CertUtil.resetPinEncryptCertPublicKey(strCert); return certUtil.resetPinEncryptCertPublicKey(strCert);
} else { } else {
log.info("unknown cerType:"+certType); log.info("unknown cerType:"+certType);
return -1; return -1;
......
package com.liquidnet.service;
import com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConfig;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: TestSdkConfig
* @Package com.liquidnet.service
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/11/9 10:57
*/
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class TestSdkConfig {
@Autowired
private SDKConfig sdkConfig;
@Test
public void pringSdkConfigInfo(){
System.out.println(sdkConfig.getFileTransUrl());
System.out.println(sdkConfig.getSignCertPath());
System.out.println(sdkConfig.getSignCertPwd());
System.out.println(sdkConfig.getSignCertType());
System.out.println(sdkConfig.getEncryptCertPath());
System.out.println(sdkConfig.getMiddleCertPath());
System.out.println(sdkConfig.getRootCertPath());
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment