網(wǎng)上有很多關(guān)于pos機(jī)免登錄后刷卡成功的資金到哪里了,支付寶也支付成功了的知識,也有很多人為大家解答關(guān)于pos機(jī)免登錄后刷卡成功的資金到哪里了的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)免登錄后刷卡成功的資金到哪里了
事實(shí)上支付寶和微信的“當(dāng)面付”產(chǎn)品,是一款聯(lián)機(jī)在線支付產(chǎn)品,所以不允許雙方均離線的場景下支付(這一點(diǎn)和公交卡圈存支付不一樣,公交卡的近場支付事實(shí)上允許雙方脫機(jī))。
題目中所知的支付寶和微信沒有網(wǎng)絡(luò),指的都是消費(fèi)者客戶端沒有網(wǎng)絡(luò),而不是雙方都沒有網(wǎng)絡(luò)。
嚴(yán)格來說,當(dāng)面付產(chǎn)品(特指商戶主動掃消費(fèi)者錢包客戶端上的 token 碼進(jìn)行支付的形態(tài))必須要商戶在線方可進(jìn)行聯(lián)機(jī)交易,原因有以下兩點(diǎn):
支付公司為了保證資金安全必須要確保每筆用戶的支付行為背后都真正發(fā)生了資金扣款,所以在線聯(lián)機(jī)確保支付成功是必要的。(這里解釋了為什么不允許雙方脫機(jī))
商戶為了確保用戶的支付結(jié)果可信賴,必須要自己的終端或者系統(tǒng)從支付公司獲得支付結(jié)果,而不能以消費(fèi)者的支付結(jié)果憑證作為結(jié)論。以傳統(tǒng) POS 業(yè)務(wù)舉例,你可以認(rèn)為你的刷卡信息等同于支付寶的當(dāng)面付碼,商戶必須要看到 POS 機(jī)打出支付成功單據(jù)后才認(rèn)為支付有效,如果 POS 支付超時沒有回執(zhí),光憑客戶手中的銀行短信通知是不會讓客戶走的,而是會沖正掉上一筆交易讓客戶重新刷一筆。(這里解釋了為什么要選擇商戶必須聯(lián)機(jī)的方案)
那么,我們來看看一個標(biāo)準(zhǔn)的當(dāng)面付產(chǎn)品的信息流是什么樣的(原諒我草草畫了一下):
我們可以看到在這個圖里紅色圈圈部分,商戶系統(tǒng)和支付寶系統(tǒng)是對接上的,所以商戶系統(tǒng)是聯(lián)機(jī)的——而用戶的手機(jī),在展示 code 的時候,我并未強(qiáng)調(diào)是否和支付寶服務(wù)端聯(lián)機(jī)。
事實(shí)上,不論是微信還是支付寶都支持兩種用戶碼生成模式,即在線碼和離線碼。
在線碼其實(shí)很容易理解,用戶目前是登錄錢包的狀態(tài),只要點(diǎn)擊【付款】按鈕,客戶端就向支付寶的服務(wù)端申請一個針對這個客戶賬戶的支付憑證碼并展現(xiàn)到客戶手機(jī)上。
這個支付憑證碼在支付寶的服務(wù)端會有一組數(shù)據(jù)庫記錄其與真實(shí)客戶賬戶之間的關(guān)聯(lián),并且這份關(guān)聯(lián)的有效期為 60S,超過時效即便商戶上送這個碼,支付寶也會認(rèn)為這是作廢碼而不予處理。
用戶每次點(diǎn)開【付款】、等待超過 60S、主動刷新付款碼,都會觸發(fā)客戶端向服務(wù)器申請一個新碼的請求。
這個方案的好處是:
相對安全,每次碼都是服務(wù)端生成。
業(yè)務(wù)靈活,即便對碼的安全算法等進(jìn)行較大的調(diào)整,也不用升級客戶端,因?yàn)槭欠?wù)端發(fā)碼。
這個方案的壞處也顯而易見:
用戶的手機(jī)客戶端必須在線聯(lián)網(wǎng),如果沒有網(wǎng)絡(luò)則無法獲取付款碼
用戶即便在線,如果網(wǎng)絡(luò)連接不好,也會出現(xiàn)點(diǎn)了付款等好久才看到碼的情況,體驗(yàn)會不可控。
為了解決在線碼方案的問題,離線碼方案就出現(xiàn)了。
離線碼的基本技術(shù)原理其實(shí)也不復(fù)雜,可以參考 @反方向的鐘 的回答,比較簡單的實(shí)現(xiàn)方式是:
用戶登錄后,服務(wù)端通過可信網(wǎng)絡(luò)向用戶客戶端發(fā)送一個種子數(shù)據(jù)(每個客戶的種子數(shù)據(jù)唯一,換用戶登錄后銷毀原種子,重新下載種子)本地保存,當(dāng)用戶點(diǎn)擊【付款】時,客戶端利用這個種子數(shù)據(jù) + 時間戳 + 一套安全算法可以生成一串?dāng)?shù)字,即離線碼。
當(dāng)用戶使用離線碼支付時,服務(wù)端通過一定算法校驗(yàn)這個碼的確是來自于這個用戶,隨即確認(rèn)用戶授權(quán)完成支付。
離線碼的好處不言而喻:
用戶無需在線,就算在地下室等沒有網(wǎng)絡(luò)的場景一樣可以使用
由于不依賴網(wǎng)絡(luò),所有碼本地生成,所以客戶體驗(yàn)很好,一點(diǎn)付款碼就能出來
那離線碼的劣勢呢,我們看看:
用戶 root/ 越獄手機(jī)后,保密存儲的種子數(shù)據(jù)有可能被不法分子利用惡意程序獲取到,導(dǎo)致離線碼被隨意生成用于消費(fèi)。
恩……怎么說呢,畢竟現(xiàn)在不是發(fā)燒友主動 root 越獄的用戶并不多,這是其一。
即便是 root 越獄,如果用戶使用手機(jī)的習(xí)慣良好,被惡意程序攻擊手機(jī)的概率也很低,這是其二。
每家公司都有自己的安全團(tuán)隊(duì)去保障自己客戶端的數(shù)據(jù)安全,并不是說 root 的用戶就只能坐以待斃了,否則微信和支付寶早被搞破產(chǎn)了,這是其三。
當(dāng)然從我個人的角度來說,普通用戶我都不建議去 root 或者越獄。
這個問題最粗暴的方案就跟反方向的鐘所說的一樣,監(jiān)測到系統(tǒng)被 root 了就對用戶限權(quán)(很多銀行的客戶端方案都是這么搞的)。
作為直接面向消費(fèi)者市場且充分競爭的產(chǎn)品,微信支付和支付寶斷然不會采用上面那個方案的。
怎么能又開放離線碼給用戶,又能確保用戶支付安全,本身也是支付公司安全競爭力的一部分,這里就省略幾萬字了。
數(shù)據(jù)碰撞可能導(dǎo)致 A 用戶的碼扣到 B 用戶的賬戶
恩,這里涉及一些算法問題,業(yè)務(wù)上就是碰了巧了 A 用戶碼算出來和 B 用戶碼一模一樣且都有效(兩個客戶端都沒作弊)。
在線碼之所以可以避免這個問題是因?yàn)樵诰€碼是服務(wù)端發(fā)的,可以控冪等。
離線碼是客戶端自己根據(jù)算法生成的,所以沒法控。
其實(shí)原因和哈希算法的數(shù)據(jù)碰撞類似,是個小概率的純技術(shù)問題,就不展開贅述了。
解決方案:優(yōu)化算法(確保碰撞概率低到一定程度甚至杜絕),如果真的出現(xiàn)就認(rèn)栽給客戶賠錢(賠多了技術(shù)部門老大就肯定痛定思痛優(yōu)化算法了)。
事實(shí)上這個問題發(fā)生的概率極低極低,所以可以忽略不計(jì)。
算法調(diào)整不如在線碼靈活
因?yàn)殡x線碼生成邏輯都在客戶端,所以通常來說安全算法升級會導(dǎo)致客戶端升級,比在線碼升級更影響用戶一些。
分析到上面這層,各位產(chǎn)品經(jīng)理相信應(yīng)該就知道如何做方案選型了。(裝個逼,事實(shí)上我覺得了解到上面那個層面是支付行業(yè)產(chǎn)品經(jīng)理的基本素質(zhì))
后話:
我在寫這個答案的時候其實(shí)都在刻意回避公司實(shí)現(xiàn)這些業(yè)務(wù)的具體邏輯和算法。而我個人并非當(dāng)面付產(chǎn)品的產(chǎn)品經(jīng)理,所以大家放心,這篇文章不算泄密。
寫這個答案的目的是希望能盡量站在產(chǎn)品和業(yè)務(wù)角度還原業(yè)務(wù)原理,希望更多的非行業(yè)內(nèi)的知友知其然,也知其所以然。
以上就是關(guān)于pos機(jī)免登錄后刷卡成功的資金到哪里了,支付寶也支付成功了的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)免登錄后刷卡成功的資金到哪里了的知識,希望能夠幫助到大家!
![](/style/images/zhouzong.jpg)