異步處理在支付環(huán)節(jié)的應(yīng)用

7 評論 11363 瀏覽 90 收藏 13 分鐘

本文主要向初步接觸支付業(yè)務(wù)的讀者簡要普及同步與異步處理的基本概念、關(guān)于異步處理在支付環(huán)節(jié)的應(yīng)用、支付系統(tǒng)向商戶通知支付結(jié)果時,為什么要使用“異步通知”?異步處理方式在支付環(huán)節(jié)可能會產(chǎn)生的哪些問題?在產(chǎn)品設(shè)計上如何避免這些問題的發(fā)生?

第三方支付平臺在處理支付環(huán)節(jié)時,一般采用異步回調(diào)的方式將支付結(jié)果及用戶信息通過數(shù)據(jù)流的形式發(fā)送給商戶,商戶需要接收處理,并按文檔規(guī)范返回應(yīng)答。

一、什么是同步處理、異步處理?

同步和異步是開發(fā)技術(shù)中的兩個概念:

同步:

指消息請求方發(fā)出請求后,必須要等待消息接收方返回結(jié)果,才能執(zhí)行下一個任務(wù)。

這種情況下,消息請求方會說:兄弟,你現(xiàn)在就處理我的請求,我啥事都不干,就等你反饋處理結(jié)果。

異步:

指“消息請求方”發(fā)出請求后,“消息接收方”并不立即準備處理,而告知消息受理結(jié)果?!跋⒄埱蠓健辈恍枰却跋⒔邮辗健狈祷靥幚斫Y(jié)果,隨時可以觸發(fā)下一個請求,去執(zhí)行其他程序。

這種情況下,“消息接收方”會說:兄弟,你的請求我收到了,我會處理的,你該干嘛就干嘛去,等我回復(fù)就可以了。

二、關(guān)于異步處理在支付環(huán)節(jié)的應(yīng)用

第三方支付機構(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é)。

三、支付系統(tǒng)為什么要使用“異步通知”?

1. 受上游渠道的影響

從支付交互時序圖可以看出,在商戶端提交支付訂單后,支付結(jié)果的返回需要經(jīng)過各合作銀行-網(wǎng)聯(lián)-第三方支付平臺,最終才能到達商戶端后臺。當上游渠道無法保證系統(tǒng)的及時性與穩(wěn)定性時,采用異步通知機制就顯得尤為重要。

2. 同步通知的弊端

試想一下,如果采用同步通知機制,在上游渠道質(zhì)量較差的情況下,或自身系統(tǒng)存在問題,支付機構(gòu)短時間內(nèi)獲取不到交易終態(tài),若強行要求同步返回交易終態(tài),進程會一直掛在這里,非常耗費系統(tǒng)資源,得不償失。

3. 其他原因

有時候因為商戶端的網(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)的異步通知頻率會逐漸增大,所以有可能商戶端會遲遲接收不到通知,這時候如果能夠提早做主動查詢,能夠有效提高用戶體驗。

四、異步處理方式在支付環(huán)節(jié)可能產(chǎn)生的問題?

1. 重復(fù)支付問題

當用戶支付成功后,若當中出現(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)超時取消訂單,影響還是很大的。)

2. 交易掉單問題

這主要是本地未正確接收到渠道下發(fā)的異步通知導(dǎo)致。即一筆交易,用戶實際上已經(jīng)完成了支付,銀行也扣款了,但是由于支付機構(gòu)的問題,異步通知失敗,導(dǎo)致該筆交易在第三方支付機構(gòu)已經(jīng)是交易成功,但是訂單在電商平臺仍然是未支付。

五、如何通過產(chǎn)品設(shè)計避免上述問題的發(fā)生?

方法一:交互方式的優(yōu)化

這種方法更多的是針對網(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)于跟第三方支付平臺的對賬跟差錯處理,后面有機會再跟大家分享。

六、寫在最后

電商平臺在處理支付流程的時候,最重要的還是要對第三方支付平臺的業(yè)務(wù)邏輯有清楚的了解,知道第三方支付平臺能夠提供什么樣的接口能力,我們再結(jié)合自身的實際業(yè)務(wù),制定支付方案。

 

作者:小狼人,微信公眾號:人稱產(chǎn)品汪。不定期更新本人在對接第三方支付平臺與銀行存管系統(tǒng)中的經(jīng)驗心得、支付知識、產(chǎn)品心得等。

本文由 @ 小狼人? 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 我個人作為用戶在付款的時候,感覺使用在淘寶下單時付款,是同步處理呢。微信也是。

    來自廣西 回復(fù)
  2. 最后的支付結(jié)果彈窗點擊叉號,處理邏輯是什么

    來自浙江 回復(fù)
  3. 銀行卡類交易,一般都可以使用 API 完成支付,這類接口一般都是同步得到支付結(jié)果。
    而微信/支付寶/網(wǎng)銀支付,這類都需要跳轉(zhuǎn)到類似網(wǎng)關(guān)的頁面才能完成支付,這樣就脫離原先的同步支付流程,這樣就只能通過異步通知獲取支付結(jié)果了。 :mrgreen:

    來自浙江 回復(fù)
    1. 學習了

      回復(fù)
    2. 一般代扣業(yè)務(wù)同步得到支付結(jié)果。

      來自上海 回復(fù)
  4. 2-7為什么不放在8之后?會不會影響支付營銷的使用~

    回復(fù)
    1. 2-7步驟可以稱之為‘下單’操作。一般這個下單操作都是有一個過期時間的,一旦過期,系統(tǒng)會關(guān)閉這個訂單。所以是不會影響的

      來自廣東 回復(fù)