電商網站的快捷支付流程剖析
快捷支付指用戶在電商網站上執行支付時,不需要輸入卡信息,僅根據短信或者其他的驗證方式確認身份后,就可以執行扣款的支付方式。 這是目前電商網站采用的主要支付方式。 快捷支付分為首次支付和非首次支付,他們的流程是不一樣的,區別就在于首次支付的時候,用戶需要綁卡。而非首次支付則是直接使用已經綁定的卡來執行扣款,僅需做身份驗證就行。注意,這里介紹的是電商網站為業務提供的快捷支付接口,而不是銀行或者其他渠道提供給電商的快捷支付接口。
一、支付場景
快捷支付第一步是要求用戶做綁卡操作。綁卡是將用戶的銀行卡信息提供給電商,以后電商就用這個信息去銀行完成支付。綁卡實際上是一個授權,讓用戶允許商家自動從他的賬戶上扣除資金。所以綁卡也叫簽約,用戶和銀行,商家的三方簽訂的支付合約。 但我們知道,綁卡對用戶和商戶來說都存在巨大風險。如果說用戶綁卡是圖省事,那商戶為什么要做這個事?快捷支付在支付場景上的優勢在如下幾個方面:
1. 提升支付成功率
網銀支付需要用戶去銀行開通網銀,而對快捷支付來說,這并不是必須的。 這樣使得可以使用快捷支付的用戶群體得到擴展。 使用網銀支付成功率在20%左右,銀聯直聯成功率一般在50%左右,銀行卡直聯可以提升到70%左右。這是相當可觀的數據。所以,當你看到綁卡送洗衣粉之類做法時,不需要擔心商家會不會賠本。
2. 提升支付安全性
網銀是需要用戶自己來保證支付環境的安全。在支付寶推出快捷支付和卡通支付之前,網銀還是主要的支付方式,這導致各種的木馬,釣魚病毒肆虐,目標之一就為竊取用戶的銀行卡信息。銀行發放U盤U盾,各種的證書,都是為了保證網銀支付的安全,這也帶來了各種支付的不便。 哪天忘了帶了,就無法完成支付。而快捷支付是由商家來保證支付信息的安全,可靠性得到保障。當然,至于商家如何保證這些信息安全,還有待商榷。總的來說,這也比個人自己抵御黑客黑產要靠譜多了。
3. 提升用戶體驗
想想網銀支付的流程,用戶在跳轉到銀行頁面后,還得插入U盾,各種的核對。產品經理應該知道,每增加一個操作,都會帶來一定的掉單率。 而快捷支付僅需在第一步完成綁卡后,以后的扣款,最多一個短信就搞定了,敗家更方便。 在快捷支付中,綁卡和支付都不需要和渠道打交道,都是通過服務器來中轉。而且在綁卡成功后,操作都在服務器上進行。這使得這種支付方式可以跨平臺使用。手機,PC都可以。甚至在其他終端完成綁卡后,可以在電視,嵌入式設備上做支付。
4. 獲取可靠支付數據
快捷支付還有一個很好的副作用, 那就是得到真實用戶信息,特別是身份證信息、銀行卡號、手機號、驗證方式、真實姓名等。再結合用戶的訂單信息,大家就可以知道為什么淘寶、京東等這些電商網站現在的商品推薦會這么精準了。
二、綁卡流程
怎么綁卡?我們知道對接銀行有兩種途徑,直接對接銀行接口和通過銀聯來間接對接。這兩種情況下綁卡處理也不同。 直觀的,電商網站會在用戶后臺提供一個綁卡的入口,讓用戶直接綁卡。以支付寶綁卡流程為例,我們可以體驗下:
這里有如下要點:
- 只能綁自己的卡,這主要從安全角度考慮。作為自己的卡,指銀行卡在銀行預留的姓名和身份證與網站預留的一致。
- 需要用戶在銀行側預留的手機號進行短信驗證。但不是所有銀行都需要。這個時候,為了統一處理,可以考慮自己發驗證短信。
對這個入口不要指望太多,更多的用戶是在支付中綁卡。也就是提交訂單后,發現沒有銀行卡了,就開始綁卡。 和純綁卡流程不同的是,最后一步,綁卡成功后,一般都同時完成支付。有些渠道會提供綁卡并支付的接口,減少交互次數。
為了保證卡的安全,綁卡有這些前置需求:
用戶必須已經綁定了手機號。該手機號用于修改支付密碼。
用戶需設置了支付密碼。支付密碼不同于登錄密碼。
針對用戶不同狀態,綁卡流程上有區別。當然,綁卡是安全操作,要求用戶必須登錄到系統中。為了避免和服務器端的交互被劫持,所有操作必須在安全協議中進行,即使用https。
1. 輸入卡號
用戶輸入卡號,系統對卡號執行初步驗證。 驗證的依據是卡bin和LUHN算法。參見支付系統之銀行卡支付。 當然,還有些系統會提供掃卡識碼的功能,比如微信支付。 掃碼識別的準確率可以達到99%,有些卡的卡號顏色和背景色一致的,就會識別出錯。 如果用戶沒細看,進入下一步,就會報告錯誤了,這種錯誤還比較難發現。自動識別卡號,還需要考慮在識別錯誤時如何圓過去的問題。
2. 獲取卡信息
首次綁卡需要提供卡信息。借記卡需要卡號,用戶真實姓名和身份證,這個所有銀行都一樣。(有不一樣的,留言告知,謝謝) 信用卡就復雜點。大部分信用卡還需提供CV碼和有效期。但是如果和銀行關系好,拿到合適的接口,把這兩個因素都免了,也是有可能的。
3. 要素驗證
首先在服務器端做驗證。主要是驗證卡是否已經被綁過。 如果一個用戶有多個賬戶,系統還需要考慮是否支持這些賬戶都綁到一個卡上。 接著調用銀行綁卡驗證接口進行綁卡。這里有一個四要素驗證的概念。由于國內要求實名制,所有銀行卡都是實名辦理的,所以銀行可以驗證姓名,身份證號,銀行卡號和手機號是不是一致的。如果沒問題,則會發短信到手機上。
這里還有幾個注意點:
1.關于手機號。大家都知道,銀行預留的手機號一般都是辦卡的時候留的,過了幾年,換手機了,很多人就忘了同步到銀行。所以很多銀行就不驗證手機號。
2.關于驗證短信,手機號都不是必須的,那短信就可能都不發了。這在流程設計時需要統一處理。銀行不發短信就的自己發。
3.重復綁卡問題。如果系統支持多賬戶,那不可避免的出現一個人綁卡到多個賬號上。渠道側綁卡,有接口支持重復綁卡,有些是不支持的。所以如果需要重復綁卡,還得在服務器端處理。
4. 執行綁卡
用戶輸入短信驗證碼并確認綁卡,服務器端將用戶實名信息以及短信驗證碼組合形成報文,發送給銀行,執行簽約操作。銀行側簽約成功后,返回簽約號給商戶。 這一個處理邏輯放在支付渠道側介紹。銀行會返回如下結果:
簽約成功:這意味著可以建立簽約關系。而簽約關系在支付系統中則通過虛擬賬戶來表示。 具體的賬戶設計參見賬戶模型。
重復簽約: 按照業務考慮是否支持重復簽約。 一般針對一個銀行卡僅保留一個簽約關系,建立一個虛擬賬戶。
簽約失敗: 需要提示具體失敗原因。
三、扣款流程
在完成簽約后,支付處理就相對簡單不少。扣款流程如下:
流程要點:
訂單系統生成訂單后,請求支付系統執行支付;
支付服務器生成支付記錄,請求渠道執行支付。如果該渠道需要短信支持,請求渠道發送短信。
服務器端在生成支付記錄后,請求渠道執行支付。對于需要短信驗證或者其他身份驗證方式的支付行為,還需要首先請求渠道發送短信,之后讓用戶輸入短信驗證碼。之后將訂單、短信驗證碼、支付金額送到渠道側,執行支付。
這里需要關注如下問題:
1. 訂單有效期
用戶必須在訂單有效期內完成支付。支付時,必須為每個訂單設置有效期。這個有效期不能太長,一般不會超過一天。有效期可以從下單開始算,避免使用相對日期。 在執行支付時,需要驗證下訂單是否還在有效期內。
2. 同步和異步處理
銀聯提供的商戶側開通快捷支付接口,不同步返回最終扣款結果,而是通過異步通知的方式來返回。 異步通知會多次調用回調接口, 直到調用成功。 所以,一個訂單支付成功的通知,有可能會收到多次回調。
四、解約流程
解約流程一般是由用戶自己發起。當然,存儲在本地的簽約信息只是被設置為無效,而不是實際刪除。 解約時,還需要注意相關的訂單是否都已經完成。
五、退款流程
沒有平白無故的退款。支付都是由交易調起的,那退款就都對應的由退貨發起的。 針對已經扣款成功的交易執行退款。如果交易還在進行中,比如渠道側還沒有返回結果,則執行退款會導致狀態不可預知。
注意,退款的錢并不一定立即到賬。不同銀行、不同渠道到賬時間不一樣。
六、接口概述
一般來說,快捷支付需要提供如下接口:
簽約, 也叫“綁卡簽約”、“開通交易”等,指用戶在商戶網站上開通快捷支付的功能,他需要將銀行卡相關信息提供給電商。
解約, 也叫“解綁卡”, 指用戶取消在該網站上的快捷支付功能。一般也會刪除該用戶在該網站上的相關的銀行卡信息。
扣款, 也叫“支付”, 指用戶使用簽約的卡來執行一筆扣款。
退款, 針對已經扣款成功的交易執行退款操作,一般同時也會把用戶權益或者對應的訂單撤銷。并不是所有訂單都可以執行退款。
查單, 查詢某次交易的處理狀態。
簽約查詢, 即檢查某個用戶是否已經開通了簽約功能。
七、備份通道
由于快捷支付是常用的一個通道,其帶來的問題是,如果這個通道出問題了,應該怎么辦?回顧之前的文章,我們提到過,銀行卡快捷支付不僅僅只有發卡行的通道,銀聯、第三方支付也都可以提供銀行卡快捷支付接口。就發卡行來說,也不僅僅總行通道,很多發卡行的各省分行,由于歷史因素,手頭也有通道資源。 這也為我們實現通道切換提供了可能。 切換支付通道最大的問題是如何解決簽約。 比如用戶原來使用工行快捷支付接口來完成工行借記卡支付。某一天,工行通知接口要維護,不可用了,這就需要提前把工行接口切到其他備用通道,比如銀聯接口。 當然,直接切換是不行的,和銀聯還沒簽約呢。 那如何處理備用通道? 關于備用通道的簽約時間。可以在用戶簽約到主通道時,同時簽約到備用通道,這種情況要求備用通道必須是無短信驗證的,否則一次簽約發兩條短信,用戶必須會懷疑的。還可以在第一次支付的時候簽約,這時候將簽約支付短信一并發出,避免影響用戶體驗。 關于通道選擇,參考支付路由設計一文。
八、接口實現
一般來說,快捷支付接口可以通過封裝如下通道接口來實現:
當然,首先是銀行自己提供的快捷支付接口;
銀行的代扣接口;
銀聯的客戶側開通Token接口。
第三方支付的代扣接口。
九、安全與合規
和銀行卡對接,特別是快捷支付接口,有三個重要的合規文檔,必須通讀。
《非銀行支付機構網絡支付業務管理辦法》(中國人民銀行公告〔2015〕第43號公布)
中國人民銀行關于進一步加強銀行卡風險管理的通知, 銀發〔2016〕170號
嚴禁留存非本機構的支付敏感信息(包括銀行卡磁道或芯片信息、卡片驗證碼、卡片有效期、銀行卡密碼、網絡支付交易密碼等),確有必要留存的應取得客戶本人及賬戶管理機構的授權。
各商業銀行、支付機構應在客戶端軟件與服務器、服務器與服務器之間進行通道加密和雙向認證,對重要信息關鍵字段進行散列或加密存儲,保障信息傳輸、存儲、使用安全。
自2016年12月1日起,各商業銀行、支付機構應使用支付標記化技術( Tokenization),對銀行卡卡號、卡片驗證碼、支付機構支付賬戶等信息進行脫敏處理,并通過設置支付標記的交易次數、交易金額、有效期、支付渠道等域控屬性,從源頭控制信息泄露和欺詐交易風險。
嚴格限制使用初始交易密碼并提示客戶及時修改,建立交易密碼復雜度系統校驗機制,避免交易密碼過于簡單(如“111111”、“123456”等)或與客戶個人信息(如出生日期、證件號碼、手機號碼等)相似度過高。
3. 網絡支付報文結構及要素技術規范(V1.0版), 銀辦發[2016]222號
【本文為51CTO專欄作者“鳳凰牌老熊”的原創稿件,轉載請通過微信公眾號“鳳凰牌老熊”聯系作者本人】