企业验签功能集成

目录

企业验签功能开发包集成指南

下载招行提供的验签功能组件并集成到商户系统中,就可以对报文进行验签操作。

在一网通支付模式下,需要用到该验签功能的API包括:取消支付协议接口、查询支付协议接口和银行端主动取消协议通知接口。

1、企业生成签名

使用企业私钥对签名原文进行签名。

//生成签名JAVA范例代码
public static char []certPassword = {'1','1','1'};
String sCertPath = "D:\\javaProj\\B2BFileCert\\selfissuedcert.jks";
String sOrder = "NTBNBR= N0004949&TRSCOD=CMCX&COMMID=1465293742&SIGTIM=201606071802220000&BUSDAT=PHhtbD48bWVyY2hfZGF0ZT4yMDE2MDYwNzwvbWVyY2hfZGF0ZT48bWVyY2hfdGltZT4xODAyMjI8L21lcmNoX3RpbWU+PG1lcmNoX3NlcmlhbD48IVtDREFUQVtTVEQyMDE2MDYwNzE2MDc0MjE0NV1dPjwvbWVyY2hfc2VyaWFsPjxjdXN0X2FyZ25vPjcwMDIwMTYwNjA3MTYwNzQyMTMxNDM8L2N1c3RfYXJnbm8+PC94bWw+";
//读取证书
byte []bPFXFile = null;             
File fCert = new File(sCertPath);
if(fCert.exists()){
    int iFileLen = (int)fCert.length();
    if(iFileLen==0){
        System.out.println("Cert file is empty:"+sCertPath);
        return;     
    }
    bPFXFile = new byte[iFileLen];
    FileInputStream fis = null;
    try{
        fis = new FileInputStream(sCertPath);
        fis.read(bPFXFile, 0, iFileLen);
        fis.close();                                    
    }catch(IOException ex){
        System.out.println("Read cert file error:"+sCertPath);
        return;
    }
}else{
    System.out.println("Cert file is not exist:"+sCertPath);
    return;
}

//初始化证书
B2BResult bRet = SelfIssuedCert.initCert(bPFXFile, certPassword);
if(bRet.isError()){
    System.out.println("Signature Error:"+bRet.getErrorMsg());
    return;
}

//签名
bRet = SelfIssuedCert.signature(sOrder.getBytes());
if(bRet.isError()){
    System.out.println("Signature Error:"+bRet.getErrorMsg());
}else{
    System.out.println("Signature Success:"+bRet.getResultBase64Str());
}

2、验证银行签名

验证签名需要招商银行企业网银公钥验证。企业网银公钥由招行提供。以下是范例代码。

//公钥验证签名JAVA范例代码

String sSource= "NTBNBR=N0004949&TRSCOD=CMCX&COMMID=1465293742&SIGTIM=201606071802220000&BUSDAT=PHhtbD48bWVyY2hfZGF0ZT4yMDE2MDYwNzwvbWVyY2hfZGF0ZT48bWVyY2hfdGltZT4xODAyMjI8L21lcmNoX3RpbWU+PG1lcmNoX3NlcmlhbD48IVtDREFUQVtTVEQyMDE2MDYwNzE2MDc0MjE0NV1dPjwvbWVyY2hfc2VyaWFsPjxjdXN0X2FyZ25vPjcwMDIwMTYwNjA3MTYwNzQyMTMxNDM8L2N1c3RfYXJnbm8+PC94bWw+";//签名原文(签名原文的实际内容请查看相应的接口说明)

String sSign= "ZZdn0W+cc9/p0tDXZxeTLhqli+zzuF15LOYXaCdpTnX9BLUx2mav+Q8tj3d68RxBxTbps4ue9tURgn2mwJoDtE/jfzgriV0nGqgTi2qj3RzAtNRRDNwo+m7dm7dsUDn5h22h79FvK81BPBITqAanxc3sf4xKtTgYRsExsSPE+xo=";//签名,对应返回报文里的SIGDAT字段内容

String sBase64PubKey = "MIGJAoGBANmziXwTPcXgwbSQXtFFIv6mfwybFUTed91fOPHp3esfwh8Ns281EtLRfRvmImc/IU7yxttSjUibjNfQzxcDTGee+IbKfkTqhxyLJRclGCiSmFZvkHBph1WGcuV1y12KYeglOTc0URAVq/eC7KBHniLe3KasNzyVa24bwRzNW7wXAgMBAAE="; //企业网银公钥BASE64字符串

//初始化公钥,验证签名
B2BResult bRet = FirmbankCert.initPublicKey(sBase64PubKey);
if(bRet.isError()){
	System.out.println("Init Public Key Error:"+bRet.getErrorMsg());
	return;
}	

bRet= FirmbankCert.verifySignatureByPubKey(sSource.getBytes(), sSign);
			
if(bRet.isError()){
	System.out.println("Verify Signature Error:"+bRet.getErrorMsg());
}else{
	System.out.println("Verify Signature Success");	
}

3、开发包函数说明

1、com.cmb.b2b.FirmbankCert.initPublicKey(byte[] bCert)

功能:初始化企业网银公钥

参数:bCert,base64编码格式的公钥

返回值类型:B2BResult

结果值:调用B2BResult的getResultCode ()方法获取公钥初始化信息

含义: B2bresult.getResultCode:0-成功,9-初始化异常

2、com.cmb.b2b.FirmbankCert.verifySignatureByPubKey(byte[] bData, String sSign)

功能:验证银行签名(公钥)

参数:bData,签名数据,sSign 签名结果

返回值类型:B2BResult

结果值:调用B2BResult的getResultCode ()方法获取验签结果

含义: B2bresult.getResultCode: 0-成功,1-输入参数非法,3-签名校验失败,9-签名校验异常

3、com.cmb.b2b.B2BResult.isError()

功能:判断是否有错误

参数:无

返回值类型:boolean

结果值:true、false

含义: true有错误,false无错误。

4、com.cmb.b2b.B2BResult.getResultBase64Str()

功能:获取结果的base64编码字符串,通常用来获取签名结果

参数:无

返回值类型:String

结果值:base64字符串

含义: 签名结果的base64字符串

5、com.cmb.b2b.B2BResult.getErrorMsg()

功能:获取错误信息

参数:无

返回值类型:String,

取值:错误信息

含义: 错误信息描述

6、com.cmb.b2b.B2BResult.getResultCode()

功能:获取错误代码

参数:无

返回值类型:int

取值&含义: 0-成功,1-输入参数非法,3-失败,9-异常

相关问题

我要提问    |    历史提问查询


*请输入您的问题:(500个字以内)

*请输入您的昵称:(10个字以内)

 

*请输入您的邮箱(查询依据):