http://www.ChinaPay.com NetPayClient用户手册
{
class Class1 {
[STAThread]
public static void Main() { //签名
NetPayClientClass a = new NetPayClientClass(); //设置密钥文件地址
a.setMerKeyFile(\ MerPrK.key\ // 如果不调用此方法,则按照默认目录处理 String ChkValue; String MerId; //商户号 //对订单的签名
ChkValue= a.sign(MerId,\ // 对一段字符串的签名 String ChkValue2;
String plainData = \ ChkValue2= a.signData(MerId,plainData); } } }
? 验证签名示例代码
using System; using ChinaPay_tsl;
namespace ConsoleApplication1 {
class Class1 {
[STAThread]
public static void Main() {
//验证签名
NetPayClientClass a = new NetPayClientClass(); //设置密钥文件地址
a.setPubKeyFile(\ // 如果不调用此方法,则按照默认目录处理 String ChkValue; String MerId; //商户号 //对订单的签名 string
flag
=
a.check(MerId,\ ChkValue); // ChkValue 为ChinaPay返回给商户的域段内容
第 16 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
// 对一段字符串的签名 String ChkValue2;
String plainData = \ChkValue2= a.signData(MerId,plainData); } }
}
3.5.4. NetPayClient for C使用说明
3.5.4.1. 核心文件清单 名 称 netpayclient.h libnpc.so / libnpc.a 所在的路径 用户自己决定放置位置 用户自己决定放置位置 用 途 用于C等开发语言的引用头文件 签名数据和验证签名的主体方法库(根据自己情况申请.so还是.a) MerPrk.key 设置NPCDIR环境变量指定文件位商户签名私钥 置,但是不能更改文件名 也可以不指定NPCDIR环境变量,但是需要调用方法指定文件位置和名称 设置NPCDIR环境变量指定文件位ChinaPay签名公钥 置,但是不能更改文件名 也可以不指定NPCDIR环境变量,但是需要调用方法指定文件位置和名称 PgPubk.key 3.5.4.2. 方法说明
? 设置私钥路径setMerKeyFile
方法说明:
void setMerKeyFile (char keyFile[256]) 作用:
设置商户私钥所在的位置。 参数说明:
char KeyFile 秘钥的文件路径(包含文件名称)。例如:\MerPrk.key”
? 取消设置私钥路径unsetMerKeyFile
void unsetMerKeyFile () 作用:
取消原先商户私钥所在的位置。恢复默认路径的秘钥文件位置。
第 17 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
参数说明: 无
? 设置商户公钥路径setPubKeyFile
方法说明:
void setPubKeyFile (char keyFile[256]) 作用:
设置ChinaPay公钥所在的位置。 参数说明:
char keyFile ChinaPay公钥的文件路径(包含文件名称)。例如:\”
? 取消设置公钥路径unsetPubKeyFile
void unsetPubKeyFile () 作用:
取消原先调用setPubKeyFile设置的ChinaPay公钥所在的位置。恢复默认路径的公钥文件位置。 参数说明: 无
? 订单签名函数signOrder 函数说明:
int signOrder(char MerId[15], char OrdId[16], char TransAmt[12], char CuryId[3], char TransDate[8], char TransType[4], char CheckValue[256])
作用:
对传入的参数进行数字签名。 参数说明: char MerId[15] char OrdId[16] 支付。
char TransAmt[12] 元。
char CuryId[3] char TransDate[8] char TransType[4]
货币代码, 长度为3个字节的数字串,目前只支持人民币,取值为\。 交易日期,长度为8个字节的数字串,表示格式为: YYYYMMDD。 交易类型,长度为4个字节的数字串,取值范围为:\和\, 其中\交易金额,长度为12个字节的数字串,例如:数字串\表示12.34商户号,长度为15个字节的数字串,由ChinaPay分配。
订单号,长度为16个字节的数字串,由商户系统生成,失败的订单号允许重复
表示消费交易,\表示退货交易。
char CheckValue[256] 校验值,即NetPayClient根据上述输入参数生成的商户数字签名,长度为256字节的字符串。
返回值:
0表示签名成功,否则表示失败。
? 验证交易应答函数verifyTransRespons
方法说明:
int verifyTransResponse(char MerId[15], char OrdId[16], char TransAmt[12], char CuryId[3], char TransDate[8], char TransType[4], char OrderStatus[4], char CheckValue[256])
第 18 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
作用:
验证传入参数的数字签名是否正确。 参数说明:
char MerId[15] 商户号,长度为15个字节的数字串,由ChinaPay分配。
char OrdId[16] 订单号,长度为16个字节的数字串,由商户系统生成,失败的订单号允许重复支付。 char TransAmt[12] 交易金额,长度为12个字节的数字串,例如:数字串\表示12.34元。 char CuryId[3] 货币代码, 长度为3个字节的数字串,目前只支持人民币,取值为\。 char TransDate[8] char TransType[4]
交易日期,长度为8个字节的数字串,表示格式为: YYYYMMDD。 交易类型,长度为4个字节的数字串,取值范围为:\和\, 其中\
表示消费交易,\表示退货交易。
char OrderStatus[4] 交易状态,长度为4个字节的数字串。详见交易状态码说明。
char CheckValue[256] 校验值,即ChinaPay对交易应答的数字签名,长度为256字节的字符串。 返回值:
0表示成功,即该交易应答为ChinaPay所发送,商户根据“交易状态”进行后续处理;否则表示失败,即无效应答,商户可忽略该应答。
? 对一段字符串的签名函数signData
方法说明:
int signData (char MerId[15],char *SignMsg,char ChkValue[256]) 作用:
对传入的参数字符串进行数字签名。 参数说明:
char MerId[15] 商户号,长度为15个字节的数字串,由ChinaPay分配。 char *SignMsg 用于要签名的字符串
char CheckValue[256]即NetPayClient根据上述输入参数生成的商户数字签名,长度为256字节的 字符串。
返回值:
0 表时签名成功,其他为对应错误代码
? 对一段字符串的签名验证函数verifySignData
方法说明:
int verifySignData (char * PlainData, char CheckValue[256]) 作用:
验证目标字符串的数字签名是否正确。 参数说明:
char* PlainData 用于数字签名的字符串。
char CheckValue[256] 校验值,要验证的字符串的数字签名,长度为256字节的字符串。 返回值:
0表示成功,即该交易应答为ChinaPay所发送,商户根据“交易状态”进行后续处理;否则表示失败,即无效应答,商户可忽略该应答。
第 19 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
3.5.3.5 使用示例代码
? 签名示例代码
(以下代码未经测试,仅供参考) #include
int main (int argc, char* argv[]) {
char MerId[16]; char OrdId[17]; char TransAmt[13]; char CuryId[4]; char TransDate[9]; char TransType[5];
setMerKeyFile(\ //如果不设置则按照NPCDIR环境变量取文件
// 对订单的签名
flag =signOrder(MerId, OrdId, TransAmt, CuryId, TransDate, TransType, ChkValue); if(flag != 0) { }
// 对一段字符串的签名 plainData = \
flag = signData (MerId ,plainData, ChkValue); // ChkValue为该字符串的签名 if(flag != 0) { } }
//签名失败 //签名失败 char ChkValue[257]; int flag;
? 验证签名示例代码
(以下代码未经测试,仅供参考) #include
int main (int argc, char* argv[]) {
第 20 页 共 27 页