支付清結(jié)算——重路由

前言

大家好,這篇文章我們介紹一下《渠道路由》的第二部分——重路由。對于支付業(yè)務(wù)來說,支付成功率是衡量支付服務(wù)質(zhì)量的一個重要指標(biāo),而重路由對這個指標(biāo)的“貢獻“可謂是至關(guān)重要。除了提升成功率之外,一定程度上還能協(xié)助渠道路由降低渠道手續(xù)費。假設(shè)有兩個渠道A和B,A的費率高于B,但成功率沒有B高,那么有了重路由的能力我們就可以將B配置為優(yōu)秀的渠道,如果B失敗,那么使用重路由走A通道,這樣就能既保證成功率又保證渠道費率不那么的高。但上述場景并不是重路由的主要應(yīng)用場景,重路由主要解決兩類問題導(dǎo)致的交易異?;蚪灰资栴}:第一類,因渠道服務(wù)臨時不可用或網(wǎng)絡(luò)問題導(dǎo)致的交易故障,這類問題通過延遲重試大部分都能解決;第二種,支付要素信息正確因渠道能力問題如余額不夠?qū)е碌慕灰资。@類問題需要通過更換渠道重試,大部分也都能解決。下面我們將內(nèi)容分成兩部分來介紹:第一部分我們介紹一下重路由規(guī)則的配置項,第二部分我們介紹一下重路由模塊的程序設(shè)計。

重路由規(guī)則

重路由規(guī)則由匹配規(guī)則和執(zhí)行規(guī)則兩部分構(gòu)成,匹配規(guī)則部分定義重路由的適用場景,該部分的配置決定程序什么情況下才允許執(zhí)行重路由操作,而執(zhí)行規(guī)則定義執(zhí)行重路由的形式,就是限定程序應(yīng)該如何執(zhí)行比如執(zhí)行幾次,是同步還是異步,是否要更換訂單號等等,接下來我們解釋一下這些配置項。

類型

重路由有原渠道重試和換渠道重試兩種,如果算上兩種混合的形式那么有三種類型的重路由。原渠道重試主要用來解決渠道臨時性的故障,這些故障通??梢栽趲追昼娭蠡謴?fù)的,那么使用原渠道延遲重試就能滿足需求。比如代扣,因為對方網(wǎng)絡(luò)響應(yīng)超時,鏈接被斷開導(dǎo)致結(jié)果不確定,這種情況如果對方接口支持冪等那么五分鐘后重試一下,如果這時對方服務(wù)恢復(fù)正常,那么就能確定改變交易的狀態(tài)或者重新向渠道提交交易。換渠道重試主要應(yīng)用在渠道服務(wù)能力受限的情況下如余額不足、限額,這時候只能換渠道上送交易來提高這邊交易的成功率。最后,混合形式的重路由場景的特征是期望如果原渠道重試能恢復(fù),那么盡可能原渠道重試,確定原渠道無法重試的狀態(tài),那就換渠道重試。比如這么一個場景有A、B兩個渠道,A的費率比B的費率低,此時A渠道服務(wù)重啟導(dǎo)致平臺上送失敗,為了成本考慮,這時候就可以先進行原渠道重試,重試如果碰到余額不足而失敗,那么就可以進行換渠道重試。這樣既能節(jié)省一定的成本,也能提高成功率,但是交易的延遲會升高。

適用接口

適用接口這里是指重路由規(guī)則可以被應(yīng)用于那些接口,支付系統(tǒng)中可以除了渠道下單接口可以集成重路由外,回調(diào)和主查接口也可以,這樣才能最大限度的提高訂單的成功率。主查和回調(diào)本身是異步的接口,所以只適合那些可以異步處理的支付業(yè)務(wù)。

統(tǒng)一狀態(tài)碼

因為重路由是重發(fā)支付指令,而指令重發(fā)涉及資金安全的問題,這就需要明確什么情況下可重試什么情況不可重試,能不能重試可以通過渠道狀態(tài)碼來分辨,但渠道狀態(tài)碼的標(biāo)準(zhǔn)各異,需要將其映射成平臺統(tǒng)一定義的狀態(tài)碼既統(tǒng)一狀態(tài)碼,詳見《統(tǒng)一狀態(tài)碼》這篇文章。這樣基于一套標(biāo)準(zhǔn)來定義那些狀態(tài)碼可以重試,那些不能重試就非常的方便,而非基于渠道本身原始的狀態(tài)碼來定義是否可重試。由于重試有關(guān)資金安全,重試之前至少要明確這么幾點:第一,渠道接口是否冪等既支持相同單號重復(fù)下單而不重復(fù)支付,這里的支付泛指入款、出款、退款;第二,明確統(tǒng)一狀態(tài)碼重入狀態(tài)既重試時對應(yīng)的交易狀態(tài),這個狀態(tài)在某些情況和正常的交易狀態(tài)不太一樣,比如一筆付款,第一次因為網(wǎng)絡(luò)超時訂單處于未知狀態(tài),此時支付可能成功也可能未提交;因為想通過重試確定交易狀態(tài)不至于卡單,所以為網(wǎng)絡(luò)超時配置了原渠道重路由策略,該筆單子后續(xù)會進入重路由環(huán)節(jié),但重試的時候碰到一個前置環(huán)節(jié)的token失效,如果是正常的付款,那么碰到這個狀態(tài)交易就是失敗的狀態(tài),但是在重試的場景下統(tǒng)一狀態(tài)碼就需要有重入狀態(tài),否則按正常狀態(tài)這筆單子就失敗了,但實際有可能第一次是成功的。

