中國銀行支付接口(ecshop版)

中國銀行的支付接口只提供有Java版,衆所周之ecshop是採用php開發的,這讓咱們如何用php開發java的東東呢?辦法始終是有的,咱們能夠先在ecshop裏用php生成訂單,提交給nginx,nginx轉發的tomcat,再經過jsp文件完成訂單簽名,將訂單數據發送給中國銀行處理。php

先看這個處理訂單簽名,發送B2C支付數據的jsp文件,我將它命名爲index.jsphtml

[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中的中國銀行支付插件開發就比較簡單了java

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

相關文章
相關標籤/搜索