產品設計:解讀銀行卡支付背後的原理

2020-12-22 人人都是產品經理

現代生活已經離不開的銀行卡支付,背後的產品設計還是大有門道的。本文作者對銀行卡支付的原理進行了分析梳理,與大家分享。

上次寫了一篇『輕輕一掃,立刻扣款,付款碼背後的原理你不想知道嗎』 ,今天小黑哥再來跟大家聊聊支付。

雖然現在我們主流的支付方式是使用支付寶/微信支付,但是當我們餘額不足,或者選擇從銀行卡扣款時,將就會使用到銀行卡支付。

所以今天我們就來來講講銀行卡支付的相關原理,科普一下銀行卡支付整個流程。

銀行卡支付可以將其分為線上支付與線下支付。其中線下支付分類就比較簡單,就是我們平常在商城購物時,POS 機刷卡支付。

而線上支付分類就比較多了,根據銀行卡類別,可以分為信用卡支付與借記卡支付。按照支付行為,我們又可以將其分為快捷支付,網銀支付,Token 支付。

今天我們主要來聊聊快捷支付與網銀支付,這兩種方式是目前比較流行的方式。其他幾種方式,我們可以後面再來聊聊。

一、網銀支付

首先我們來聊聊網銀支付,這種方式在 10 年前,應該是最主流線上支付方式。

我們以電商購物為例,我們在網站上下單之後,選擇銀行卡支付通常會跳轉到一個收銀臺頁面。然後在收銀臺頁面我們選擇相關銀行,點擊到銀行支付最後將會跳轉到相應的銀行頁面。

這個收銀臺頁面可能是商戶的頁面,也可能是支付機構的頁面,這個跟網銀支付對接模式有關。

跳轉到銀行頁面之後,我們首先需要下載按照銀行安全控制項,這樣我們才能輸入銀行卡的相關信息。其次我們還需要使用銀行給的安全設備,比如 USB 盾,令牌器,令牌碼等。

在銀行網站支付成功之後,就可以點擊返回同步跳回到電商的網站,整個流程如下圖所示:

網銀支付流程

後臺支付流程如下:

可以看到網銀支付整個鏈路非常長,任何一步都可能發生失敗,所以支付成功率不會很高。另外有部分銀行網銀頁面只能在 IE 中打開,而且還有可能是很老版本的 IE。再加上網銀支付為了保證安全性,還需要使用 U 盾,安裝安全插件。

這個過程說實話還是很複雜,還記得當年使用某行網銀充值購買黃鑽的時候,搞了一下午都沒成功的,各種證書安裝失敗啥的。第一次在線充值,就這麼失敗告終。

感謝某行為我省下 10 元零花錢~

二、快捷支付

快捷支付,指的用戶提供卡信息給電商等商戶,商戶會在後臺將卡信息傳遞給支付機構,然後進行協議綁定。一旦綁定成功,下次支付,無需再讓用戶提供卡號等信息。

還是以電商購物支付為例,首次支付,需要經歷綁卡過程。


扣款成功之後,前往銀行 APP 可以查到該卡與支付機構綁定記錄。


歷次在電商網站下單支付時,由於電商網站已保存記錄,所以無需再輸入卡信息。歷次支付流程如下:


上圖展示歷次支付過程還需要輸入驗證碼的情況,這一步其實還可以做到一定額度的免密支付。

快捷支付接口一般可以歸為兩類:

  1. 籤約/支付
  2. 代扣支付

1. 籤約/支付

籤約/支付需要分為兩個步驟:

  1. 籤約申請/籤約驗證
  2. 支付

籤約過程需要傳入銀行卡信息,銀行卡號,戶名,身份證號,手機號,信用卡的話可能還需要傳入 cvv2 以及有效期。這個過程主要是為了鑑權,校驗銀行卡信息的正確性。

一旦支付機構/銀行端信息校驗成功,將會下發簡訊。用戶回填簡訊,就代表同意開通快捷支付,建立綁定關係。綁定成功之後,支付機構將會返回給商戶協議號

支付過程,商戶就可以拿著協議號進行扣款。

整個後臺流程如下所示:

2. 代扣支付

代扣支付的過程相比籤約/支付就比較簡單,每次直接上送銀行卡信息,就可以直接扣款。代扣支付原則上可以做到整個過程無密支付,即不需輸入驗證碼,完成扣款。

