15854960619

第三方支付平臺在處理支付環(huán)節(jié)時,一般采用異步回調(diào)的方式將支付結(jié)果及用戶信息通過數(shù)據(jù)流的形式發(fā)送給商戶,商戶需要接收處理,并按文檔規(guī)范返回應(yīng)答。
同步和異步是開發(fā)技術(shù)中兩個概念:
指消息請求方發(fā)出請求后,必須要等待消息接收方返回結(jié)果,才能執(zhí)行下一個任務(wù)。
這種情況下,消息請求方會說:兄弟,你現(xiàn)在就處理我的請求,
異步:
指“消息請求方”發(fā)出請求后,“消息接收方”并不立即準備處理,而告知消息受理結(jié)果。“消息請求方”不需要等待“消息接收方”返回處理結(jié)果,隨時可以觸發(fā)下一個請求,去執(zhí)行其他程序。
這種情況下,“消息接收方”會說:兄弟,你的請求我收到了,我會處理的,你該干嘛就干嘛去,等我回復(fù)就可以了。
第三方支付機構(gòu)在處理電商平臺提交上來的支付請求時,一般都是采用異步處理的方式,在其接口文檔上都會說明支付結(jié)果以異步通知為準。
下面我們先通過一張系統(tǒng)交互圖來了解第三方支付平臺在處理支付環(huán)節(jié)時的一般處理流程。當你在某個電商APP購物并支付訂單時,若該電商APP對接的第三方支付平臺是微信,那么整個流程大致如下圖:
支付時序交互圖
上圖是在微信支付時序圖的基礎(chǔ)上繪制出來的,主要補充了網(wǎng)聯(lián)/銀聯(lián)清算機構(gòu)以及合作銀行的系統(tǒng)交互流程,便于大家了解整個支付環(huán)節(jié)。
主要交互說明如下:
步驟一:用戶在商戶APP中選擇商品并提交訂單。
步驟二:用戶選擇微信支付并開始支付訂單。
步驟三:商戶后臺調(diào)用微信支付統(tǒng)一下單支付接口,生成支付訂單推送給微信支付。
步驟四:商戶APP調(diào)起微信支付。
步驟五:用戶輸入密碼完成驗證,微信支付同步返回支付受理成功,但是最終支付結(jié)果仍然要以異步通知為準。
步驟六:微信支付發(fā)送扣款請求給網(wǎng)聯(lián),網(wǎng)聯(lián)轉(zhuǎn)接給發(fā)卡行。
步驟七:發(fā)卡行完成扣款,反饋成功消息給網(wǎng)聯(lián),網(wǎng)聯(lián)再通知微信支付。
步驟八:微信支付異步通知商戶支付成功,商戶后臺也可以主動查詢支付結(jié)果。
注:以上流程是假設(shè)電商平臺直接對接微信支付,如果是電商平臺接入的是其他第三方支付平臺(該平臺聚合了微信支付方式)或者第四方聚合支付平臺,那么在中間的系統(tǒng)交互則會多了一個環(huán)節(jié)。
從支付交互時序圖可以看出,在商戶端提交支付訂單后,支付結(jié)果的返回需要經(jīng)過各合作銀行-網(wǎng)聯(lián)-第三方支付平臺,最終才能到達商戶端后臺。當上游渠道無法保證系統(tǒng)的及時性與穩(wěn)定性時,采用異步通知機制就顯得尤為重要。
試想一下,如果采用同步通知機制,在上游渠道質(zhì)量較差的情況下,或自身系統(tǒng)存在問題,支付機構(gòu)短時間內(nèi)獲取不到交易終態(tài),若強行要求同步返回交易終態(tài),進程會一直掛在這里,非常耗費系統(tǒng)資源,得不償失。
有時候因為商戶端的網(wǎng)絡(luò)異常、延遲、用戶的異常操作,比如關(guān)閉了瀏覽器、app等,導(dǎo)致無法及時接收同步通知,這時候就非常需要異步通知了。
像微信這樣的支付機構(gòu),一方面能夠接入優(yōu)質(zhì)的上游渠道,另一方面自身的技術(shù)能力也很強大,所以往往能夠在短時間內(nèi)做到同步返回支付結(jié)果。
但是也無法百分百擔保,所以微信支付最終還是以異步通知的結(jié)果為準。
其他第三方支付機構(gòu),就更加無法保證能夠同步返回支付結(jié)果了。
所以更通用的做法是同步返回“交易已受理”狀態(tài),代表支付機構(gòu)已受理這筆交易,最終交易狀態(tài)依賴支付機構(gòu)的查詢接口或回調(diào)通知獲取。
當然,第三方支付機構(gòu)除了異步通知外,還會支持商戶端做主動查詢,即商戶端通過查詢接口,調(diào)用某筆交易的支付結(jié)果,然后扭轉(zhuǎn)訂單狀態(tài)。
這算是異步通知的一個補償機制,有時候因為商戶端網(wǎng)絡(luò)延遲的問題、或者第三方支付機構(gòu)系統(tǒng)的問題,導(dǎo)致異步通知失敗,由于第三支付機構(gòu)的異步通知頻率會逐漸增大,所以有可能商戶端會遲遲接收不到通知,這時候如果能夠提早做主動查詢,能夠有效提高用戶體驗。
當用戶支付成功后,若當中出現(xiàn)了網(wǎng)絡(luò)延遲,導(dǎo)致第三方支付機構(gòu)回調(diào)支付結(jié)果延遲。雖然用戶的銀行卡已經(jīng)扣款了,但是由于電商平臺沒有接收到第三方支付機構(gòu)的交易成功結(jié)果,導(dǎo)致訂單還是處于未支付狀態(tài)。用戶誤以為沒有支付成功,再次進行支付,導(dǎo)致重復(fù)支付問題的發(fā)生。(在這種情況下,如果用戶覺得自己沒有支付成功,不排除用戶會主動取消訂單,或者系統(tǒng)超時取消訂單,影響還是很大的。)
這主要是本地未正確接收到渠道下發(fā)的異步通知導(dǎo)致。即一筆交易,用戶實際上已經(jīng)完成了支付,銀行也扣款了,但是由于支付機構(gòu)的問題,異步通知失敗,導(dǎo)致該筆交易在第三方支付機構(gòu)已經(jīng)是交易成功,但是訂單在電商平臺仍然是未支付。
這種方法更多的是針對網(wǎng)頁端,在收銀臺中選擇對應(yīng)的渠道并開始支付后,有的電商平臺會選擇打開一個新網(wǎng)頁界面,而原有的界面則會顯示一個彈窗,引導(dǎo)用戶在新打開的界面中進行支付。具體交互如下:
首先,在調(diào)用支付接口之前(例如用戶在訂單列表點擊付款按鈕或者進入收銀臺選擇支付渠道后點擊支付按鈕),系統(tǒng)需要先確認該訂單的支付狀態(tài),可以調(diào)用主動查詢接口確認訂單是否已經(jīng)完成支付,若未完成支付,才允許進行支付,避免商戶端重復(fù)提交支付訂單給到第三方。不管是電商平臺網(wǎng)頁端或者是移動端,這樣的一個校驗動作都是不可缺少的。
然后,當用戶在收銀臺點擊“立即支付”按鈕,若打開了新的網(wǎng)頁界面,則原有界面顯示付款提示彈窗,當用戶點擊“已完成付款”時,系統(tǒng)會再去第三方支付平臺查詢支付結(jié)果,如果支付成功,隱藏掉這個彈窗,展示支付成功界面。如果未查詢到支付成功結(jié)果,則可以提示未檢測到支付信息,然后關(guān)閉此彈窗或者可以返回訂單詳情頁。
當然,有些電商平臺也會采用在收銀臺點擊支付時,直接刷新當前界面,進入付款界面,這樣在一定程度上也是能夠避免用戶重復(fù)支付的問題。
下面列舉幾個案例:
當當收銀臺
在當當收銀臺中,當使用網(wǎng)銀支付時,會打開新的網(wǎng)頁界面進入銀行網(wǎng)關(guān)界面,同時原有收銀臺會顯示一個支付提示彈窗。
騰訊云
在騰訊云中,在訂單界面點擊立即支付可以進入收銀臺,當使用網(wǎng)銀支付方式打開新的網(wǎng)頁界面時,原有訂單界面也會顯示一個支付提示彈窗。
電商平臺未收到第三方支付平臺的通知,可以是由于網(wǎng)絡(luò)問題,或者其他異常掉單。
這時候我們可以利用第三方支付平臺提供的查詢接口,主動到第三方平臺輪詢該訂單的支付狀態(tài)(要考慮系統(tǒng)性能,這個跟開發(fā)兄弟做好溝通即可),通過這種機制,在一定程度也是可以避免重復(fù)支付的問題。
當然,以上方案并不能百分百避免重復(fù)支付的問題,最根本的還是在于上游渠道返回支付信息的及時性。
當真的出現(xiàn)用戶重復(fù)支付的問題時,就要通過后續(xù)的對賬,查出該筆訂單下面的多筆支付記錄(財務(wù)上稱為長款),然后走人工或者自動的退款流程了。關(guān)于跟第三方支付平臺的對賬跟差錯處理,后面有機會再跟大家分享。
說明:文章轉(zhuǎn)載于網(wǎng)絡(luò) 如有侵權(quán)請聯(lián)系刪除