15854960619

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