流程較為簡單,詳情可以參考快捷支付支付過程。

相比於籤約/支付過程,代扣支付看起來更快捷,但是這種方式安全風險就會比籤約支付大,可能就會出現盜刷現象。原本代扣接口本應適用於水電煤等扣費場景,但是發展過程一度被用於金融支付等場景。

現在這類接口正在慢慢下線,正在被新的商業委託接口(類似於籤約/支付)所代替。

雖然快捷支付支付體驗好,整個流程無需跳轉到銀行頁面,支付過程不會被打斷,支付成功率高。

但是易用跟安全性,永遠都是矛盾。由於這個過程用戶向商戶提供銀行卡相關信息,這些數據如果一旦被竊取,資金就可能會被盜取。另外,快捷支付,手機驗證碼可能是最後一道防線,手機如果丟失,那麼銀行卡資金也可能被盜取。

三、銀行支付相關問題

總得來說,對接銀行卡支付渠道,整個過程不是很難的,無非就是按照接口文檔,拼接參數,然後做一些相應的調試。但是這個過程有些點需要特別注意。

1. 加籤/驗籤

銀行卡支付一般通過網際網路傳輸,這個過程為了防止報文被串改,通常會採用 RSA2 ,國密等加密算法加密報文,得到籤名串,然後一起上送給支付機構。

支付機構方會進行相應的驗籤,驗籤失敗,就會駁回支付請求,這樣可以有效保證支付請求是從合法商戶發起。所以對於商戶來說,一定要保存好相應公私鑰,不要隨意洩漏。

另外,對於支付請求的響應信息/網銀結果異步通知,支付機構端也會進行加籤。商戶端一定要進行驗籤,只有驗籤通過才能進行下一步。

ps:發送請求由於不加籤,交易無法進行,所以這一步肯定會做的。

但是返回信息你不進行驗籤,也能處理報文,這個可能就會被忽略。

我第一次對接相關支付渠道的時候,嫌麻煩,就沒進行驗籤。現在想想,真的是心大。。。

2. 終態判定

對於快捷支付這類同步接口,對於支付接口請求響應消息,我們需要判定請求是否成功,需要根據接口返回的響應碼。有些接口也可能返迴響應碼與支付狀態,那麼我們就需要根據兩者結合起來一起判斷。

這個過程,不是說除了成功的響應碼之外,其他都算失敗。我們需要根據相關的接口文檔進行相應的分類,有些如餘額不足,卡要素不正確等錯誤碼,當然可以明確歸類為失敗。

但是比如一些處理中,或者系統異常等返回碼,這種無法明確到底是成功還是失敗的,我們不能置為失敗,需要結合支付查詢或者異步通知結果,然後在做處理。

對於網銀支付這類同步接口,這類只能等待渠道端的異步通知。一般來說,渠道端只會通知的成功的支付訂單。

這個具體根據渠道端接口文檔。

一般來說渠道異步通知接口,若沒有給渠道端異步通知返回成功響應,該通知將會重複通知,直到到達一定次數或者得到成功的相應。

所以接受到異步通知之後,一定要內部邏輯處理成功之後,才能返回成功響應碼給渠道端。這樣即使內部邏輯處理錯誤,還能再次通過異步通知處理內部邏輯。

另外還需要注意內部處理邏輯的冪等性

3. 請求參數相關

(1)支付金額

請求過程一定要注意接口文檔中支付金額的單位,是分,還是元。如果不注意單位,很有可能造成少收,多收的情況。

對於成功響應的信息,我們還需要注意校驗上送金額與扣款金額(如果有返回的話)一致性。如果不一致,**一定不要將訂單更新為成功,**及時人工介入查單。

最後支付渠道上線之後,還需要做一些真實扣款,比如小額 0.1,渠道最大額度測試。扣款成功之後,還要及時查看銀行卡真實扣款金額是否與上送金額一致,原因見下文。

(2)請求流水號(訂單號)

除了支付金額,我們還需要注意請求流水號/訂單號唯一性,需要使用唯一 id 當做請求流水號,切勿使用時間戳等方式。

對於重複流水號,如果未成功,是允許重複支付的。如果成功,不允許再次支付的。但是也不乏有些機構接口沒做好這部分校驗。

舉一個自己趟過的坑,一個幾萬的教訓。之前對對接過某銀行的系統,測試的時候為了方便,直接採用時間戳當流水號。

