中國銀行的支付接口只提供有Java版,衆所周之ecshop是採用php開發的,這讓咱們如何用php開發java的東東呢?辦法始終是有的,咱們能夠先在ecshop裏用php生成訂單,提交給nginx,nginx轉發的tomcat,再經過jsp文件完成訂單簽名,將訂單數據發送給中國銀行處理。php
先看這個處理訂單簽名,發送B2C支付數據的jsp文件,我將它命名爲index.jsphtml
- <%@ page contentType=」text/html; charset=UTF-8″ language=」java」 import=」java.sql.*」 errorPage=」」 %>
- <%@ page import=」java.io.*」 %>
- <%@ page import=」java.util.*」 %>
- <%@ page import=」com.bocnet.common.security.PKCS7Tool」 %>
- <%
- String merchantNo = request.getParameter(「merchantNo」);
- String payType = request.getParameter(「payType」);
- String orderNo = request.getParameter(「orderNo」);
- String curCode = request.getParameter(「curCode」);
- String orderAmount = request.getParameter(「orderAmount」);
- String orderTime = request.getParameter(「orderTime」);
- String orderNote = request.getParameter(「orderNote」);
-
- String orderUrl = 「http:
- String keyStorePassword = 「111111″;
- String keyPassword = 「111111″; try {
- PKCS7Tool tool = PKCS7Tool.getSigner(keyStorePath, keyStorePassword, keyPassword);
- String dataStr = orderNo + 「|」 + orderTime + 「|」 + curCode + 「|」 + orderAmount + 「|」 + merchantNo;
- byte[] data = dataStr.getBytes(「UTF-8″);
- String signData = tool.sign(data);
- signData = signData.replace(「\n」, 「」);
- signData = signData.replace(「\r」, 「」); out.println(「<div style=’text-align:center’><form name=’form1′ method=’post’ action=’http:
- 「‘><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) {
-
- out.println(e);
- }
- %>
當jsp文件發送數據給中國銀行後,頁面會跳轉到中國銀行的支付頁面,客戶完成一系列的支付操做後,頁面會跳轉回商城網站。同時中國銀行會向網站返回B2C支付結果通知數據,這些數據須要使用java驗籤,驗籤經過後再把數據發送給ecshop的respond.php文件,完成數據驗證,改變訂單狀態,這樣一次完整的支付就算完成了。如下是notify.jsp文件源碼。
- <%@ page contentType=」text/html; charset=UTF-8″ language=」java」 import=」java.sql.*」 errorPage=」」 %>
- <%@ page import=」java.io.*」 %>
- <%@ page import=」java.util.*」 %>
- <%@ page import=」java.security.GeneralSecurityException」 %>
- <%@ page import=」com.bocnet.common.security.PKCS7Tool」 %> <%
-
- String merchantNo = request.getParameter(「merchantNo」);
- String orderNo = request.getParameter(「orderNo」);
- String orderSeq = request.getParameter(「orderSeq」);
- String cardTyp = request.getParameter(「cardTyp」);
- String payTime = request.getParameter(「payTime」);
- String orderStatus = request.getParameter(「orderStatus」);
- String payAmount = request.getParameter(「payAmount」);
- String orderIp = request.getParameter(「orderIp」);
- String orderRefer = request.getParameter(「orderRefer」);
- String bankTranSeq = request.getParameter(「bankTranSeq」);
- String returnActFlag = request.getParameter(「returnActFlag」);
- String signData = request.getParameter(「signData」);
- String rootCertificatePath = 「/home/www/bankey/BOCCAU3.cer」; try {
- String path=request.getSession().getServletContext().getRealPath(「/boc/tranData.d」);
- FileWriter fw=new FileWriter(path + 「/report.txt」);
- fw.write(merchantNo+」 「+orderNo+」 「+payTime+」 「+orderStatus+」 「+payAmount+」 「+signData+」\n」); PKCS7Tool tool = PKCS7Tool.getVerifier(rootCertificatePath);
- String signature = signData;
- String dataStr = merchantNo + 「|」 + orderNo + 「|」 + orderSeq + 「|」 + cardTyp + 「|」 + payTime + 「|」 + orderStatus + 「|」 + payAmount;
- byte[] data = dataStr.getBytes(「UTF-8″);
- String dn = null;
- tool.verify(signature, data, dn);
- if(orderStatus.equals(「1″)) {
-
- fw.write(merchantNo+」訂單支付成功\n」);
- response.sendRedirect(「http:
- } else{
-
- fw.write(merchantNo+」訂單支付失敗\n」);
- }
- } catch (Exception e) {
- out.println(e);
- }
- %>
以上就是處理訂單的兩個jsp文件,至於ecshop中的中國銀行支付插件開發就比較簡單了java
轉自:http://blog.csdn.net/mypcstyle/article/details/37509779
nginx