支付系統(tǒng)設(shè)計(jì):銀行卡支付(三)
![](http://image.woshipm.com/wp-files/img/90.jpg)
這一期,回到支付系統(tǒng)的核心業(yè)務(wù),即支付。每個(gè)電商公司的支付系統(tǒng)都已經(jīng)或多或少的實(shí)現(xiàn)了交易核心功能,可也都是一直在改進(jìn),總是不斷的有新的需求冒出來(lái)。所以這一期開(kāi)始,我們梳理一下:到底有哪些支付方式?每種支付方式都是怎么運(yùn)作的?
支付和交易
說(shuō)到支付就不得不提交易。這兩個(gè)概念在不同公司中是不一樣的。我們的定義是,交易是生成訂單;支付是對(duì)訂單進(jìn)行付款。 訂單生成過(guò)程我們以后另開(kāi)話題來(lái)說(shuō)。這一次重點(diǎn)介紹支付。而就支付行為來(lái)說(shuō),我們碰到的大部分都是單次支付,其次還有轉(zhuǎn)賬和退款。在蘋(píng)果推出訂閱支付后,國(guó)內(nèi)支付寶等也在陸續(xù)跟進(jìn)。 單次支付是我們用的最多的支付方式了,即一次結(jié)清所有款項(xiàng)。把單次支付走通了,其他支付方式也容易處理。 本期重點(diǎn)介紹單次支付。
銀行卡支付
先說(shuō)大家比較熟悉的銀行卡支付,它分為線上支付和線下支付兩種形式。線下支付就是通常說(shuō)的POS收單,這里不介紹這個(gè)內(nèi)容。對(duì)線上支付,按照卡的類(lèi)別,分為貸記卡支付,也叫motopay、ePOS,即信用卡支付;和借記卡支付。按照支付形態(tài),又分為認(rèn)證支付、網(wǎng)銀支付、快捷支付幾種形態(tài)。銀行卡網(wǎng)銀支付要求銀行卡必須開(kāi)通在線支付功能,而快捷支付并不需要開(kāi)通在線支付功能。主要利用支付驗(yàn)證要素(卡號(hào)、密碼、手機(jī)號(hào)、CVN2、CVV2等),結(jié)合安全認(rèn)證(例如短信驗(yàn)證碼),讓持卡人完成互聯(lián)網(wǎng)支付。
認(rèn)證支付
指用戶(hù)在綁卡時(shí),將卡信息提供給電商。這樣在支付時(shí),用戶(hù)無(wú)需再輸入這些信息,由電商在服務(wù)器側(cè)保留用戶(hù)的賬戶(hù)信息,比如身份證號(hào),卡號(hào),手機(jī)號(hào)。在用戶(hù)支付時(shí),無(wú)需再輸入這些內(nèi)容,最多就提供個(gè)密碼或者校驗(yàn)碼,就可以完成支付。這基本不會(huì)打斷用戶(hù)的使用體驗(yàn),所以也是電商喜歡的支付方式。但認(rèn)證支付最讓人詬病的就是安全性。一方面需要向電商暴露個(gè)人信息,一旦被竊取,資金就容易被盜走。還有在手機(jī)上執(zhí)行支付,一旦手機(jī)丟失,竊取者就可以輕而易舉的使用或者轉(zhuǎn)移資金。
快捷支付
快捷支付和認(rèn)證支付類(lèi)似,不同點(diǎn)在于綁卡之后,有些銀行接口會(huì)返回token,后續(xù)使用token來(lái)作為支付憑證,無(wú)需提供卡號(hào)信息,這樣電商也不需要本地保留卡號(hào)了。目前主要是銀聯(lián)有提供token接口。
網(wǎng)銀支付
相對(duì)來(lái)說(shuō),網(wǎng)銀支付要安全很多。網(wǎng)銀支付是由銀聯(lián)或者銀行提供支付界面,用戶(hù)必須在頁(yè)面上輸入卡號(hào),密碼等驗(yàn)證信息才可以執(zhí)行支付。大部分銀行還要求用戶(hù)使用U盾或者其它安全硬件。但安全和易用永遠(yuǎn)是個(gè)矛盾。網(wǎng)銀使用會(huì)打斷用戶(hù)體驗(yàn),增加用戶(hù)使用難度。對(duì)使用硬件加密的支付,不可能天天帶著U盤(pán)跑。另外網(wǎng)銀主要用在web端,在手機(jī)端,嵌入網(wǎng)銀頁(yè)面,還是比較難看的
支付流程
走一個(gè)具體的例子看看吧。比如用戶(hù)在電商系統(tǒng)中買(mǎi)了200塊錢(qián)的東西,然后通過(guò)浦發(fā)銀行卡做結(jié)算,用的是快捷支付。這個(gè)過(guò)程是:
用戶(hù)在交易界面上,提交訂單到交易系統(tǒng)中; 交易系統(tǒng)確認(rèn)訂單無(wú)誤后,請(qǐng)求支付系統(tǒng)進(jìn)行結(jié)算。這是在交易系統(tǒng)做的,后面工作就進(jìn)入支付系統(tǒng)。
用戶(hù)被引導(dǎo)到收銀臺(tái)頁(yè)面, 讓用戶(hù)確認(rèn)交易金額,選擇支付方式,調(diào)用支付系統(tǒng)接口。
支付系統(tǒng)接收到支付請(qǐng)求,驗(yàn)證請(qǐng)求的各個(gè)字段是否有問(wèn)題,確認(rèn)無(wú)誤后,調(diào)用支付網(wǎng)關(guān)執(zhí)行支付。
支付網(wǎng)關(guān)請(qǐng)求浦發(fā)銀行的快捷支付接口執(zhí)行支付。
支付網(wǎng)關(guān)接收到支付結(jié)果報(bào)文后,對(duì)結(jié)果報(bào)文做解析,獲取結(jié)果,并將結(jié)果告知交易系統(tǒng)。這可以通過(guò)URL或者RPC調(diào)用來(lái)實(shí)現(xiàn)。
商城系統(tǒng)收到支付結(jié)果后,開(kāi)始執(zhí)行后續(xù)操作。如果是支付成功,則開(kāi)始準(zhǔn)備出庫(kù)。這一步在交易系統(tǒng)中處理,這里不做介紹。
網(wǎng)銀支付,和快捷相比,就在第4步,插入一個(gè)步驟,將用戶(hù)導(dǎo)航到網(wǎng)銀頁(yè)面輸入支付信息,后續(xù)步驟是一樣的。在資金流上也是相同的。 而在第五步獲取返回結(jié)果上,一般銀行就直接同步返回,銀聯(lián)是分為同步和異步返回。同步告知操作成功或者失敗,異步告知扣款成功或者失敗。同步操作和異步操作都需要調(diào)用方提供一個(gè)回調(diào)的URL地址,銀聯(lián)會(huì)將參數(shù)附加在這個(gè)地址上。通過(guò)解析這些參數(shù)可以得到執(zhí)行結(jié)果。異步操作一般有2-3秒的延遲,取決于網(wǎng)絡(luò),以及該交易處理的復(fù)雜度。
資金流
上一節(jié)說(shuō)的是支付的信息流,那資金流應(yīng)該是怎么走的? 在第三步,會(huì)觸發(fā)資金流。資金從用戶(hù)個(gè)人賬戶(hù)上轉(zhuǎn)移到電商公司的賬戶(hù)。當(dāng)然,銀行也不是活雷鋒,這一筆交易是要收手續(xù)費(fèi)的。資金是實(shí)時(shí)到賬的,手續(xù)費(fèi)一般是按月結(jié)算。有按交易筆數(shù)計(jì)費(fèi)的,但大部分還是按照交易金額來(lái)收費(fèi)。
同行快捷支付是比較簡(jiǎn)單的場(chǎng)景,讓我們來(lái)逐步增加難度。如果支付系統(tǒng)沒(méi)有對(duì)接浦發(fā)銀行,那對(duì)浦發(fā)卡,就得走其它支付方式:銀聯(lián)或者第三方支付。
先說(shuō)銀聯(lián)快捷。銀聯(lián)提供的多種接入方式,常說(shuō)的快捷支付,在銀聯(lián)文檔中叫商戶(hù)側(cè)開(kāi)通token接口。通過(guò)這個(gè)接口,可以實(shí)現(xiàn)同行和跨行資金結(jié)算。不管收款行是浦發(fā)還是其它行,都可以完成結(jié)算。對(duì)本地和用戶(hù)來(lái)說(shuō),體驗(yàn)是一樣的。而在銀聯(lián)側(cè),后臺(tái)資金流處理卻不一樣。了解這個(gè)資金流,有助于在異常情況下,了解資金到底跑到哪里了。
如果收款行也是浦發(fā)銀行,銀聯(lián)發(fā)報(bào)文給浦發(fā),浦發(fā)使用內(nèi)部系統(tǒng)完成兩個(gè)賬戶(hù)間的轉(zhuǎn)帳,即時(shí)完成。
如果收款行是他行,比如工行。銀聯(lián)發(fā)指令給浦發(fā)和工行,分別完成各自賬戶(hù)上資金余額的增減,對(duì)個(gè)人和電商來(lái)說(shuō),這筆資金算是落地了。但實(shí)際資金流并不是立即發(fā)生。銀聯(lián)會(huì)在半夜做清結(jié)算后處理這筆資金。這個(gè)過(guò)程就是金融機(jī)構(gòu)之間的清結(jié)算了,一般不需要關(guān)注。
如果使用的是第三方支付,對(duì)用戶(hù)來(lái)說(shuō),處理的流程和銀聯(lián)一樣。但資金流會(huì)不一樣。 第三方支付在浦發(fā)和工行一般都會(huì)有落地的托管資金。 發(fā)生交易后,一般來(lái)說(shuō)不會(huì)產(chǎn)生跨行資金流動(dòng)。用戶(hù)在浦發(fā)行的錢(qián)會(huì)被結(jié)算到第三方支付在浦發(fā)行的托管賬戶(hù),而在工行的錢(qián),會(huì)由第三方支付在工行的賬戶(hù)打到客戶(hù)賬戶(hù)上。 這就降低了跨行資金流動(dòng)成本。
目前國(guó)內(nèi)主要銀行都提供快捷和直聯(lián)的接口。對(duì)電商來(lái)說(shuō),要對(duì)接哪些銀行是個(gè)需要考慮的問(wèn)題。怎么對(duì)接銀行,渠道和第三方支付。
銀聯(lián)Token支付
一般來(lái)說(shuō),大部分銀行都提供直聯(lián)和網(wǎng)銀接口,但不需要直接對(duì)接所有銀行。銀聯(lián)和第三方支付也提供直聯(lián)接口,可以直接對(duì)接國(guó)內(nèi)主要銀行。也不是所有銀行都被銀聯(lián)支持,這和銀聯(lián)簽約的接口有關(guān),需要在對(duì)接時(shí)咨詢(xún)銀聯(lián)。從我們使用情況看, 浦發(fā)借記卡、郵儲(chǔ)銀行卡是不支持的。 另外 交行、平安(含原深發(fā))、上海銀行、浦發(fā)、北京銀行,上述銀行卡需通過(guò) 這個(gè)地址 開(kāi)通銀聯(lián)在線支付業(yè)務(wù)。
對(duì)接銀行
大部分銀行提供的銀行卡支付接口,借記卡支付和貸記卡支付是不一樣的。但也有幾個(gè)好心的銀行,可以用一套接口同時(shí)開(kāi)通借記卡和貸記卡。點(diǎn)名贊一下這些銀行: 宇宙第一大行工商銀行和建設(shè)銀行。其他同學(xué)對(duì)接中如果也發(fā)現(xiàn)借記卡和貸記卡用一個(gè)接口的,也請(qǐng)及時(shí)告知。 作為國(guó)內(nèi)最保守的軟件團(tuán)隊(duì),和銀行對(duì)接時(shí)務(wù)必做好足夠的準(zhǔn)備。在商務(wù)談判完成、拿到銀行的接口文檔后,需要考慮兩個(gè)問(wèn)題:專(zhuān)線問(wèn)題、加密問(wèn)題。
專(zhuān)線問(wèn)題
首先是專(zhuān)線問(wèn)題。 大部分銀行對(duì)接是需要專(zhuān)線的。 與銀行溝通的時(shí)候,注意收集如下信息:
- 專(zhuān)線類(lèi)型: MSTP類(lèi)型或者SDH類(lèi)型。
- 專(zhuān)線接入點(diǎn):目前國(guó)內(nèi)主要是聯(lián)通、電信。
- 封裝類(lèi)型: HDLC或者PPP
- 專(zhuān)線代寬:默認(rèn)是2M
前置機(jī)IP,這個(gè)需要在銀行側(cè)和電商側(cè)進(jìn)行配置。 專(zhuān)線其實(shí)是在銀行和電商之間建立一個(gè)局域網(wǎng),需要雙方分配通訊IP。 其實(shí)這兩組IP都是NAT后的IP,銀行分配給我們的是電商真實(shí)的前置機(jī)IP經(jīng)過(guò)最外端的網(wǎng)絡(luò)防火墻轉(zhuǎn)換后的IP段,后者也是對(duì)方的真實(shí)前置機(jī)IP經(jīng)過(guò)轉(zhuǎn)換后的IP段。 出于安全考慮,雙方都不會(huì)將真實(shí)IP暴露出去,所以要NAT。
接入地址:即電商這邊機(jī)房的地址。
這些專(zhuān)業(yè)名詞,可以自己檢索,太專(zhuān)業(yè)了,其實(shí)我也不懂。從可靠性角度考慮,一般建議從聯(lián)通、電信各拉一條線路出來(lái)。一旦有一個(gè)線路出問(wèn)題了,也不會(huì)導(dǎo)致所有交易被終止了。不需要專(zhuān)線的銀行接口有:浦發(fā)、工行、交行信用卡等。 需要專(zhuān)線的有中行、農(nóng)行、建行等。一般專(zhuān)線需要1個(gè)月左右的時(shí)間,包括銀行側(cè)的申請(qǐng)、施工時(shí)間。
加密問(wèn)題
其次是加密問(wèn)題。部分銀行,如中行,前置要求使用加密機(jī)。此處加密機(jī)的常用功能有三方面:
- MAC加密(完整性);
- 支付會(huì)話\密碼加密(安全性);
- 密鑰交換加密(防截?。?。
對(duì)開(kāi)發(fā)來(lái)說(shuō),加密機(jī)的主要作用,是讓黑客都無(wú)法從內(nèi)存中看到密碼。 不是做廣告,國(guó)內(nèi)對(duì)接銀行一般就用江南天安的加密機(jī)了
對(duì)接銀聯(lián)
對(duì)接銀聯(lián)比對(duì)接銀行簡(jiǎn)單, 不需要專(zhuān)線,不需要加密機(jī)。 不過(guò)需要獲取ADSS認(rèn)證。 銀聯(lián)最近在推Token接口,有兩套接口,一套是銀聯(lián)側(cè)開(kāi)通,一套是商戶(hù)側(cè)開(kāi)通。前者類(lèi)似網(wǎng)銀支付,后者類(lèi)似快捷支付。 務(wù)必要求接入后者接口啊?;旧献x完接口文檔就知道怎么寫(xiě)代碼了。
接下來(lái),這里將分別介紹如何對(duì)接第三方支付、應(yīng)用內(nèi)支付等內(nèi)容。敬請(qǐng)關(guān)注。
相關(guān)閱讀
支付系統(tǒng)設(shè)計(jì):支付系統(tǒng)的賬戶(hù)模型(一)
支付系統(tǒng)設(shè)計(jì):對(duì)賬處理(二)
作者:鳳凰牌老熊,程序員 & 架構(gòu)師,來(lái)自中科大的本科,研究生在軟件所學(xué)習(xí)。先后在中科輔龍、三星(中國(guó))研究院和國(guó)內(nèi)一些大型的互聯(lián)網(wǎng)公司呆過(guò)。在中科輔龍公司負(fù)責(zé)電子政務(wù)內(nèi)容管理系統(tǒng)建設(shè),負(fù)責(zé)研發(fā)龍馭系列產(chǎn)品的研發(fā),這款產(chǎn)品最終實(shí)施到2000多個(gè)電子政務(wù)網(wǎng)站上,期間也參與了一些支付反洗錢(qián)以及支付系統(tǒng)的建設(shè)。之后在三星中國(guó)研究院,負(fù)責(zé)自然語(yǔ)言處理(NLP)以及智能家居相關(guān)項(xiàng)目。智能家居項(xiàng)目在2014CES消費(fèi)電子展上作為三星重點(diǎn)項(xiàng)目推介。2014年開(kāi)始加入愛(ài)奇藝公司,負(fù)責(zé)數(shù)據(jù)倉(cāng)庫(kù)和支付系統(tǒng)的建設(shè)。
本文由@鳳凰牌老熊(微信公眾號(hào):shamphone) 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理 。未經(jīng)許可,禁止轉(zhuǎn)載。
2c問(wèn)題不大,2b未夠。企業(yè)級(jí)支付的場(chǎng)景更復(fù)雜,托管、大額小額、賬期、票據(jù)、聚合、直付、金融代收付。。。單一個(gè)對(duì)賬能搞死人。
作者的寫(xiě)的文章很有深度!~
一看就是有研發(fā) 和 產(chǎn)品 + 其他領(lǐng)域的 老司機(jī);
順便問(wèn)下:支付流程啥的 第一步、第二步 能否標(biāo)出來(lái),或者有個(gè)時(shí)序圖啥的。??粗X袋疼。。。
信息量好大受教了,樓主辛苦
如果使用的是第三方支付,對(duì)用戶(hù)來(lái)說(shuō),處理的流程和銀聯(lián)一樣。但資金流會(huì)不一樣。 第三方支付在浦發(fā)和工行一般都會(huì)有落地的托管資金。 發(fā)生交易后,一般來(lái)說(shuō)不會(huì)產(chǎn)生跨行資金流動(dòng)。用戶(hù)在浦發(fā)行的錢(qián)會(huì)被結(jié)算到第三方支付在浦發(fā)行的托管賬戶(hù),而在工行的錢(qián),會(huì)由第三方支付在工行的賬戶(hù)打到客戶(hù)賬戶(hù)上。 這就降低了跨行資金流動(dòng)成本。
—— 這個(gè)有點(diǎn)迷惑,如果第三方在浦發(fā)跟工行都有資金賬戶(hù),那在使用第三方支付的時(shí)候,根據(jù)支付銀行選擇相應(yīng)的收款行做資金結(jié)算?只有這樣才不會(huì)有跨行資金流動(dòng),那這樣浦發(fā)支付的資金到浦發(fā)托管賬戶(hù)很好理解,為什么最后還會(huì)有一步,工行的錢(qián)打到客戶(hù)賬戶(hù),不是已經(jīng)選用浦發(fā)做結(jié)算銀行了?
我也這段沒(méi)看懂
如果我沒(méi)看錯(cuò)的話,應(yīng)該是當(dāng)用戶(hù)的付款賬戶(hù)是“浦發(fā)”,收款賬戶(hù)是“工行”時(shí)。當(dāng)使用的是第三方支付渠道時(shí),該第三方支付對(duì)接了浦發(fā)和工行,在這兩個(gè)地方都有資金賬戶(hù),當(dāng)用戶(hù)發(fā)起付款或收款操作時(shí),對(duì)于第三方來(lái)說(shuō)資金是直接在不同行的資金賬戶(hù)中先流轉(zhuǎn),而后再跟不同行進(jìn)行結(jié)算平賬?!具@里的用戶(hù)不一定是個(gè)人用戶(hù)可能是某平臺(tái),平臺(tái)的付款和收款賬戶(hù)不一致的情況下,發(fā)生的資金流轉(zhuǎn)就會(huì)不一樣?!?/p>
一手入金,一手墊付,支付機(jī)構(gòu)內(nèi)部做賬
因?yàn)榘凑毡尘埃脩?hù)的開(kāi)戶(hù)行(發(fā)卡行)是浦發(fā)銀行,商戶(hù)的開(kāi)戶(hù)行是工行,而第三方支付機(jī)構(gòu)在浦發(fā)銀行和工行都開(kāi)了戶(hù)。
以下是資金流:
1. 用戶(hù)在浦發(fā)銀行開(kāi)通的賬戶(hù) -> 第三方支付機(jī)構(gòu)在浦發(fā)銀行開(kāi)通的托管資金賬戶(hù)
2. 第三方支付機(jī)構(gòu)在工行開(kāi)通的托管資金賬戶(hù) -> 商家在工行開(kāi)通的資金賬戶(hù)
因此,免去了從浦發(fā)銀行到工行的跨行資金流動(dòng)。
資金是實(shí)時(shí)到賬的,手續(xù)費(fèi)一般是按月結(jié)算?—資金是實(shí)時(shí)到達(dá)商家賬戶(hù)的么?從清結(jié)算那幾篇文章看,中間應(yīng)該還有個(gè)清結(jié)算的過(guò)程,一般不是T+1結(jié)算的么?
這里說(shuō)的資金到賬是說(shuō)的持卡人賬戶(hù)的錢(qián)是實(shí)時(shí)的,商戶(hù)賬戶(hù)的收入是等夜里等銀聯(lián)清算完第二天才入賬,銀聯(lián)要扣除手續(xù)費(fèi),是月結(jié)。我是這么理解的。
您好,我能加下你微信嗎?,我想更好的向您學(xué)習(xí)。我微信號(hào)是chenjie85691699
加油
不錯(cuò),學(xué)習(xí)了
熊哥一看就是老司機(jī)。
LZ能否談下第三方支付,感覺(jué)接觸過(guò)很多創(chuàng)業(yè)公司,剛開(kāi)始的時(shí)候根本用不上這么多支付路由,前期流水也不高,量也不大。對(duì)接銀行的支付系統(tǒng)的話,還要專(zhuān)人去跑,流程復(fù)雜。相反現(xiàn)在第三方支付做的比較成熟,支付場(chǎng)景和安全性都有提高,部署更快。
近期會(huì)出一個(gè),謝謝關(guān)注。