http://www.ChinaPay.com NetPayClient用户手册
参数说明:
String SignMsg 用于要签名的字符串 返回值:
String CheckValue[256]即NetPayClient根据上述输入参数生成的商户数字签名,长度为256字节的 字符串。
注:该方法在类chinapay. SecureLink中。
? 对一段字符串的签名验证函数verifyAuthToken
方法说明:
public boolean verifyAuthToken (String PlainData, String CheckValue) 作用:
验证目标字符串的数字签名是否正确。 参数说明:
String PlainData 用于数字签名的字符串。
String CheckValue 校验值,要验证的字符串的数字签名,长度为256字节的字符串。 返回值:
true 表示验证通过成功;否则表示失败。 注:该方法在类chinapay. SecureLink中。
3.5.3.1 使用示例代码
(以下代码未经测试,仅供参考)
? 签名示例代码
//初始化key文件:
chinapay.PrivateKey key=new chinapay.PrivateKey(); chinapay.SecureLink t; boolean flag;
String MerId, OrdId, TransAmt, CuryId, TransDate, TransType,ChkValue; String plainData, ChkValue2 ;
flag=key.buildKey(MerId,0,\ if (flag==false) {
System.out.println(\ return; }
t=new chinapay.SecureLink (key); // 对订单的签名
ChkValue= t.signOrder(MerId, OrdId, TransAmt, CuryId, TransDate, TransType) ; // 对一段字符串的签名 plainData = \ChkValue2 = t.sign(plainData) ;
第 11 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
? 验证签名示例代码
chinapay.PrivateKey key=new chinapay.PrivateKey(); chinapay.SecureLink t; boolean flag; boolean flag1;
String MerId, OrdId, TransAmt, CuryId, TransDate, TransType,ChkValue; String plainData, ChkValue2
flag=key.buildKey(\ if (flag==false) {
msg=\ return; }
t=new chinapay.SecureLink (key);
flag1=t.verifyTransResponse(MerId,OrdId, TransAmt, CuryId, TransDate, TransType, OrderStatus, ChkValue); // ChkValue为ChinaPay应答传回的域段
if(flag1!=0) { }
//签名验证错误处理
// 对一段字符串的签名验证 plainData = \
flag1 = t. verifyAuthToken (plainData, ChkValue2) ; // ChkValue2为ChinaPay应答传回的域段 if(flag1) {
//签名验证错误处理 }
3.5.3. NetPayClient for Win32使用说明
3.5.3.2 核心文件清单 名 称 ChinaPay.dll netpay.dll 安装后所在的路径 安装时自选(如c:\\netpay) 与Chinapay.dll同一个目录下 也可放在在windows系统路径下的system32目录下(c:\\windows\\system for win95,98,etc) 安装时自选(如c:\\netpay) 可拷贝至windows路径下,如:c:\\winnt 第 12 页 共 27 页
用 途 采用COM方式对netpay.dll的方法封装,需要用regsvr32注册 提供定单签名及验证ChinaPay签名的函数 netpay.lib MerPrk.key 程序调用netpay.dll函数编译时须连接此文件 商户签名私钥 http://www.ChinaPay.com NetPayClient用户手册
for NT或c:\\windows for win95,98 也可以放置到任意路径下,但是需要调用方法指定文件位置和名称 PgPubk.key 可拷贝至windows路径下c:\\winnt for NT或c:\\windows for win95,98 也可以放置到任意路径下,但是需要调用方法指定文件位置和名称 ChinaPay签名公钥 ? 安装程序
将netpay for NT.zip解开后运行setup.exe.,安装程序会将指定文件复制到指定目录下。
? 手动安装
如果安装程序运行后出错 (可能是由于系统环境异常导致),可采用手工安装的方法,具体步骤如下:
将核心文件拷贝到相应的目录下;
注册ChinaPay.dll (在命令行里键入regsvr32 [gensign的路径],此控件需要VC环境。建议是用Dependency Walker看一下系统是否包含有所需的DLL) ;
3.5.3.3 方法说明
? 设置私钥路径setMerKeyFile
方法说明:
void setMerKeyFile (String KeyFile) 作用:
设置商户私钥所在的位置。 参数说明:
String KeyFile 秘钥的文件路径(包含文件名称)。例如:\MerPrk.key”
? 取消设置私钥路径unsetMerKeyFile
void unsetMerKeyFile () 作用:
取消原先商户私钥所在的位置。恢复默认路径的秘钥文件位置。 参数说明: 无
? 设置ChinaPay公钥路径setPubKeyFile
方法说明:
void setPubKeyFile (String KeyFile) 作用:
设置ChinaPay公钥所在的位置。 参数说明:
String KeyFile ChinaPay公钥的文件路径(包含文件名称)。例如:\”
第 13 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
? 取消设置公钥路径unsetPubKeyFile
void unsetPubKeyFile () 作用:
取消原先调用setPubKeyFile设置的ChinaPay公钥所在的位置。恢复默认路径的公钥文件位置。 参数说明: 无
? 订单签名函数sign
方法说明:
public String sign (String MerId, String OrdId, String TransAmt, String CuryId, String TransDate, String TransType)
参数说明:
String MerId 商户号,长度为15个字节的数字串,由ChinaPay或清算银行分配。
String OrdId 订单号,长度为16个字节的数字串,由商户系统生成,失败的订单号允许重复支付。 String TransAmt 交易金额,长度为12个字节的数字串,例如:数字串\表示12.34元。 String CuryId
货币代码, 长度为3个字节的数字串,目前只支持人民币,取值为\。
String TransDate 交易日期,长度为8个字节的数字串,表示格式为:YYYYMMDD。
String TransType 交易类型,长度为4个字节的数字串,取值范围为:\和\, 其中\表示消费交易,\表示退货交易。
返回值:
String CheckValue[256] 即NetPayClient根据上述输入参数生成的商户数字签名,长度为256字节的字符串。
注:如果不采用COM方式调用,而采用LoadLibrary装载netpay.dll的调用时方法名称为需要通过Dependency Walker来查看对应名称。
? 验证交易应答函数check
方法说明:
public boolean check(String MerId, String OrdId, String TransAmt, String CuryId, String TransDate, String TransType, String OrderStatus, String CheckValue)
参数说明: String MerId String OrdId String CuryId
商户号,长度为15个字节的数字串,由ChinaPay分配。
订单号,长度为16个字节的数字串,由商户系统生成,失败的订单号允许重复支付。 货币代码, 长度为3个字节的数字串,目前只支持人民币,取值为\。
String TransAmt 交易金额,长度为12个字节的数字串,例如:数字串\表示12.34元。 String TransDate 交易日期,长度为8个字节的数字串,表示格式为: YYYYMMDD。
String TransType 交易类型,长度为4个字节的数字串,取值范围为:\和\, 其中\表示消费交易,\表示退货交易。
String OrderStatus 交易状态,长度为4个字节的数字串。详见交易状态码说明。
String CheckValue 校验值,即ChinaPay对交易应答的数字签名,长度为256字节的字符串。 返回值:
true 表示成功,即该交易应答为ChinaPay所发送,商户根据“交易状态”进行后续处理;否则表示失败,即无效应答,商户可忽略该应答。
第 14 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
注:
如果采用COM方式调用,方法返回值为字符串形式的“0”表示验签成功。
如果不采用COM方式调用,而采用LoadLibrary装载netpay.dll的调用时方法名称为需要通过Dependency Walker来查看对应名称。方法的返回值为true表示验签成功。
? 对一段字符串的签名函数signData
方法说明:
public String signData (String MerId, String SignMsg) 参数说明:
String MerId 商户号,长度为15个字节的数字串,由ChinaPay分配。 String SignMsg 用于要签名的字符串 返回值:
String CheckValue[256]即NetPayClient根据上述输入参数生成的商户数字签名,长度为256字节的 字符串。
注:如果不采用COM方式调用,而采用LoadLibrary装载netpay.dll的调用时方法名称为需要通过Dependency Walker来查看对应名称。
? 对一段字符串的签名验证函数checkData
方法说明:
public boolean checkData (String PlainData, String CheckValue) 参数说明:
String PlainData 用于数字签名的字符串。
String CheckValue 校验值,要验证的字符串的数字签名,长度为256字节的字符串。 返回值:
true 表示验证通过成功;否则表示失败。 注:
如果采用COM方式调用,方法返回值为字符串形式的“0”表示验签成功。
如果不采用COM方式调用,而采用LoadLibrary装载netpay.dll的调用时方法名称为需要通过Dependency Walker来查看对应名称。方法的返回值为true表示验签成功。
3.5.3.4 使用示例代码
以C#为例说明调用方法:
首先将Com类型信息转换为.NET元数据
tlbimp ChinaPay.dll /out: ChinaPay_tsl.dll (tlbimp 为vs.net提供的工具)
其次项目工程中,在project->add reference里,选择com,将ChinaPay_tsl.dll引入。
(以下代码未经测试,仅供参考)
? 签名示例代码
using System; using ChinaPay_tsl;
namespace ConsoleApplication1
第 15 页 共 27 页