執(zhí)行方式

執(zhí)行方式有同步和異步兩種,同步重試多用于無法異步的代收場景,所以這種場景下重試次數(shù)不易設(shè)置過多,一次就差不多了,因為重試次數(shù)越多,客戶端的延遲也就越高,而且過多的重試還會加重系統(tǒng)負載。異步重試多用于可異步收付退場景,這種場景對支付結(jié)果的及時性要求不高,因此可以多設(shè)置幾次重試,來提升支付成功率。

是否換單

是否換單是指重試的時候是否需要更換支付平臺向支付機構(gòu)提交訂單時的唯一識別號,更換單號也就意味著創(chuàng)建新的渠道訂單,換不換需要依據(jù)重路由類型和交易類型來決定,如果是原渠道網(wǎng)絡(luò)故障重試,那么不需要換單,否則就會出現(xiàn)重復(fù)付款的情況;而如果是換渠道重試,合理的方式是更換單號進行重試,讓上送動作有跡可循,做到可追溯;否則出現(xiàn)因換渠道導(dǎo)致重復(fù)付款,但系統(tǒng)只有一筆成功的記錄的情況,這樣就導(dǎo)致數(shù)據(jù)缺失,后續(xù)渠道對賬發(fā)現(xiàn)不了系統(tǒng)重復(fù)付款的錯誤。另外,有些渠道對單號有特殊限制,原先A渠道生成的平臺單號,不一定適用于B渠道,這種情況就必須要換單重試。

重路由設(shè)計


我們先簡單回顧一下上面這張《渠道路由》里面的路由架構(gòu)圖,重路由屬于路由里面的一個子模塊,它對支付核心來說是透明的,支付核心感知不到它的存在,比如代付因渠道余額不足失敗而觸發(fā)重路由,那么路由服務(wù)會向構(gòu)建一個處理中的結(jié)果先返回給支付核心,后續(xù)重試之后再將最終支付結(jié)果異步通知給支付核心。因為重路由是對已有組件的組合復(fù)用,其詳細的程序設(shè)計我們就不展開了,僅簡單的概述一下重試任務(wù)狀態(tài)機的設(shè)計。

重路由狀態(tài)機

Init(初始):重路由任務(wù)創(chuàng)建后的狀態(tài)

ready(就緒):表示任務(wù)可執(zhí)行的狀態(tài)

pending(處理中):表示任務(wù)正在執(zhí)行中

waiting(等待):任務(wù)重試之后,還可以繼續(xù)重試但還不可執(zhí)行時的狀態(tài),到達可執(zhí)行時間點后進入ready狀態(tài)

stoped:暫停狀態(tài),當(dāng)重試后的支付結(jié)果是處理中且未超過重試次數(shù)時,會進入這個狀態(tài),因為后續(xù)如果回調(diào)或者主查失敗的時候,如果狀態(tài)碼是可重路由的,那么可以重啟這個任務(wù)。

closed:關(guān)閉狀態(tài),當(dāng)任務(wù)不可再繼續(xù)重試的時流轉(zhuǎn)到這個狀態(tài)比如重試超限。另外,如果重試的支付結(jié)果是不可重試的狀態(tài)如成功、不可重試的失敗,那么也會流轉(zhuǎn)到這個狀態(tài)。

總結(jié)

重試雖然能提高支付成功率,但有一定的資損可能,因為即使重路由程序本身沒有問題,但因為渠道原因:交易先給了失敗狀態(tài)但后續(xù)又成功了,那就有可能導(dǎo)致資損。針對這類非系統(tǒng)原因?qū)е碌膯栴},屬于不可控的范疇,平臺本身只能盡量控制和減少這樣的問題出現(xiàn),比如可重試狀態(tài)碼明確到具體的小類狀態(tài)碼而非大類,同一小類錯誤碼重試的交易數(shù)量設(shè)置上限。大小類狀態(tài)碼的概念解釋詳見《統(tǒng)一狀態(tài)碼》,這里就不再解釋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 大家好,這篇文章我們介紹一下《渠道路由》的第二部分——重路由。對于支付業(yè)務(wù)來說,支付成功率是衡量支付服務(wù)質(zhì)量...
    chzne閱讀 173評論 0 0
  • 前言 大家好,這篇文章我們介紹一下渠道路由,通常在架構(gòu)設(shè)計上會將它作為渠道網(wǎng)關(guān)系統(tǒng)中的一個模塊,但這里為了更清晰的...
    chzne閱讀 94評論 0 0
  • PS~ 經(jīng)過一段時間的忙碌與調(diào)整,終于有時間可以閑下來了,今天開始重更自己在實際工作中的產(chǎn)品經(jīng)歷與總結(jié)。第一篇就以...
    交個朋友老曾閱讀 1,017評論 1 8
  • 一. 背景 我在的這家公司是做物流領(lǐng)域的互聯(lián)網(wǎng)公司,周支付交易額約在億元人民幣級別,支付這塊的考核指標(biāo)是在降低渠道...
    棟哥哥darre_li閱讀 620評論 0 1
  • 前言 圖中,支付核心負責(zé)構(gòu)建和發(fā)送支付指令并處理支付結(jié)果,而支付指令和支付結(jié)果的報文傳輸標(biāo)準(zhǔn)各個支付渠道都不一樣,...
    chzne閱讀 133評論 0 0

友情鏈接更多精彩內(nèi)容