将chinapay.jar安装到服务器的classpath下。将提供给SP的MerPrk.key和PgPubk.key文件复制到服务器上可以访问的路经下,例如/app/usr/chinapay/keys。
初始化key文件。方法如下:
chinapay.PrivateKey key=new chinapay.PrivateKey();
chinapay.SecureLink t;
boolean flag;
flag=key.buildKey(MerId,0,"app/usr/chinapay/keys/MerPrk.key");
if (flag==false) {
System.out.println("build key error!");
return;
}
t=new chinapay.SecureLink (key)
○方法说明:
public String signOrder(String MerId, String OrdId, String TransAmt, String CuryId, String
TransDate, String TransType)
参数说明:
String MerId - 商户号,长度为15 个字节的数字串,由ChinaPay 或清算银行分配。
String OrdId - 订单号,长度为16 个字节的数字串,由商户系统生成,失败的订单号允
许重复支付。
String TransAmt - 交易金额,长度为12 个字节的数字串,例如:数字串"000000001234"
表示12.34 元。
String CuryId - 货币代码, 长度为3 个字节的数字串,目前只支持人民币,取值为"156" 。
String TransDate - 交易日期,长度为8 个字节的数字串,表示格式为:YYYYMMDD。
String TransType - 交易类型,长度为4 个字节的数字串,取值范围为:"0001"和"0002",
其中"0001"表示消费交易,"0002"表示退货交易。
返回值:
String CheckValue[256] - 即NetPayClient 根据上述输入参数生成的商户数字签名,长度
为256 字节的字符串。
○ 使用说明
商户在向消费者发送订单确认页面之前, 调用signOrder函数或方法产生订单签名
(CheckValue),然后生成订单确认页面(由SP生成),供消费者再次确认订单的内容,并允许消费者选
择支付或取消订单。订单确认页面中表单(FORM)的具体例子如下(注意各字段的大小写):
<form action="http://payment.chinapay.com:8081/pay/TransGet" METHOD=POST>
<input type=hidden name="MerId" value="123451234512345">
<input type=hidden name="OrdId" value="0000000000000001">
<input type=hidden name="TransAmt" value="000000001234">
<input type=hidden name="CuryId" value="156">
<input type=hidden name="TransDate" value="20000315">
<input type=hidden name="TransType" value="0001">
<input type=hidden name="Version" value="20040916">(接口版本号)
<input type=hidden name="BgRetUrl " value="http://www.XXX.com/pay/payback1.php"
>(后台交易接收URL,可选,长度不要超过80 个字节)
<input type=hidden name="PageRetUrl" value="http://www.XXX.com/pay/payback2.php"
>(页面交易接收URL,可选,长度不要超过80 个字节)
<input type=hidden name="GateId" value="0001">(支付网关号,可选)
<input type=hidden name="Priv1" value="Memo">(商户私有域,可选,长度不要超过
60 个字节)
<input type=hidden name="ChkValue" value="X…X">(256 字节长的ASCII 码)
</form>
注:其中GateId 和Priv1 为可选项,分别表示 “支付网关号”和“保留字段”。 如填
写GateId(支付网关号),则消费者将直接进入支付页面,否则进入网关选择页面。具体网
关见表1。Priv1 为商户私有域,商户通过此字段向Chinapay 发送的信息,Chinapay 依原样
填充返回给商户。当使用版本号“20040916”时,BgRetUrl 和PageRetUrl 必须至少填写一
项,也就是说,此两项URL 不能同时为空。
表1 Chinapay 支持的网关列表
网关号 网关名称
0001 中国银联
0005 工商银行
0007 招商银行
0008 农业银行(电子支付卡)
0009 兴业银行
0010 中国建设银行
○方法说明:
public boolean verifyTransResponse(String MerId, String OrdId, String TransAmt, String
CuryId, String TransDate, String TransType, String OrderStatus, String CheckValue)
参数说明:
String MerId - 商户号,长度为15 个字节的数字串,由ChinaPay 或清算银行分配。
String OrdId - 订单号,长度为16 个字节的数字串,由商户系统生成,失败的订单号允
许重复支付。
String TransAmt - 交易金额,长度为12 个字节的数字串,例如:数字串"000000001234"
表示12.34 元。
String CuryId - 货币代码, 长度为3 个字节的数字串,目前只支持人民币,取值为"156" 。
String TransDate - 交易日期,长度为8 个字节的数字串,表示格式为: YYYYMMDD。
String TransType - 交易类型,长度为4 个字节的数字串,取值范围为:"0001"和"0002",
其中"0001"表示消费交易,"0002"表示退货交易。
String OrderStatus - 交易状态,长度为4 个字节的数字串。0001代表成功。
String CheckValue - 校验值,即ChinaPay 对交易应答的数字签名,长度为256 字节的字
符串。
返回值:
true - 表示成功,即该交易应答为ChinaPay 所发送,商户根据“交易状态”进行后续处
理;否则表示失败,即无效应答,商户可忽略该应答或记入“垃圾箱”。
说明:在银联支付时,订单号前4是自定义的,可以根据sp业务的不同,头四位不同,
例如ET业务为4000,邮件业务为5000,实物销售业务为6000等。此外订单号的5-9位必须为商户号的最后5位。