中国银行支付接口(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(“\n”, “”);  
  22. signData = signData.replace(“\r”, “”); 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+”\n”); 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+”订单支付成功\n”);  
  31. response.sendRedirect(“http://www.***.com/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中的中国银行支付插件开发就比较简单了

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


转载于:https://www.cnblogs.com/xieyunc/p/9126481.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单位 电子渠道开发部(网银团队) 撰写人 曹克、孙永、延冰、陈卫强、梁栋 本 V2.3 序号 修改人 日期 修改说明 1 曹克 2008.10.28 创建文档,编写文档提纲。 2 陈卫强 2008.10.29 添加接口报文章节内容 3 孙永 2008.10.29 添加安全章节内容 4 曹克 2008.10.30 添加前言,补充及通讯协议章节,修改文档格式 5 延冰 2009.12.28 1、在2.2.1商户发送支付指令中增加WAP商户系统发送订单指令的指令参考 6 延冰 2009.12.29 1、增加银行主动通知接口:网关发送B2C支付结果通知 7 延冰 2010.01.28 1、在2.3.2签名与验签一节中增加商户验证银行数字签名异常后的处理 8 延冰 2010.04.15 1、在指令说明中增加:商户主动发往银行网关的指令均以POST方式发送,并且使用UTF8编码格式 9 延冰 2010.08.30 1、修改2.2.1商户发送支付指令 接口名称为 商户发送网银支付订单;增加2.2.2商户发送手机银行支付订单;修改2.2.2 支付结果反馈接口 为 银行反馈订单支付结果;修改2.2.3 支付状态查询接口 为 商户查询订单信息;修改2.2.8 网关发送B2C支付结果通知 为 银行发送B2C支付结果通知; 2、支付结果反馈接口返回项增加:客户支付IP、客户浏览器Refer、银行交易流水号、返回操作类型; 3、增加联机退款接口:商户发送B2C退款指令; 4、网关发送B2C支付结果通知中增加:客户支付IP、客户浏览器Refer、银行交易流水号、返回操作类型; 5、在附件3.1中增加商户批量退货文件示例; 6、增加附件3.2错误码说明; 1 前言 5 1.1 文档说明 5 1.1.1 编写目的 5 1.1.2 参考资料 5 1.2 适用读者 5 2 接口规约 6 2.1 通讯协议 6 2.2 接口报文 8 2.2.1 商户发送网银支付订单 8 2.2.2 商户发送手机银行支付订单 10 2.2.3 银行反馈订单支付结果 13 2.2.4 银行发送B2C支付结果通知 15 2.2.5 商户查询订单信息 19 2.2.6 商户发送B2C退款指令 23 2.2.7 批量退货及反馈文件格式 28 2.2.8 业务对账文件格式 30 2.2.9 清算对账文件格式 31 2.3 安全机制 33 2.3.1 安全机制简介 33 2.3.2 签名与验签 33 3 附件 36 3.1 批量文件接口示例文件 36 3.2 错误码说明 36 1 前言 1.1 文档说明 本文描述了中国银行网上支付相关服务通讯协议、报文格式、安全机制。作为商户端系统技术人员开发的参考文档。 1.1.1 编写目的 为使商户端系统开发人员了解网上支付服务的相关通讯接口细节。 1.1.2 参考资料 中国银行网上支付相关的业务流程见《商户端开发指引》。本文不再复述。 1.2 适用读者 商户端系统开发人员(分析师、设计人员、程序员)
对于 Java 开发者来说,使用民生银行支付接口需要使用相关的 SDK 或 API,以下是一个简单的民生银行接口实例 demo: ```java import com.cmbchina.ccd.csf.exception.CsfException; import com.cmbchina.ccd.csf.request.CsfRequest; import com.cmbchina.ccd.csf.response.CsfResponse; import com.cmbchina.ccd.csf.sdk.CsfSdk; public class CMBPayDemo { public static void main(String[] args) { // 初始化 CsfSdk CsfSdk.init(); // 构建请求参数 CsfRequest csfRequest = new CsfRequest(); csfRequest.setService("cmb.pb.merchantpay.pay");//接口名称 csfRequest.setVersion("01");//本号 csfRequest.setPartnerId("");//商户号 csfRequest.setTradeDate("");//交易日期 csfRequest.setTradeTime("");//交易时间 csfRequest.setMerOrderId("");//商户订单号 csfRequest.setAmount("");//交易金额 csfRequest.setGoodsName("");//商品名称 csfRequest.setRemark("");//备注 // 发送请求 CsfResponse csfResponse = null; try { csfResponse = CsfSdk.service(csfRequest); } catch (CsfException e) { e.printStackTrace(); } // 处理响应 if (csfResponse.isSuccess()) { // 成功 System.out.println("交易成功,订单号:" + csfResponse.getMerOrderId()); } else { // 失败 System.out.println("交易失败,错误码:" + csfResponse.getErrorCode() + ",错误信息:" + csfResponse.getErrorMessage()); } // 关闭 CsfSdk CsfSdk.shutdown(); } } ``` 注意:该示例仅供参考,具体实现需要根据民生银行提供的 SDK 或 API 进行开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值