工商银行银联支付接口。
发现网上的资料对于JAVA版本并不是很详细。
正好公司要做,我也边摸索边学习一下~
要做银联支付,先是测这个工商银行的接口。
给我发了一个文件:
我是用的JAVA,你们看自己用的什么看对应demo哈~
首先当然是看最下面那个doc文档,里面有个发送数据和接受数据的表单,定义了很多字段。我们就是要把这个发送数据表单构造出来,传给银行,然后银行再把接收数据的表单发给我们。文档我不截图了,自己去看~百度文库也一大堆的。
参考了这个:http://www.tuicool.com/articles/YBRZNnz
下面是纯JAVA的说明。按照步骤做。测试证书和key(不在上面的文件夹里,是另外发给我的)放在D盘(之后会改成配置文件获取),导入jar包,把javaApiDemo.jsp里的password改成银行发给你的那个密码。
放到服务器上,返回如下页面:
欧卡~接下来开始正式的。
建立了一个表单对应的ICBC类和TranData类(放在一个类就可以了,我开始弄错了就分开了 ,一个类里面更省事儿)
ICBC:
package com.mvc.product.model;
public class ICBC {
//必输:1,选输:2
//
// private String orderPostUrl = "https://B2C.icbc.com.cn/servlet/ICBCINBSEBusinessServlet";
// 1接口版本号
private String interfaceName = "ICBC_PERBANK_B2C";
// 1交易日期时间
private String interfaceVersion = "1.0.0.11";
// 1交易数据
// 整合所有交易数据形成的xml明文串,并做BASE64编码;
// 具体格式定义见下文;
// 注意:
// 需有xml头属性;整个字段使用BASE64编码;
// xml明文中没有回车换行和多余空格;
private String tranData;
// 1订单签名数据
// 必输,
// 商户使用工行提供的签名API和商户证书将tranData的xml明文串进行签名,得到二进制签名数据,然后进行BASE64编码后得到可视的merSignMsg;
// 注意:签名时是针对tranData的xml明文,不是将tranData进行BASE64编码后的串;
private String merSignMsg;
// 1商城证书公钥
// 商户用二进制方式读取证书公钥文件后,进行BASE64编码后产生的字符串;
private String merCert;
public String getInterfaceName() {
return interfaceName;
}
public void setInterfaceName(String interfaceName) {
this.interfaceName = interfaceName;
}
public String getInterfaceVersion() {
return interfaceVersion;
}
public void setInterfaceVersion(String interfaceVersion) {
this.interfaceVersion = interfaceVersion;
}
public String getTranData() {
return tranData;
}
public void setTranData(String tranData) {
this.tranData = tranData;
}
public String getMerSignMsg() {
return merSignMsg;
}
public void setMerSignMsg(String merSignMsg) {
this.merSignMsg = merSignMsg;
}
public String getMerCert() {
return merCert;
}
public void setMerCert(String merCert) {
this.merCert = merCert;
}
}
TranData:
public class TranData {
//必输:1,选输:2
// 1接口版本号
private String interfaceName = "ICBC_PERBANK_B2C";
// 1交易日期时间
private String interfaceVersion = "1.0.0.11";
// 1交易日期时间:目前要求在银行系统当前时间的前后十分钟范围内,否则判定交易时间非法。
private String orderDate;
// 1订单号:客户支付后商户网站产生的一个唯一的定单号,该订单号应该在相当长的时间内不重复。工行通过订单号加订单日期来唯一确认一笔订单的重复性。
private Long orderid;
// 1订单金额:客户支付订单的总金额,一笔订单一个,以分为单位。不可以为零,必需符合金额标准。
private Double amount;
// 1分期付款期数:取值:1、3、6、9、12、18、24;1代表全额付款,必须为以上数值,否则订单校验不通过。
private Integer installmentTimes = 1;
// TODO
// 1商户账号:商户入账账号,只能交易时指定。(商户付给银行手续费的账户,可以在开户的时候指定,也可以用交易指定方式;用交易指定方式则使用此商户账号)
private String merAcct;
// 2商品编号
private String goodsID = "";
// 1商品名称
private String goodsName = "";
// 2商品数量
private Integer goodsNum = 1;
// 2已含运费金额
private Double carriageAmt;
// 1检验联名标志:取值“1”:客户支付时,网银判断该客户是否与商户联名,是则按上送金额扣帐,否则展现未联名错误;取值“0”:不检验客户是否与商户联名,按上送金额扣帐。
private Integer verifyJoinFlag = 0;
// 2语言版本:默认为中文版 。取值:“EN_US”为英文版;取值:“ZH_CN”或其他为中文版。注意:大小写敏感。
private String language = "ZH_CN";
// 1支付币种:用来区分一笔支付的币种,目前工行只支持使用人民币(001)支付。 取值: “001”
private String curType = "001";
//TODO
// 1商户代码:唯一确定一个商户的代码,由商户在工行开户时,由工行告知商户。
private String merID;
// 1支持订单支付的银行卡种类:默认“2”。取值范围为0、1、2,其中0表示仅允许使用借记卡支付,1表示仅允许使用信用卡支付,2表示借记卡和信用卡都能对订单进行支付
private Integer creditType = 2;
// 1通知类型
// 在交易转账处理完成后把交易结果通知商户的处理模式。
// 取值“HS”:在交易完成后实时将通知信息以HTTP协议POST方式,主动发送给商户,发送地址为商户端随订单数据提交的接收工行支付结果的URL即表单中的merURL字段;
// 取值“AG”:在交易完成后不通知商户。商户需使用浏览器登录工行的B2C商户服务网站,或者使用工行提供的客户端程序API主动获取通知信息。
private String notifyType = "HS";
// 2结果发送类型
// 选输
// 取值“0”:无论支付成功或者失败,银行都向商户发送交易通知信息;
// 取值“1”,银行只向商户发送交易