上線時未及時發現這個問題,某天恰好同一秒產生兩筆流水號一樣的單子,上送給銀行。然後對方返回兩筆都收款成功,但是第二天對帳時發現僅收到一筆單子的資金。所幸最後通過人工追回這筆資金,不然當時賣了我,也賠不起啊。。。

雖然這個例子銀行端肯定也是存在問題的,未做防重處理,但是只要我們做好唯一流水號的邏輯,也能避免該問題。

真實慘痛例子

上面注意的問題聊了這麼多,其實想引起對接渠道技術同學注意。不要片面認為支付機構或銀行等系統很穩,不會有問題。

程序畢竟是人寫的,一次升級改動,就有可能引起血崩。

所以不要過分相信對方系統的穩定性,我們能做的就是做好我們自己系統的穩定性,加入各種參數校驗,儘量降低風險的發生。

給大家舉幾個慘痛的例子:

曾經對接過某銀行,小額測試,完全沒問題。但是我們在測試限額的時候,比如說限額 1000 元,我們測試 1000.01 的時候,講道理這筆支付應該會失敗。

但是這筆扣款成功了,並且查看銀行扣款記錄,僅僅只扣了 0.01 。看到這個,你是否有很多問號???這 TM 竟然發生限額溢出。。。

哎,這種問題,只能緊急下線該渠道,然後等待銀行端修復。

最後再舉幾個來自網上的例子,關於支付的漏洞。

來源:https://wooyun.js.org/drops/在線支付邏輯漏洞總結.html

總結

今天我們主要聊了下銀行卡支線上支付的兩種主流模式,快捷支付與網銀支付。

快捷支付目前是現在最主流銀行卡支付方式,因為使用體驗最好,支付流程不易被打斷。但是該模式相對來說安全性較低。不過現在支付機構端與銀行端會有相應的風控手段,大家不用過分擔心。

另外一點快捷支付,一般額度較小,通常最高額度可能只有幾萬。

所以對於支付金額較大的場景,只能採用網銀支付這種方案。

最後聊了下銀行卡支付對接過程中一些問題,有些例子,可以集成到測試案例中。每當對接一個渠道時,就可以按照案例執行。

最後

支付系列的文章,小黑哥已經更新幾篇,歷史文章可以查看下面相關閱讀。

後續,小黑哥還會更新幾篇,聊聊支付寶/微信支付相關支付方式,聊聊支付過程中重複扣款等等。

如果各位同學還想了解其他支付相關的話題,可以在評論區留言。

參考文檔:

支付系統設計:銀行卡支付(三)

#相關閱讀#

「輕輕一掃,立刻扣款」,解讀付款碼背後的原理

 

作者:樓下小黑哥;微信公號@程序通事,支付行業,後端技術

本文由 @樓下小黑哥 原創發布於人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基於CC0協議

