一、环境1、Eclipse Juno R22. Tomcat 73. Jersey 2.7 下载地址(/download.html)二、流程1.Eclipse 中创建一个 Dynamic Web Project ,
1、下载jar包netpayclient.jar;下载地址:
2、获取接口需要的文件MerPrK.key、PgPubk.key。这个要向银联方要。
3、获取商户号,由银联方分配。
4、编写代码,主要3部分的代码:
4.1、对接口需要的数据进行处理,通过form表单提交(chinapay.jsp)。
4.2、服务器异步处理银联返回的数据(chinapayNotify.jsp)。
4.3、服务器同步处理银联返回的数据(chinapayReturn.jsp)。
代码说明:个人认为,支付成功后逻辑处理应该放在异步请求的页面(chinapayNotify.jsp),同步请求页面(chinapayReturn.jsp)只做逻辑判断然后页面跳转。
如果,你在同步页面去处理,那么用户支付成功后不按照银联的页面提示跳转回你的同步处理页面(chinapayReturn.jsp),而是直接把页面关了,那么你写在同步处理页面的处理逻辑就不能执行,就会出现用户付款了,但是没有你网站不知道的情况。
/****************************************************** chinapay.jsp begin******************************************************/
/*
接口版本号
*/
String Version = "0129";
/*
商户号,长度为15个字节的数字串,由ChinaPay或清算银行分配。
*/
String MerId = "80808012345";
/*
订单号,长度为16个字节的数字串,由商户系统生成,失败的订单号允许重复支付。
在支付版本为0916中,如果商户为二级商户(即商户号前6位为808080的),订单号从第5位到第9位必须和商户号的第11位到第15位相同
*/
String ordId = request.getParameter("OrdId");
String OrdId = getOrdId(ordId, Version, MerId);
/*
交易金额,长度为12个字节的数字串,例如:数字串"000000001234"表示12.34元。
*/
String transAmt = request.getParameter("TransAmt");
String TransAmt = getTranAmt(transAmt);
/*
货币代码, 长度为3个字节的数字串,目前只支持人民币,取值为"156" 。
*/
String CuryId = "156";
/*
交易日期,长度为8个字节的数字串,表示格式为:YYYYMMDD。
*/
String TransDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
/*
交易类型,长度为4个字节的数字串,取值范围为:"0001"和"0002",, 其中"0001"表示消费交易
*/
String TransType = "0001";
/*
后台交易接受URL,长度不要超过80个字符
后台接受应答地址,用于商户记录交易信息和处理。URL不能包含参数,如果需要参数,可以吧参数填写在“商户私有域”(Privl)字段中
ChinaPay会根据后台发送的http的返回码来判定收费重新发送后台应答流水,以确保后台应答的接收
*/
String BgRetUrl = "";
/*
页面交易接收URL,长度不要超过80个字节
接收应答地址,用于引导使用者支付后返回商户网站页面
*/
String PageRetUrl = "";
/*
支付网关号,可选
如果填写,支付者将直接进入支付页面,否则进入网关选择页面
*/
String GateId = "8607";
/*
商户私有域,可选,长度不要超过60个字节
商户通过此字段向Chinapay发送信息,Chinapay将原有填充返回给商户
*/
String Priv1 = "";
/*
即NetPayClient根据上述输入参数生成的商户数字签名,长度为256字节的字符串。
*/
String ChkValue = "";
/*
境外版本还需要使用以下6个数据
*/
String CountryId = request.getParameter("CountryId");
String TransTime = request.getParameter("TransTime");
String TimeZone = request.getParameter("TimeZone");
String DSTFlag = request.getParameter("DSTFlag");
String Priv2 = request.getParameter("Priv2");
String ExtFlag = "00";