中国银⾏⽀付接⼝(ecshop版)
中国银⾏的⽀付接⼝只提供有版,众所周之ecshop是采⽤php开发的,这让我们如何⽤php开发java的东东呢?办法始终是有的,我们可以先在ecshop⾥⽤php⽣成订单,提交给nginx,nginx 转发的tomcat,再通过jsp⽂件完成订单签名,将订单数据发送给中国银⾏处理。
先看这个处理订单签名,发送B2C⽀付数据的jsp⽂件,我将它命名为index.jsp
[java]
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.bocnetmon.security.PKCS7Tool” %>
5. <%
6. String merchantNo = Parameter(“merchantNo”);
7. String payType = Parameter(“payType”);
8. String orderNo = Parameter(“orderNo”);
9. String curCode = Parameter(“curCode”);
10. String orderAmount = Parameter(“orderAmount”);
11. String orderTime = Parameter(“orderTime”);
12. String orderNote = Parameter(“orderNote”);
13. //String orderUrl = Parameter(“orderUrl”);
14. String orderUrl = “www.***/webapps/boc/notify.jsp”;  //根据⾃⼰⽹站的实际情况修改 String keyStorePath = “/home/www/bankey/boc.pfx”;
15. String keyStorePassword = “111111″;
16. String keyPassword = “111111″; try {
17. PKCS7Tool tool = Signer(keyStorePath, keyStorePassword, keyPassword);
18. String dataStr = orderNo + “|” + orderTime + “|” + curCode + “|” + orderAmount + “|” + merchantNo;
19. byte[] data = Bytes(“UTF-8″);
20. String signData = tool.sign(data);
21. signData = place(“\n”, “”);
22. signData = place(“\r”, “”); out.println(“<div style=’text-align:center’>
<form name=’form1′ method=’post’ action=’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. }
php文件下载源码27. %>
当jsp⽂件发送数据给中国银⾏后,页⾯会跳转到中国银⾏的⽀付页⾯,客户完成⼀系列的⽀付操作后,页⾯会跳转回商城⽹站。同时中国银⾏会向⽹站返回B2C⽀付结果通知数据,这些数据需要使⽤java验签,验签通过后再把数据发送给ecshop的respond.php⽂件,完成数据验证,改变订单状态,这样⼀次完整的⽀付就算完成了。以下是notify.jsp⽂件源码。
[java]
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.bocnetmon.security.PKCS7Tool” %> <%
6. //获取银⾏返回数据
7. String merchantNo          =        Parameter(“merchantNo”);      // 商户号
8. String orderNo            =        Parameter(“orderNo”);          // 商户订单号
9. String orderSeq            =        Parameter(“orderSeq”);        // 银⾏订单流⽔号
10. String cardTyp            =        Parameter(“cardTyp”);        // 银⾏卡类别
11. String payTime            =        Parameter(“payTime”);        // ⽀付交易的⽇期时间
12. String orderStatus        =        Parameter(“orderStatus”);    // 订单状态
13. String payAmount          =        Parameter(“payAmount”);      // ⽀付⾦额
14. String orderIp            =        Parameter(“orderIp”);        // 客户⽀付IP地址
15. String orderRefer          =        Parameter(“orderRefer”);      // 客户浏览器Refer信息
16. String bankTranSeq        =          Parameter(“bankTranSeq”);    // 银⾏交易流⽔号
17. String returnActFlag    =        Parameter(“returnActFlag”);  // 返回操作类型
18. String signData        =        Parameter(“signData”);        // ⽹关签名数据
19. String rootCertificatePath = “/home/www/”; try {
20. String Session().getServletContext().getRealPath(“/boc/tranData.d”);
21. FileWriter fw=new FileWriter(path + “/”); //保存接⼝开发中的调试信息
22. fw.write(merchantNo+” “+orderNo+” “+payTime+” “+orderStatus+” “+payAmount+” “+signData+”\n”); PKCS7Tool tool = Verifier(rootCertificatePath);
23. String signature = signData;
24. String dataStr = merchantNo + “|” + orderNo + “|” + orderSeq + “|” + cardTyp + “|” + payTime + “|” + orderStatus + “|” + payAmount;
25. byte[] data = Bytes(“UTF-8″);
26. String dn = null;
27. tool.verify(signature, data, dn);
28. if(orderStatus.equals(“1″)) {
29. //⽀付成功处理代码
30. fw.write(merchantNo+”订单⽀付成功\n”);
31. response.sendRedirect(“www.***/respond.php?code=boc&orderNo=”+orderNo+”&orderStatus=”+orderStatus+”&payAmount=”+payAmount);
32. } else{
33. //⽀付失败处理代码
34. fw.write(merchantNo+”订单⽀付失败\n”);
35. }
36. } catch (Exception e) {
37. out.println(e);
38. }
39. %>
以上就是处理订单的两个jsp⽂件,⾄于ecshop中的中国银⾏⽀付插件开发就⽐较简单了