相關焦點

  • 想要解決支付掉單問題?這有兩種系統設計方案
    支付掉單異常最全解決方案》提到,支付過程會出現「掉單、卡單」的情況,這種情況對於用戶來講,體驗非常差,明明自己付了錢,扣了款,但是訂單卻未成功。上篇文章我們簡單說了下解決方案,這次小黑哥就結合生產實際碰到的情況,給出兩種詳細設計的方案:大家可以根據自己系統的實際情況,選擇性參考。
  • 解讀聚合收款碼背後的原理
    用戶選擇任一支持的客戶端掃碼,都能完成支付,再也不用糾結掃錯碼的尷尬。有沒有很神奇?其實底層原理很簡單,看完你就明白了,下面就讓小黑哥帶你解密聚合收款碼的底層原理。打開微信支付官網,可以看到很多支付方式。其中付款碼支付在前兩篇文章完整介紹過,這裡不再介紹,感興趣的小夥伴可以看下下面這兩篇文章。手機沒網了,卻還能支付,這是什麼原理?|原創輕輕一掃,立刻扣款,付款碼背後的原理你不想知道嗎?
  • 銀行卡怎麼解除寶付支付
    銀行卡解除寶付支付的方法有: 1、打開寶付支付官方網站,點擊右上角的「登錄」。 2、輸入商戶號、登錄名、登錄密碼以及驗證碼,點擊「登錄」。 3、登錄成功之後,找到已綁定的銀行卡界面,點擊要解綁的銀行卡,然後根據頁面提示進行操作。 寶付支付是一個是第三方支付平臺,其運營公司是寶付網絡科技有限公司。寶付為個人及企業提供靈活、自助、安全的網際網路支付產品與服務。寶付產品包括:收款類產品、付款類產品、結算類產品、平臺類產品,種類豐富,受眾廣泛。
  • 盒子支付的使用狀況及產品評測
    ,在盒子支付提供的銀行卡餘額查詢、手機充值、信用卡還款、水電煤氣繳費幾項功能上使用順暢,支付完成時間最長不超過5分鐘。但其產品設計並非沒有問題。盒子支付的產品邏輯是每個用戶建立自己的「盒子帳戶」。由「盒子帳戶」綁定一個刷卡器和多張銀行卡。但這個「盒子帳戶」事實上並非一個有效帳戶,只是一個接口,該接口綁定的刷卡器,就好比一個開關,而綁定的銀行卡通過此開關,則向盒子支付所接入的銀聯「全民付」支付平臺輸入支付信息,支付完成後再由「全民付」反饋給「盒子帳號」。
  • 七方面全面解讀蘋果支付
    自從喬幫主去世後,蘋果的產品發布會基本上沒有什麼秘密了,今天凌晨發布的ApplePay,發布會之前各種小道消息中就幾乎全部猜中,唯一沒中的估計就是「ApplePay」這個名字了。下面來扒開ApplePay表面功能去挖掘一下背後的故事。
  • 第三方支付宏觀支付體系模型解析
    能夠直觀感知的是銀行卡餘額的減少&話費增加這樣的信息,實際支付背後資金的流轉邏輯是:用戶浦發銀行帳戶裡面的錢,經過清結算系統支付給了微信所擁有的第三方銀行帳戶,暫存在該銀行帳戶裡,微信的銀行帳戶會按照一定的周期(T+1)自動結算到運營商的銀行帳戶,微信在以上整個支付邏輯中扮演了第三方支付服務提供商的角色。
  • 銀行卡新生:銀聯發布數字銀行卡
    該產品以雲閃付APP、手機銀行作為產品申請和管理的主入口,依託銀聯最新的Token2.0安全支付與卡碼合一等科技創新應用,為持卡人提供豐富的境內外商圈優惠、完善的權益服務體驗、動態化的客戶回饋體系等內容,打造安全、快捷、好用的用卡體驗,構建互聯互通的數字支付生態。
  • 銀行卡內資金被非法轉移 第三方支付再敲安全警鐘
    銀行卡內資金被非法轉移   南京儲戶程臘平今年8月11日持自己的銀行借記卡取現時,發現3萬多元帳戶餘額不見了。經查詢發現,程臘平的錢被以代繳的名義通過第三方支付企業上海捷銀信息技術有限公司劃轉到了別人的帳戶中。  程臘平從銀行提取的帳戶交易明細顯示,自己銀行卡帳戶上的33500元存款,被分為5筆划走。劃款事項為代繳。
  • 不問密碼就從銀行卡扣錢,支付寶與微信支付安全性幾何
    到了現在,很多時候不用密碼也能支付了,不知道大家有沒有好奇過這個問題:為什麼用支付寶、微信掃碼支付時不需要輸入密碼,這樣做安全嗎?同樣在不輸密碼的情況下被扣錢的場景還有:學校不知道同學們的銀行卡密碼,卻能直接從裡面扣學費,以及每月例行被銀行扣管理費等。今天小編就解釋一下其中的原理和存在的隱患。
  • 支付寶、微信支付與銀行卡這三大行動支付方式,最常用是哪一種?
    進而移動電子支付的興起,目前就有三大行動支付方式,支付寶、微信支付以及銀行卡。而這三種哪個更實用呢?三種行動支付方式其實這三種行動支付方式,目前很多國人都在使用。相比微信支付、支付寶的掃碼支付,銀行卡支付,包括了信用卡、儲蓄卡的刷卡支付,背靠銀行、銀聯,在國內已經擁有很多年頭,在多年的使用過程中,已經積累了很多的用戶、商家,基本上大型商場、餐館等商戶都開通了POS機刷信用卡功能。也用時間證明了,大型支付、信用支付、安全支付都有很好的保證。
  • 支付百科|錢方帳戶產品開放課:如何讓企業支付流程更順暢?
    本期「錢方帳戶產品開放課」特別問答欄目,我們就聚焦一下知乎上關於企業支付方面的大熱話題,再邀支付專家梁川為大家解答,上期沒聽課的小夥伴歡迎去補課哦~錢方帳戶產品開放課問答特別篇002Q1:網關支付、銀聯代扣通道、快捷支付、銀行卡支付分別是怎麼樣進行支付的
  • 助力數位化轉型 易生支付榮登2020支付機構銀行卡收單前十強 綜合...
    來源:時刻頭條近日,在支付百科發布的銀行卡收單TOP20強榜單和2020年支付機構TOP100百強榜中,易生支付一舉躍升為銀行卡收單TOP20強前十和支付機構TOP100百強第23位,排名較2019年的分別提升2位和35位。
  • 3名男子半夜拉車門偷銀行卡,進行消費?銀行卡免密支付成為漏洞
    免密碼支付的確非常的方便,但是在銀行卡被丟了之後,也可能會在第一時間被消費,哪怕掛失可能已經來不及了。一位車主將自己的香菸、現金、銀行卡都放在了車裡,他所設計的銀行卡免密碼支付給他造成了極大的經濟損失。
  • 比特幣背後的原理
    導語:比特幣背後的原理,數學是如何應用在虛擬貨幣的設計上的?現在從你想要發明你自己的加密貨幣入手,能幫助我們理解如今幾大主流加密貨幣的理論基礎,了解其背後在不同方面存在著不同的設計空間。我不會含糊地將其與挖礦作類比,我會直接描述當我們發送、接受、創造加密貨幣時候,計算機內部所發生的事情和原理。我還要強調一點:雖然我們將花一些時間稍深入地了解背後的原理,但是如果僅僅日常使用的話,我們並不需要了解其詳細技術原理,就像你不需要了解你刷信用卡背後所發生的一切一樣。
  • 中付支付:榮獲2020年銀行卡收單TOP20強
    近日,2020年銀行卡收單TOP20強榜發布,中付支付位列其中。同時,隨著數位化的不斷發展,中小企業數位化進程可以分為三個逐漸上升的階段:信息化、線上化、數位化,小微企業數位化也帶來國內外第三方支付公司業態的變化,這主要表現在兩個方面:支付終端硬體的革新和支付公司服務模式的改變。
  • 美團取消支付寶背後:支付大戰打響 用戶有權選擇付款方式嗎?
    原標題:美團取消支付寶背後:支付大戰打響,用戶有權選擇付款方式嗎?  當晚23時,美團創始人王興在飯否上回應,「淘寶為什麼還不支持微信支付?微信支付的活躍用戶數比支付寶多,手續費也比支付寶低。」  雙方一來一往的「口水戰」背後,究竟孰是孰非?
  • 為什麼用「微信」付款不能直接支付,而要從綁定的銀行卡上支付?
    問題:為什麼用「微信」付款不能直接支付,而要從綁定的銀行卡上支付?現如今,人們出門的時候都不再帶零錢了,到處都可以「掃一掃」,微信支付可以從零錢、銀行卡等進行支付,那為什麼「微信付款」時不能直接支付,而要從綁定的銀行卡上支付?今天我們一起來了解一下。
  • 支付清算協會銀行卡支付工作委員會在滬召開信用卡產業發展研討會
    支付曝光臺(ZFBGT.COM)訊:2019年12月3日,中國支付清算協會銀行卡基支付工作委員會在上海召開新形勢下信用卡產業發展的機遇與挑戰研討會。本次研討會由中國支付清算協會主辦,中國農業銀行信用卡中心承辦。
  • 微信支付解綁銀行卡:卡號信息仍將被保存5年
    春節期間,微信紅包風靡一時,用戶對微信支付的使用提出了很多問題,本報近幾天已給予連續報導。昨天,又有用戶提出一些新問題,比如微信紅包綁定的銀行卡如何解綁?解綁後,微信支付如何處理和保護之前綁定時留下的個人資料?銀行卡綁定微信支付安全嗎?
  • 有關支付產品,你需要知道這些
    除了現金支付和刷卡支付,現在第三方支付也廣泛被使用。本文作者根據自己的工作經驗,整理了一些支付產品的關鍵點,從四個角度展開分析,希望對你有幫助。一、常見支付產品功能通常此類支付產品可分為「入金類」和「出金類」兩大塊,對於一個實際產品選擇哪一種支付產品,是需要從需求出發,通過研讀支付公司提供的文檔進行選擇。