zoukankan      html  css  js  c++  java
  • 中国银行支付接口(ecshop版)

    中国银行的支付接口只提供有Java版,众所周之ecshop是采用php开发的,这让我们如何用php开发java的东东呢?办法始终是有的,我们可以先在ecshop里用php生成订单,提交给nginx,nginx转发的tomcat,再通过jsp文件完成订单签名,将订单数据发送给中国银行处理。

    先看这个处理订单签名,发送B2C支付数据的jsp文件,我将它命名为index.jsp

    [java] view plain copy
    1. <%@ page contentType=”text/html; charset=UTF-8″ language=”java” import=”java.sql.*” errorPage=”” %>  
    2. <%@ page import=”java.io.*” %>  
    3. <%@ page import=”java.util.*” %>  
    4. <%@ page import=”com.bocnet.common.security.PKCS7Tool” %>  
    5. <%  
    6. String merchantNo = request.getParameter(“merchantNo”);  
    7. String payType = request.getParameter(“payType”);  
    8. String orderNo = request.getParameter(“orderNo”);  
    9. String curCode = request.getParameter(“curCode”);  
    10. String orderAmount = request.getParameter(“orderAmount”);  
    11. String orderTime = request.getParameter(“orderTime”);  
    12. String orderNote = request.getParameter(“orderNote”);  
    13. //String orderUrl = request.getParameter(“orderUrl”);  
    14. String orderUrl = “http://www.***.com/webapps/boc/notify.jsp”;   //根据自己网站的实际情况修改 String keyStorePath = “/home/www/bankey/boc.pfx”;  
    15. String keyStorePassword = “111111″;  
    16. String keyPassword = “111111″; try {  
    17. PKCS7Tool tool = PKCS7Tool.getSigner(keyStorePath, keyStorePassword, keyPassword);  
    18. String dataStr = orderNo + “|” + orderTime + “|” + curCode + “|” + orderAmount + “|” + merchantNo;  
    19. byte[] data = dataStr.getBytes(“UTF-8″);  
    20. String signData = tool.sign(data);  
    21. signData = signData.replace(“ ”, “”);  
    22. signData = signData.replace(“ ”, “”); out.println(“<div style=’text-align:center’><form name=’form1′ method=’post’ action=’http://180.168.146.75:81/PGWPortal/RecvOrder.do’><INPUT NAME=’merchantNo’ TYPE=’hidden’ value=’”+merchantNo+”‘><INPUT NAME=’payType’ TYPE=’hidden’ value=’”+payType+”‘><INPUT NAME=’orderNo’ TYPE=’hidden’ value=’”+orderNo+”‘ ><INPUT NAME=’curCode’ TYPE=’hidden’ value=’”+curCode+”‘><INPUT NAME=’orderAmount’ TYPE=’hidden’ value=’”+orderAmount+  
    23. “‘><INPUT TYPE=’HIDDEN’ NAME=’orderTime’ VALUE=’”+orderTime+”‘><INPUT TYPE=’HIDDEN’ NAME=’orderNote’ VALUE=’”+orderNote+”‘><INPUT TYPE=’HIDDEN’ NAME=’orderUrl’ VALUE=’”+orderUrl+”‘><INPUT TYPE=’HIDDEN’ NAME=’signData’ VALUE=’”+signData+”‘></form>正在去往工行支付页面…<script>document.all.form1.submit();</script></div>”); } catch (Exception e) {  
    24. // TODO Auto-generated catch block  
    25. out.println(e);  
    26. }  
    27. %>  

    当jsp文件发送数据给中国银行后,页面会跳转到中国银行的支付页面,客户完成一系列的支付操作后,页面会跳转回商城网站。同时中国银行会向网站返回B2C支付结果通知数据,这些数据需要使用java验签,验签通过后再把数据发送给ecshop的respond.php文件,完成数据验证,改变订单状态,这样一次完整的支付就算完成了。以下是notify.jsp文件源码。

    [java] view plain copy
    1. <%@ page contentType=”text/html; charset=UTF-8″ language=”java” import=”java.sql.*” errorPage=”” %>  
    2. <%@ page import=”java.io.*” %>  
    3. <%@ page import=”java.util.*” %>  
    4. <%@ page import=”java.security.GeneralSecurityException” %>  
    5. <%@ page import=”com.bocnet.common.security.PKCS7Tool” %> <%  
    6. //获取银行返回数据  
    7. String merchantNo          =         request.getParameter(“merchantNo”);       // 商户号  
    8. String orderNo             =         request.getParameter(“orderNo”);          // 商户订单号  
    9. String orderSeq            =         request.getParameter(“orderSeq”);        // 银行订单流水号  
    10. String cardTyp             =         request.getParameter(“cardTyp”);         // 银行卡类别  
    11. String payTime             =         request.getParameter(“payTime”);         // 支付交易的日期时间  
    12. String orderStatus         =         request.getParameter(“orderStatus”);     // 订单状态  
    13. String payAmount           =         request.getParameter(“payAmount”);       // 支付金额  
    14. String orderIp             =         request.getParameter(“orderIp”);         // 客户支付IP地址  
    15. String orderRefer          =         request.getParameter(“orderRefer”);      // 客户浏览器Refer信息  
    16. String bankTranSeq         =          request.getParameter(“bankTranSeq”);     // 银行交易流水号  
    17. String returnActFlag     =         request.getParameter(“returnActFlag”);   // 返回操作类型  
    18. String signData         =         request.getParameter(“signData”);        // 网关签名数据  
    19. String rootCertificatePath = “/home/www/bankey/BOCCAU3.cer”; try {  
    20. String path=request.getSession().getServletContext().getRealPath(“/boc/tranData.d”);  
    21. FileWriter fw=new FileWriter(path + “/report.txt”); //保存接口开发中的调试信息  
    22. fw.write(merchantNo+” “+orderNo+” “+payTime+” “+orderStatus+” “+payAmount+” “+signData+” ”); PKCS7Tool tool = PKCS7Tool.getVerifier(rootCertificatePath);  
    23. String signature = signData;  
    24. String dataStr = merchantNo + “|” + orderNo + “|” + orderSeq + “|” + cardTyp + “|” + payTime + “|” + orderStatus + “|” + payAmount;  
    25. byte[] data = dataStr.getBytes(“UTF-8″);  
    26. String dn = null;  
    27. tool.verify(signature, data, dn);  
    28. if(orderStatus.equals(“1″)) {  
    29. //支付成功处理代码  
    30. fw.write(merchantNo+”订单支付成功 ”);  
    31. response.sendRedirect(“http://www.***.com/respond.php?code=boc&orderNo=”+orderNo+”&orderStatus=”+orderStatus+”&payAmount=”+payAmount);  
    32. else{  
    33. //支付失败处理代码  
    34. fw.write(merchantNo+”订单支付失败 ”);  
    35. }  
    36. catch (Exception e) {  
    37. out.println(e);  
    38. }  
    39. %>  

    以上就是处理订单的两个jsp文件,至于ecshop中的中国银行支付插件开发就比较简单了

    转自:http://blog.csdn.net/mypcstyle/article/details/37509779


  • 相关阅读:
    memcached基础与配置详解
    最小化安装CentOS基础命令
    源码编译redis及解决三个开机告警问题
    HAProxy之一----HAPproxy配置参数详解
    HAProxy之二----HAProxy实现高级负载均衡实战和ACL控制
    6 SQL语言——distinct去重
    5 SQL语言——连接符
    04 Oracle Sql语言API
    03 Oracle——用户密码忘记重置
    02 Oracle——账号管理
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126481.html
Copyright © 2011-2022 走看看