methodName:icbc加密签名
public icbc icbcMD(TspResponseOrderInfo i) {
icbc result = new icbc();
ICBCTranData tranData = new ICBCTranData();
try {
//为空返回true
if (!StringUtils.isBlank(i.getPrice())) {
// double cny = Double.parseDouble(“0.01”) * 100;
double cny = Double.parseDouble(i.getPrice()) * 100;// 转换成Double
int amounts = (int) cny;
tranData.setAmount(String.valueOf(amounts));
}
if (!StringUtils.isBlank(i.getOrderId())) {
tranData.setOrderid(i.getOrderId());
}
if (!StringUtils.isBlank(i.getPacketName())) {
tranData.setGoodsName(i.getPacketName());
}
if (!StringUtils.isBlank(i.getPurchaseTime())) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(i.getPurchaseTime());
// Date date = formatter.parse(“2018-12-31 21:12:13”);
SimpleDateFormat formatter1 = new SimpleDateFormat(“yyyyMMddHHmmss”);
String dString = formatter1.format(date);
log.info(“订单产生时间:” + dString);
tranData.setOrderDate(dString);
}
if (!StringUtils.isBlank(i.getEffectEnd())) {
SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-MM-dd”);
Date date1= formatter.parse(i.getEffectEnd());
// Date date1 = formatter.parse(“2018-12-31”);
SimpleDateFormat formatter1 = new SimpleDateFormat(“yyyyMMddHHmmss”);
String dStrin = formatter1.format(date1);
log.info(“失效时间:” + dStrin);
tranData.setExpireTime(dStrin);
}
tranData.setMerID(MERID);
tranData.setMerAcct(MERACCT);
tranData.setShopAppID(APPID);
tranData.setMerVAR(MD5.encrypt16(CommentUtil.getUUID()));
tranData.setMerURL(CALLBACKICBC);
// tranData.setMerURL("");
StringBuilder strXml = new StringBuilder();
strXml.append("<?xml version=\"1.0\" encoding=\"GBK\" standalone=\"no\"?>");
strXml.append("<B2CReq>");
strXml.append("<interfaceName>" + tranData.getInterfaceName() + "</interfaceName>");
strXml.append("<interfaceVersion>" + tranData.getInterfaceVersion() + "</interfaceVersion>");
strXml.append("<orderInfo>");
strXml.append("<orderDate>" + tranData.getOrderDate() + "</orderDate>");
strXml.append("<orderid>" + tranData.getOrderid() + "</orderid>");
strXml.append("<amount>" + tranData.getAmount() + "</amount>");
strXml.append("<installmentTimes>" +"1"+ "</installmentTimes>");
strXml.append("<curType>" + "001" + "</curType>");
strXml.append("<merID>" + tranData.getMerID() + "</merID>");
strXml.append("<merAcct>" + tranData.getMerAcct() + "</merAcct>");
strXml.append("<expireTime>" + StringChangeUtil.removeNull(tranData.getExpireTime()) + "</expireTime>");
strXml.append("<unipassID>" + "" + "</unipassID>");
strXml.append("<shopAppID>" + tranData.getShopAppID() + "</shopAppID>");
strXml.append("<icbcappid>" + ""+ "</icbcappid>");
strXml.append("</orderInfo>");
strXml.append("<custom>");
strXml.append("<verifyJoinFlag>" + "0" + "</verifyJoinFlag>");
strXml.append("<Language>" + "zh_CN" + "</Language>");
strXml.append("</custom>");
strXml.append("<message>");
strXml.append("<goodsID>" + "" + "</goodsID>");
strXml.append("<goodsName>" + StringChangeUtil.removeNull(tranData.getGoodsName()) + "</goodsName>");
strXml.append("<goodsNum>" + "" + "</goodsNum>");
strXml.append("<carriageAmt>" + "" + "</carriageAmt>");
strXml.append("<merHint>" + "" + "</merHint>");
strXml.append("<remark1>" + "" + "</remark1>");
strXml.append("<remark2>" + "" + "</remark2>");
strXml.append("<merURL>" + tranData.getMerURL() + "</merURL>");
strXml.append("<merVAR>" + tranData.getMerVAR() + "</merVAR>");
strXml.append("<notifyType>" + "HS" + "</notifyType>");
strXml.append("<resultType>" + "1"+ "</resultType>");
strXml.append("<limitPay>" + "" + "</limitPay>");
strXml.append("<backup1>" + "" + "</backup1>");
strXml.append("<backup2>" + "" + "</backup2>");
strXml.append("<backup3>" + "" + "</backup3>");
strXml.append("<backup4>" + "" + "</backup4>");
strXml.append("<isSupportDISCOUFlag>" + "0" + "</isSupportDISCOUFlag>");
strXml.append("<thirdPartyFlag>" + "1" + "</thirdPartyFlag>");
strXml.append("</message>");
strXml.append("</B2CReq>");
System.out.println(strXml.toString());
icbc item = new icbc();
item.setTranData(strXml.toString());
log.info("产生的ml明文是进入字节加密" + strXml.toString());
// byte[] temp = ReturnValue.base64enc(strXml.toString().getBytes());
获取工商银行验证
// CBCPayOnline.getCheckInfo(icbcModel);
// icbcModel.setTranData(strXml.toString());
log.info("进入加密");
result = this.getBase64ICBC(item);
System.out.println("icbc:::::" + item.toString());
System.out.println("tranData:::::" + item.getTranData());
System.out.println("result:" + result);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
2 进行编码
public icbc getBase64ICBC(icbc item) {
String tranData = item.getTranData();
System.out.println("明文:" + tranData);
String password = PASSWORD;
String returnTransData = "";
String returnSignMsg = "";
String returnCert = "";
try {
byte[] byteSrc = tranData.getBytes();
char[] keyPass = password.toCharArray();
FileInputStream in1 = new FileInputStream(CRT);
byte[] bcert = new byte[in1.available()];
in1.read(bcert);
in1.close();
FileInputStream in2 = new FileInputStream(KEY);
byte[] bkey = new byte[in2.available()];
in2.read(bkey);
in2.close();
byte[] sign = ReturnValue.sign(byteSrc, byteSrc.length, bkey, keyPass);
if (sign == null) {
System.out.println("签名失败,签名返回为空。请检查证书私钥和私钥保护口令是否正确。");
} else {
System.out.println("签名成功");
byte[] transDataByte = ReturnValue.base64enc(tranData.getBytes("GBK"));
String transDataBase64 = new String(transDataByte).toString();
System.out.println("XML明文BASE64编码:" + transDataBase64);
byte[] EncSign = ReturnValue.base64enc(sign);
String SignMsgBase64 = new String(EncSign).toString();
System.out.println("签名信息BASE64编码:" + SignMsgBase64);
byte[] EncCert = ReturnValue.base64enc(bcert);
String CertBase64 = new String(EncCert).toString();
System.out.println("证书公钥BASE64编码:" + CertBase64);
returnTransData = transDataBase64;
returnSignMsg = SignMsgBase64;
returnCert = CertBase64;
}
} catch (Exception e) {
System.out.println(e);
}
icbc icbc = new icbc();
icbc.setTranData(returnTransData);
icbc.setMerCert(returnCert);
icbc.setMerSignMsg(returnSignMsg);
log.info("icbc是" + icbc);
return icbc;
}