您的位置:首页 > 运维架构 > 网站架构

网站接入银联网上支付(B2B)

2015-06-01 16:54 966 查看
1、公钥还有银行卡号和密码等银联会提供,私钥按照银联提供的文档申请就可以了,需要说明的是申请的时候要用ie,并且在internet 选项-->安全-->自定义级别中,

将Active X 控件和插件 下的所有禁用都改为启用,如图:



2、在银联提供的测试网址登陆,如图:


3、输入登陆信息,第一次登陆需要修改密码,然后重新登陆,选择机构管理,生成商户密钥,如图:



4、选择生成的私钥路径,保存后,记得要点提交按钮,私钥第二天生效。

5、在src下创建config.properties文件,里面存放商户号、支付网关申请、公钥和私钥的存放路径,如:

merid = xxxxxxxxxxxxxxxx

merkeyfilepath = E\:\\key\\XXX

pubkeyfilepath = E\:\\key\\XXX

url = http://XXXXXXXXX
6、申请的servlet:

private static final String MERID = "merid";

private static final String PaymentUrl = "url";

private static final String MERKEYFILEPATH = "merkeyfilepath";

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

String MerKeyPath = null;

String merId = null;

String msg="";

try{

Properties config = Config.getInstance().getProperties();

MerKeyPath = config.getProperty(MERKEYFILEPATH);

merId = config.getProperty(MERID);

}catch (Exception e){

msg="私钥初始化失败!";

}

if (msg!="") {

request.setAttribute("errors", msg);

request.getRequestDispatcher(XXXXX).forward(request, response);

return;

}

String ordId="0000000000000001";//订单号只能提交一次

String transAmt="000000000001";//金额

String curyId="156";//币种

String transDate="20150601";//日期

String transType="0001";//类型

String version="20070129";//版本

String bgRetUrl="http://XXXXXXXXX";//后台action

String pageRetUrl="http://xxxxx.jsp";//前台jsp

String gateId="";

String priv1 = "";

String chkValue = null;

boolean flage= false;

PrivateKey key = new PrivateKey();

try{

flage= key.buildKey(merId, 0, MerKeyPath);

}catch (Exception e){

System.out.print("创建失败");

}

//签名

String data=merId+ordId+transAmt+curyId+transDate+transType+priv1;

SecureLink sl = new SecureLink(key);

chkValue = sl.Sign(data);

//将要提交的数据显示到页面

Bean cbb=new Bean();

cbb.setMerId(merId);

cbb.setOrdId(ordId);

cbb.setTransAmt(transAmt);

cbb.setCuryId(curyId);

cbb.setTransDate(transDate);

cbb.setTransType(transType);

cbb.setPriv1(priv1);

cbb.setVersion(version);

cbb.setBgRetUrl(bgRetUrl);

cbb.setPageRetUrl(pageRetUrl);

cbb.setGateId(gateId);

cbb.setChkValue(chkValue);

request.setAttribute("cbbInput", cbb);

request.getRequestDispatcher(xxxxxxxx).forward(request, response);

return;

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request,response);

}

7、上面的servlet跳转到下面的页面:

<%@ page language="java" import="model.bean.*" pageEncoding="UTF-8"%>

<%@ page import="java.util.*"%>

<jsp:useBean id="cbbInput" scope="request" class="model.Bean" />

<form name="corpor" action="测试提交路径" method="post">

<input type="hidden" name="MerId" value=“xxxxx”/>

<input type="hidden" name="OrdId" value="xxxx"/>

<input type="hidden" name="TransAmt" value="xxx"/>

<input type="hidden" name="CuryId" value="xxx"/>

<input type="hidden" name="TransDate" value="xxx"/>

<input type="hidden" name="TransType" value="xxx"/>

<input type="hidden" name="Version" value="xxx"/>

<input type="hidden" name="BgRetUrl" value="xxx"/>

<input type="hidden" name="PageRetUrl" value="xxx"/>

<input type="hidden" name="GateId" value="xxxx"/>

<input type="hidden" name="Priv1" value=""/>

<input type="hidden" name="ChkValue" value="xxxx"/>

<input type="submit" name="submit Button" value="提交" class="cmd"/>

</form>

8、点击提交,就会到企业网银登陆页面,如图:



9、输入卡号和密码登陆,会提示交易结果,如图:



10、PageRetUrl为上面的页面跳转回网站的页面,BgRetUrl 为后台action,用来验证和保存数据,servlet如下:

private static final String url = "url";
private static final String MERKEYFILEPATH = "merkeyfilepath";
private static final String PUBKEYFILEPATH = "pubkeyfilepath";
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
/*
获取服务器返回数据
*/
String status=request.getParameter("status");
String merId=request.getParameter("merid");
String ordno=request.getParameter("orderno");
String transdate=request.getParameter("transdate");
String amount=request.getParameter("amount");
String currencycode=request.getParameter("currencycode");
String transtype=request.getParameter("transtype");
String checkvalue=request.getParameter("checkvalue");
String gateId=request.getParameter("GateId");
String priv1=request.getParameter("Priv1");
//  String s=readReqStr(request);
//此处将上面数据存入数据库
//验签
String PubKeyPath = null;
try {
Properties config = Config.getInstance().getProperties();
PubKeyPath = config.getProperty(PUBKEYFILEPATH);
} catch (Exception e) {
}
chinapay.PrivateKey key=new chinapay.PrivateKey();
chinapay.SecureLink t;
boolean flage=false;
boolean flage1=false;
int int = 0;
try{
flage=key.buildKey("999999999999999",int,PubKeyPath);
}catch (Exception e){

}
if(!flage){
return;
}
t=new chinapay.SecureLink(key);
flage1=t.verifyTransResponse(merId,ordno,amount,currencycode,transdate,transtype,status,checkvalue);
if(!flage1){
System.out.print("验签失败");
//   return;
}else{
if(status.equals("1001")){
System.out.print("支付成功");
}else {
System.out.print("支付失败");
}
}

//告诉银联你接收到消息了,否则银联会不停的发送信息
resp.getWriter().write(JSON.toJSONString(cpCyberBankRes));
resp.getWriter().flush();
} public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }

支付测试代码完成!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: