[Java] 歐付寶金流串接教學
2015-12-11 01:52
459 查看
前言:
很多接案的人,都會碰到需要接金流的時候。而歐付寶是個台灣的金流平台。
這邊記錄下,串接的心得。我用的語言是Java, 採liferay這個portal平台,不過這份教學當然適合servlet.
不過官方技術文件,太規格導向了。應該要方便developer快速開發才是 很多資訊還是要向官方問才知道。
流程 :
假設有一個網購網站,有使用者下了單之後,採用信用卡付款。此時照官方使用範例
會把所有資訊弄成html的語法(html hidden fields),再加密送出去。
eg.
如果不懂,覺得太抽象可以用 http://dev.lovewed.tw/allpay/ 這個網站來測試整個流程(歐付寶有提供測試平台,測試信用卡 卡號)。
了解整個流程後,我們可以確定歐付寶正常無誤就可以開始串寫程式了。
payment.jsp, 這支是負責user填完資料驗證後,且在我方server有紀錄後,送給轉到歐付寶付款用的。
bittorrent
則是user在歐付寶付款後,通知我方server用的,好讓我方server在資料庫中,紀錄成功入賬。
結尾:
基本上,只要欄位照著規格書填對。就沒有太大的問題,而看到官方有其他的問題則是參數中有 / - 等字串
所以過程中,我是已經避免此問題了。
若有問題,可以留言討論。
很多接案的人,都會碰到需要接金流的時候。而歐付寶是個台灣的金流平台。
這邊記錄下,串接的心得。我用的語言是Java, 採liferay這個portal平台,不過這份教學當然適合servlet.
不過官方技術文件,太規格導向了。應該要方便developer快速開發才是 很多資訊還是要向官方問才知道。
流程 :
假設有一個網購網站,有使用者下了單之後,採用信用卡付款。此時照官方使用範例
會把所有資訊弄成html的語法(html hidden fields),再加密送出去。
eg.
<input type="hidden" name="Language" value="English">
如果不懂,覺得太抽象可以用 http://dev.lovewed.tw/allpay/ 這個網站來測試整個流程(歐付寶有提供測試平台,測試信用卡 卡號)。
了解整個流程後,我們可以確定歐付寶正常無誤就可以開始串寫程式了。
payment.jsp, 這支是負責user填完資料驗證後,且在我方server有紀錄後,送給轉到歐付寶付款用的。
<%@include file="init.jsp" %> <% List<String> enErrors = new ArrayList<String>(); try { //ParamUtil.print(request); AllInOne oPayment = new AllInOne(); Hashtable<String, String> htFeedback = new Hashtable<String, String>(); //HttpServletRequest request = PortalUtil.getHttpServletRequest(actionrequest); enErrors.addAll(oPayment.CheckOutFeedback(htFeedback, request)); Set<String> key = htFeedback.keySet(); String name[] = key.toArray(new String[key.size()]); // id = id.Replace("_", "-"); String HashKey = ""; String HashIV = ""; //Get a payment result data String szMerchantID = ""; String szMerchantTradeNo = ""; String szPaymentDate = ""; String szPaymentType = ""; String szPaymentTypeChargeFee = ""; String szRtnCode = ""; String szRtnMsg = ""; String szSimulatePaid = ""; String szTradeAmt = ""; String szTradeDate = ""; String szTradeNo = ""; /* 使用 ATM 交易時,回傳的額外參數 */ String szBankCode = ""; String szVirtualAccount = ""; String szExpireDate = ""; String szCheckMacValue = ""; for (int i = 0; i < name.length; i++) { /* 支付後的回傳的基本參數 */ if (name[i].equals("MerchantID")) szMerchantID = htFeedback.get(name[i]); else if (name[i].equals("MerchantTradeNo")) szMerchantTradeNo = htFeedback.get(name[i]); else if (name[i].equals("PaymentDate")) szPaymentDate = htFeedback.get(name[i]); else if (name[i].equals("PaymentType")) szPaymentType = htFeedback.get(name[i]); else if (name[i].equals("PaymentTypeChargeFee")) szPaymentTypeChargeFee = htFeedback.get(name[i]); else if (name[i].equals("RtnCode")) szRtnCode = htFeedback.get(name[i]); else if (name[i].equals("RtnMsg")) szRtnMsg = htFeedback.get(name[i]); else if (name[i].equals("SimulatePaid")) szSimulatePaid = htFeedback.get(name[i]); else if (name[i].equals("TradeAmt")) szTradeAmt = htFeedback.get(name[i]); else if (name[i].equals("TradeDate")) szTradeDate = htFeedback.get(name[i]); else if (name[i].equals("TradeNo")) szTradeNo = htFeedback.get(name[i]); else if(name[i].equals("BankCode")) szBankCode = htFeedback.get(name[i]); else if(name[i].equals("vAccount")) szVirtualAccount = htFeedback.get(name[i]); else if(name[i].equals("ExpireDate")) szExpireDate = htFeedback.get(name[i]); } System.out.println("MerchantID = " + szMerchantID); System.out.println("MerchantTradeNo = " + szMerchantTradeNo); System.out.println("PaymentDate = " + szPaymentDate); System.out.println("PaymentType = " + szPaymentType); System.out.println("PaymentTypeChargeFee = " + szPaymentTypeChargeFee); System.out.println("RtnCode = " + szRtnCode); System.out.println("RtnMsg = " + szRtnMsg); System.out.println("SimulatePaid = " + szSimulatePaid); System.out.println("TradeAmt = " + szTradeAmt); System.out.println("TradeDate = " + szTradeDate); System.out.println("TradeNo = " + szTradeNo); /* 使用 ATM 交易時,回傳的額外參數 */ System.out.println("BankCode = " + szBankCode); System.out.println("vAccount = " + szVirtualAccount); System.out.println("ExpireDate = " + szExpireDate); out.println(""); } catch (Exception e) { enErrors.add(e.getMessage()); } finally { if (enErrors.size() == 0) out.println("1|OK"); else out.println("0|" + enErrors); } %>
bittorrent
則是user在歐付寶付款後,通知我方server用的,好讓我方server在資料庫中,紀錄成功入賬。
結尾:
基本上,只要欄位照著規格書填對。就沒有太大的問題,而看到官方有其他的問題則是參數中有 / - 等字串
所以過程中,我是已經避免此問題了。
若有問題,可以留言討論。
相关文章推荐
- Java 树形 数据 合并单元格导出Excel
- UVA 题目401 - Palindromes JAVA版
- 2015年12月10日 spring初级知识讲解(三)Spring消息之activeMQ消息队列
- javaday18-Map集合
- java自定义元数据
- Java学习----对象的状态和行为
- spring定时器在集群环境下的执行
- JDK1.5到JDK1.8增加的新特性
- Struts2标签简介
- HDU 1133 Buy the Ticket 卡特兰数 JAVA
- java学习——函数
- Java工程师成神之路~
- java使用poi解析2007以上的word文档中的表格与图片
- Eclipse 提交至Git@OSC
- Eclipse 3.7如何安装egit
- java项目命名规则
- eclipse classic添加html之类的web插件
- Eclipse中提高Android SDK Manager下载速度方法
- OGNL和Struts2标签
- spring-session源码解读-3