最近在接入各種支付機構,鑒于各種產品業務需求不同,具體開發實現不盡相同,不討論具體業務實現。
銀聯官方商家技術服務網站提供了很多可接入產品,本文僅討論以下幾種收款產品:
- 網關支付(和手機網頁支付(WAP支付)其實一樣)
- 手機控件支付
- 無跳轉支付
一、網關支付&WAP支付
先討論這兩種支付方式,比較簡單而且容易理解,這兩種支付方式只需要我們將請求參數值設置好,簽名,組裝成HTML返回給前臺界面[java:response.getWriter().write()
]即可。
HTML報文示例:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form id="pay_form" action="https://101.231.204.80:5000/gateway/api/frontTransReq.do" method="post">
<input type="hidden" name="txnType" id="txnType" value="01" />
<input type="hidden" name="frontUrl" id="frontUrl" value="http://127.0.0.1:8080/ACPSample_B2C/frontRcvResponse" />
<input type="hidden" name="channelType" id="channelType" value="07" />
<input type="hidden" name="currencyCode" id="currencyCode" value="156" />
<input type="hidden" name="merId" id="merId" value="777290058110048" />
<input type="hidden" name="txnSubType" id="txnSubType" value="01" />
<input type="hidden" name="txnAmt" id="txnAmt" value="10000" />
<input type="hidden" name="version" id="version" value="5.0.0" />
<input type="hidden" name="signMethod" id="signMethod" value="01" />
<input type="hidden" name="backUrl" id="backUrl" value="http://222.222.222.222:8080/ACPSample_B2C/BackRcvResponse" />
<input type="hidden" name="certId" id="certId" value="68759663125" />
<input type="hidden" name="encoding" id="encoding" value="UTF-8" />
<input type="hidden" name="bizType" id="bizType" value="000201" />
<input type="hidden" name="signature" id="signature" value="q75cUw1E90Z/3zoPLoaWwOsHoiLmw4PvD1xgUIapsxKY3tcQpHmI/Y/4oKsG3lli4DpU63EoZScTEZNjdOvorAd5+DTSmKNLECVSBxy7mRTfTVISX/jYuVuc87ogdro8GpT4sHaY0jwVjp1dWalOSQ/jfoYniAggUuhSgQtz/0dSH//R4GVa3sP22jJjHWeWUVFJi5bMNeYe57qqcdZ5Ga04rnKnGuIpIQC3I3GosKziRtRGjdo+OYFmbl28W3QwB5qohG1QIqPvwpDM6WUlVbStuEVBf/FwpZ8yuai8WXOU+GQ9kZYuRSoSDNrRR9/jmYqkwyJDEMtWsl9pehQ4Og==" />
<input type="hidden" name="orderId" id="orderId" value="20160303100902" />
<input type="hidden" name="txnTime" id="txnTime" value="20160303100902" />
<input type="hidden" name="accessType" id="accessType" value="0" />
</form>
<script type="text/javascript">document.all.pay_form.submit();</script>
</body>
</html>
不清楚的可以試試復制下上面的代碼保存為.html格式的文檔,然后用瀏覽器打開,即可跳轉到銀聯頁面,付款成功后銀聯會通過你請求參數中的backUrl通知你。
二、手機控件支付
手機控件支付更簡單,不用組裝報文,但是流程上與網頁支付不同,需要先跟銀聯交互一次,拿到tn(銀聯受理訂單號),然后客戶端就可以調起銀聯手機控件進行支付了。
三、無跳轉支付
介紹無跳轉支付之前,需要先了解銀聯的兩個概念:
- 后臺消費
- 前臺消費。
前臺消費:通過瀏覽器提交請求到銀聯的消費。
后臺消費:直接通過商戶后臺提交請求到銀聯完成支付,相對于前臺消費,無需頁面跳轉。
無跳轉支付就是后臺支付,主要是為了方便用戶完成交互過程(前提是用戶銀聯卡已開通銀聯全渠道支付),用戶選擇銀聯卡/輸入卡號后,向銀聯“獲取短信”接口發送獲取短信驗證碼請求,銀聯會將短信驗證碼發送到卡號(accNo)對應的綁定手機上,用戶輸入短信驗證碼后,后臺將卡號(accNo)和短信驗證碼(smsCode)提交到銀聯,即可完成消費過程。
所以后臺消費的整個過程可以理解為這樣(假設卡已經開通了銀聯全渠道消費):
客戶端/前臺界面選擇銀行卡/輸入卡號-->點擊獲取短信-->后臺發送報文到銀聯獲取短信驗證碼-->銀聯將短信驗證碼發送到卡號綁定的手機-->用戶輸入驗證碼-->點擊“消費/購買”-->后臺將包含卡號(accNo)和短信驗證碼(smsCode)的報文發送到銀聯-->消費完成。
```sequence
客戶端->客戶端: 選擇卡/輸入卡號
客戶端->后臺:請求短信驗證碼
后臺->銀聯:調用發送短信接口
note right of 銀聯:發送驗證碼到\n卡號綁定的手機
note right of 客戶端:用戶輸入驗證碼
客戶端->后臺:消費
后臺->銀聯:發送消費報文\n包含accNo和smsCode
```