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

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);    }
 支付测试代码完成!!!! 


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值