http://www.ChinaPay.com NetPayClient用户手册
char MerId[16];
char OrdId[17]; char TransAmt[13]; char CuryId[4]; char TransDate[9]; char TransType[5];
setPubKeyFile (\ //如果不设置则按照NPCDIR环境变量取文件
// 取得ChinaPay传回的数据 MerId, OrdId, TransAmt, CuryId, TransDate, TransType OrderStatus ,ChkValue
// 对验证订单的签名 flag
=
verifyTransResponse(MerId,
OrdId,
TransAmt,
CuryId,
TransDate,
TransType,
OrderStatus ,ChkValue);
if(flag != 0) { }
// 对一段字符串的签名 plainData = \
flag = verifySignData (plainData, ChkValue); // ChkValue为ChinaPay传回的签名 if(flag != 0) { } }
//签名失败 //签名失败 char ChkValue[257]; char OrderStatus[5]; int flag;
4. 支付
4.1. 目标
本章节主要指导ChinaPay的会员商户接入支付平台,以方便商户开展网上支付交易。
4.2. 交易流程
第 21 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
4.3. 接入方法
4.3.1. 接入地址
ChinaPay的网上支付服务采用WEB服务的方式允许商户接入,接收交易数据的地址为: 测试环境:http://payment-test.chinapay.com/pay/TransGet 生产环境:https://payment.chinapay.com/pay/TransGet
4.3.2. 接入版本
目前ChinaPay的支付接入版本有2个 ? 20040916 ? 20070129
这两个支付版本的提交域段内容相同,但是不同的版本会有所差别,请注意每个版本后的说明。
4.3.2.1 支付版本 20040916
? 交易提交数据内容
商户向ChinaPay的支付接入地址提交订单信息,提交页面中表单(FORM)的应该包括如下(注意各字段的大小写):
说明:
PageRetUrl为页面接受应答地址,用于引导使用者返回支付后的商户网站页面。
BgRetUrl 为后台接受应答地址,用于商户记录交易信息和处理,对于使用者是不可见的。另外ChinaPay会根据后台发送的http的返回码来判定是否重新发送后台应答流水,以确保后台应答的接收。
Priv1为可选项,表示 “商户私有域”,商户通过此字段向Chinapay发送的信息,Chinapay依原样填充返回给商户。
GateId为可选项,表示 “支付网关号”,如填写GateId(支付网关号),则消费者将直接进入支付页面,否则进入网关选择页面。
OrdId,表示 “订单号”,在支付版本为20040916的版本中,如果商户为二级商户,即商户号的前6位为808080的,订单号必须满足如下规则:
订单号从第5位到第9位必须和商户号的第11位到第15位相同。
? 交易数据的数字签名
商户发送给ChinaPay的交易数据均需要进行数字签名。对于版本号为20040916的签名数据使用客户端NetPayClient的“订单签名函数”。方法名称为:
NetPayClient for Java :signOrder (详细内容参见3.5.2章节) NetPayClient for Win32 :sign(详细内容参见3.5.3章节) NetPayClient for C :signOrder(详细内容参见3.5.4章节)
? 交易接收数据的内容
当消费支付交易完成时,ChinaPay会将交易应答信息发送给商户,对于页面易接收地址和后台交易接收地址都会收到交易接收数据,应答的数据域段包括如下内容:(以页面Form数据为例,注意大小写,后台应答数据的发送的域段名和下面的一致)
说明:
status 表示交易转态,只有\的时候才为交易成功,其他均为失败,因此在验证签名数据为ChinaPay发出的以后,还需要判定交易状态代码为\。
? 应答数据的签名验证
当消费支付交易完成时,ChinaPay会将交易应答信息发送给商户,对于页面交易
第 23 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
接收地址和后台交易接收地址都会收到交易接收数据,而对于接收到的应答数据,商户需要对其验证签名以确定是由ChinaPay发出的应答数据。使用的客户端NetPayClient的“验证交易应答函数”。方法名称为:
NetPayClient for Java :verifyTransResponse (详细内容参见3.5.2章节) NetPayClient for Win32 :check(详细内容参见3.5.3章节) NetPayClient for C :verifyTransResponse (详细内容参见3.5.4章节) 4.3.2.2 支付版本 20070129
? 交易提交数据内容
商户向ChinaPay的支付接入地址提交订单信息,提交页面中表单(FORM)的应该包括如下(注意各字段的大小写):
说明:
PageRetUrl为页面接受应答地址,用于引导使用者返回支付后的商户网站页面。
BgRetUrl 为后台接受应答地址,用于商户记录交易信息和处理,对于使用者是不可见的。另外ChinaPay会根据后台发送的http的返回码来判定是否重新发送后台应答流水,以确保后台应答的接收。
Priv1表示 “商户私有域”,在支付版本20070129中会参与数字签名,商户通过此字段向Chinapay发送的信息,Chinapay依原样填充返回给商户。
GateId为可选项,表示 “支付网关号”,如填写GateId(支付网关号),则消费者将直接进入支付页面,
第 24 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
否则进入网关选择页面。
OrdId,表示 “订单号”, 该域段的内容可以完全由用户自己定义。
? 交易数据的数字签名
商户发送给ChinaPay的交易数据均需要进行数字签名。对于版本号为20070129的签名数据使用客户端NetPayClient的“对一段字符串的签名函数”。方法名称为:
NetPayClient for Java :sign (详细内容参见3.5.2章节) NetPayClient for Win32 :sign(详细内容参见3.5.3章节) NetPayClient for C :signData (详细内容参见3.5.4章节)
说明:
对于版本为20070129的数字签名采用的是对一段字符串的签名,因此在签名的时候需要按照一定
顺序拼接字符串,顺序如下表:
MerId OrdId TransAmt CuryId TransDate TransType Priv1 ? 交易接收数据的内容
当消费支付交易完成时,ChinaPay会将交易应答信息发送给商户,对于页面易接收地址和后台交易接收地址都会收到交易接收数据,应答的数据域段包括如下内容:(以页面Form数据为例,注意大小写,后台应答数据的发送的域段名和下面的一致)
说明:
status 表示交易转态,只有\的时候才为交易成功,其他均为失败,因此在验证签名数据为ChinaPay发出的以后,还需要判定交易状态代码为\。
? 应答数据的签名验证
当消费支付交易完成时,ChinaPay会将交易应答信息发送给商户,对于页面交易接收地址和后台交易接收地址都会收到交易接收数据,而对于接收到的应答数据,商户需要对其验证签名以确定是由ChinaPay发出的应答数据。使用的NetPayClient的“验证交易应答函数”。方法名称为:
NetPayClient for Java :verifyTransResponse (详细内容参见3.5.2章节) NetPayClient for Win32 :check(详细内容参见3.5.3章节) NetPayClient for C :verifyTransResponse (详细内容参见3.5.4章节)
第 25 页 共 27 页