支付防抖方法及裝置
本公開通常涉及網路應用技術領域,更具體地,涉及支付防抖方法及裝置。
如果網路發生擁塞,排隊延遲將影響端到端的延遲,並導致透過同一連接傳輸的分組延遲各不相同,而抖動,就是用來描述這一延遲變化的程度。網路中的延遲是指資訊從發送到接收經過的延遲時間,一般由傳輸延遲及處理延遲組成,而抖動是指最大延遲與最小延遲的時間差,如最大延遲是20毫秒,最小延遲為5毫秒,那麼網路抖動就是15毫秒,它主要標識一個網路的穩定性。
移動支付是指使用手機或其他智慧設備完成支付或確認支付,而不是用現金、支票或銀行卡支付。兜底是指支付系統出故障時採取的救濟措施。
隨著移動支付的越來越普及,併發存取量和交易量呈爆發式增長態勢,支付安全也是被關注的一個問題。在目前網際網路規模以及複雜的企業級分散式架構體系下,當有大量使用者存取時網路抖動是不可避免的,因此容易造成事務失敗,或者由於事務正在進行中,鎖定資源太多,比如鎖定資料表記錄太多,導致其他事務等待時間較長。比如在進行移動支付過程中如果鏈路發生抖動,可能造成支付錯誤,造成支付失敗,導致商戶收款損失,因此分散式系統需要進一步提高系統穩定性,進一步提高可用率。
鑒於上述問題,本公開提供了一種支付防抖方法及裝置。利用該方法及裝置,對於本次支付從發現系統出現抖動時起的業務請求到最後一次業務請求均返回模擬的正常結果,具有支付鏈路多階段防抖能力,減少系統抖動對業務帶來的影響以及業務損失。
根據本公開的一個態樣,提供了一種支付防抖方法,包括:攔截客戶端在支付過程中發送到服務端的當前業務請求,所述當前業務請求至少包括唯一階段標識,其中,所述支付過程包括多個支付階段,以及所述唯一階段標識用於唯一標識所述當前業務請求所對應的支付階段;基於與所述當前業務請求對應的防抖標記,確定針對所述當前業務請求的遠端業務調用是否異常;在針對所述當前業務請求的遠端業務調用被確定為異常時,產生兜底處理結果,所述兜底處理結果至少包括與所述唯一階段標識所標識的支付階段對應的模擬正常結果;以及將所述兜底處理結果發送給所述客戶端。
可選地,在上述態樣的一個示例中,基於與所述當前業務請求對應的防抖標記,確定針對當前業務請求的遠端業務調用是否異常包括:在所述防抖標記的標記值指示遠端業務調用異常時,確定針對當前業務請求的遠端業務調用異常。
可選地,在上述態樣的一個示例中,基於與所述當前業務請求對應的防抖標記,確定針對所述當前業務請求的遠端業務調用是否異常包括:在所述防抖標記的標記值指示遠端業務調用正常時,根據所述當前業務請求執行遠端業務調用;以及基於所述遠端業務調用的返回結果是否異常,確定針對所述當前業務請求的遠端業務調用是否異常。
可選地,在上述態樣的一個示例中,所述支付防抖方法還包括:在所述遠端業務調用的返回結果異常時,為所述防抖標記賦予用於指示遠端業務調用異常的標記值並包括在所述兜底處理結果中。
可選地,在上述態樣的一個示例中,在所述遠端業務調用的返回結果異常時,為所述防抖標記賦予用於指示遠端業務調用異常的標記值包括:在確定針對所述當前業務請求的遠端業務調用異常時,識別所述遠端業務調用異常是否為能夠進行兜底處理的異常;以及在識別出所述遠端業務調用異常是能夠進行兜底處理的異常時,為所述防抖標記賦予用於指示遠端業務調用異常的標記值並包括在所述兜底處理結果中。
可選地,在上述態樣的一個示例中,在所述當前業務請求是首次業務請求時,所述防抖標記是在攔截到所述當前業務請求後創建的,或者在所述當前業務請求是非首次業務請求時,所述防抖標記是上一業務請求處理過程所返回的防抖標記。
可選地,在上述態樣的一個示例中,在所述當前業務請求是首次業務請求時,透過下述過程來為所述當前業務請求創建防抖標記:在攔截到所述當前業務請求後,解析所攔截的當前業務請求,以確定所述當前業務請求所屬的業務類型;在所確定的業務類型屬於需要防抖處理的業務類型時,為所述當前業務請求創建所述防抖標記。
可選地,在上述態樣的一個示例中,所述需要防抖處理的業務類型包括線下收錢碼支付業務。
可選地,在上述態樣的一個示例中,在所述當前業務請求是所述支付過程的最後業務請求時,所述方法還包括:在將所述兜底處理結果發送給所述客戶端後,根據與所述支付過程對應的支付資訊,從墊支帳戶中支付相應數目的支付款給賣家。
可選地,在上述態樣的一個示例中,所述支付防抖方法還包括:回應於從墊支帳戶中支付相應數目的支付款給賣家,通知所述賣家相應數目的支付款已到帳。
根據本公開的另一態樣,提供一種支付防抖裝置,包括:攔截單元,被配置為攔截客戶端在支付過程中發送到服務端的當前業務請求,所述當前業務請求至少包括唯一階段標識,其中,所述支付過程包括多個支付階段,以及所述唯一階段標識用於唯一標識所述當前業務請求所對應的支付階段;異常確定單元,被配置為基於與所述當前業務請求對應的防抖標記,確定針對所述當前業務請求的遠端業務調用是否異常;兜底處理單元,被配置為在針對所述當前業務請求的遠端業務調用被確定為異常時,產生兜底處理結果,所述兜底處理結果至少包括與所述唯一階段標識所標識的支付階段對應的模擬正常結果;以及發送單元,被配置為將所述兜底處理結果發送給所述客戶端。
可選地,在上述態樣的一個示例中,所述異常確定單元進一步被配置為:在所述防抖標記的標記值指示遠端業務調用異常時,確定針對當前業務請求的遠端業務調用異常。
可選地,在上述態樣的一個示例中,所述支付防抖裝置還包括:業務調用單元,被配置為在所述防抖標記的標記值指示遠端業務調用正常時,根據所述當前業務請求執行遠端業務調用,其中,所述異常確定單元還被配置為:基於所述遠端業務調用的返回結果是否異常,確定針對所述當前業務請求的遠端業務調用是否異常。
可選地,在上述態樣的一個示例中,所述支付防抖裝置還包括:標記值調整單元,被配置為在所述遠端業務調用的返回結果異常時,為所述防抖標記賦予用於指示遠端業務調用異常的標記值並包括在所述兜底處理結果中。
可選地,在上述態樣的一個示例中,所述支付防抖裝置還包括:異常識別單元,被配置為在所述遠端業務調用的返回結果異常時,識別所述遠端業務調用異常是否為能夠進行兜底處理的異常,其中,所述標記值調整單元還被配置為在識別出所述遠端業務調用異常是能夠進行兜底處理的異常時,為所述防抖標記賦予用於指示遠端業務調用異常的標記值並包括在所述兜底處理結果中。
可選地,在上述態樣的一個示例中,所述支付防抖裝置還包括:防抖標記創建單元,被配置為在所述當前業務請求是首次業務請求時,在攔截到所述當前業務請求後為所述當前業務請求創建所述防抖標記。
可選地,在上述態樣的一個示例中,所述支付防抖裝置還包括:業務類型確定單元,被配置為在所述當前業務請求是首次業務請求時,在攔截到所述當前業務請求後,解析所攔截的當前業務請求,以確定所述當前業務請求所屬的業務類型,其中,所述防抖標記創建單元還被配置為在所確定的業務類型屬於需要防抖處理的業務類型時,為所述當前業務請求創建所述防抖標記。
根據本公開的又一態樣,提供一種計算設備,包括:一個或多個處理器,以及與所述一個或多個處理器耦合的記憶體,所述記憶體儲存指令,當所述指令被所述一個或多個處理器執行時,使得所述一個或多個處理器執行如上所述的支付防抖方法。
根據本公開的再一態樣,提供一種非暫時性機器可讀儲存媒體,其儲存有可執行指令,所述指令當被執行時使得所述機器執行如上所述的支付防抖方法。
利用本公開的方法和裝置,在目前網際網路規模以及複雜的企業級分散式架構體系下,為未來核心業務場景達到99.999%甚至更高的可用率目標提供高可用架構層面的保障,保障金融級別的穩定性,降低系統故障造成的公眾影響,減少商戶收款損失。
利用本公開的方法和裝置,從通用高可用架構層面減少系統抖動、故障對核心業務帶來的影響以及業務損失,提升整體業務鏈路的成功率,同時提升使用者體驗。
利用本公開的方法和裝置,從端的視角重新審視業務鏈路,透過解耦、異構、非同步化等思路可以反哺優化日常的業務鏈路,甚至可以對於一些業務場景升級為常態整體非同步化的能力。
現在將參考示例實施方式討論本文描述的主題。應該理解,討論這些實施方式只是為了使得本領域技術人員能夠更好地理解從而實現本文描述的主題,並非是對申請專利範圍中所闡述的保護範圍、適用性或者示例的限制。可以在不脫離本公開內容的保護範圍的情況下,對所討論的元素的功能和排列進行改變。各個示例可以根據需要,省略、替代或者添加各種過程或組件。例如,所描述的方法可以按照與所描述的順序不同的順序來執行,以及各個步驟可以被添加、省略或者組合。另外,相對一些示例所描述的特徵在其它例子中也可以進行組合。
如本文中使用的,術語“包括”及其變型表示開放的術語,含義是“包括但不限於”。術語“基於”表示“至少部分地基於”。術語“一個實施例”和“一實施例”表示“至少一個實施例”。術語“另一個實施例”表示“至少一個其他實施例”。術語“第一”、“第二”等可以指代不同的或相同的物件。下面可以包括其他的定義,無論是明確的還是隱含的。除非上下文中明確地指明,否則一個術語的定義在整個說明書中是一致的。
一次支付過程包括一個支付階段或多個支付階段,本公開主要針對包括多階段的支付業務。可以將客戶端發起一次業務請求至下一次業務請求看作一個階段或者將客戶端發起一次業務請求至客戶端顯示支付完成看作一個階段。例如,對於線下收錢碼支付業務,如圖1所示,客戶端掃賣家的收錢碼為第一次業務請求,從客戶端發起第一次業務請求至客戶端顯示服務端返回的付款金額輸入框為創建交易號的階段110;使用者向客戶端顯示的付款金額輸入框輸入支付的錢數後確認提交為第二次業務請求,從客戶端發起第二次業務請求到客戶端顯示服務端返回的支付方式選項和支付密碼輸入框為拉起收銀台的階段120;使用者透過客戶端選擇支付方式並輸入支付密碼後確認提交則為第三次業務請求,從客戶端發起第三次業務請求至客戶端顯示服務端返回的“正在支付”的通知為提交支付的階段130;發起的第四次業務請求調用輪詢,查詢訂單的交易狀態,如果交易成功,則客戶端收到“付款成功”的通知,因此第四階段為輪詢支付結果的階段140。可見,線下收錢碼支付業務包括上述四個階段。
因為服務端的分散式系統業務鏈路較長,比較容易發生抖動,所以為了避免支付過程因抖動而中斷或出現錯誤,對於某次業務請求一旦服務端進行遠端調用發生異常則對這次業務請求及其後各次業務請求均進行兜底處理。根據遠端調用返回結果的錯誤碼、異常和/或業務參數等識別業務抖動,對業務抖動進行兜底處理,返回模擬結果,記錄兜底流水。可以根據兜底的流水觸發非同步恢復流程,從墊支帳戶打款給賣家。
圖2示出了本公開實施例1提供的支付防抖方法的流程圖,該過程可以由支付防抖裝置執行。實施例1主要考慮支付過程中一次業務請求的處理。
如圖2所示,在區塊210中,攔截客戶端在支付過程中發送到服務端的當前業務請求,當前業務請求至少包括唯一階段標識,其中,支付過程包括多個支付階段,以及唯一階段標識用於唯一標識當前業務請求所對應的支付階段。
可以透過AOP攔截客戶端發送到服務端的當前業務請求,其中,AOP為Aspect Oriented Programming的縮寫,意為面向導向編程,是透過預編譯方式和運行期動態代理實現程式功能的統一維護的一種技術。AOP可以理解為一個攔截器框架,但是這個攔截器會非常武斷,如果它攔截一個類,那麼它就會攔截這個類中的所有方法。
在區塊220中,基於與當前業務請求對應的防抖標記,確定針對當前業務請求的遠端業務調用是否異常。作為該實施例的一態樣,對於非首次業務請求所帶的防抖標記的標記值為異常的情況,確定針對當前業務請求的遠端業務調用為異常。對於在首次業務請求處理期間創建的防抖標記並且防抖標記的標記值為空的情況,以及非首次業務請求所帶的防抖標記的標記值為正常的情況,都確定針對當前業務請求的遠端業務調用為正常。
在區塊230中,當針對當前業務請求的遠端業務調用被確定為異常時,產生兜底處理結果,兜底處理結果至少包括與唯一階段標識所標識的支付階段對應的模擬正常結果。
在區塊240中,將兜底處理結果發送給客戶端。因此,從客戶端看到的返回結果都是模擬的正常結果。
圖3為在當前業務請求為支付過程的首次業務請求時的支付防抖方法的示例。
在區塊310中,支付防抖裝置攔截客戶端在支付過程中發送到服務端的首次業務請求,首次業務請求至少包括唯一階段標識。
在區塊320中,解析所攔截的首次業務請求,以確定首次業務請求所屬的業務類型。
在區塊330中,在所確定的業務類型屬於需要防抖處理的業務類型時,為首次業務請求創建防抖標記,防抖標記用於指示本次支付業務是需要防抖處理的業務。在本公開的一個示例中,需要防抖處理的業務類型可以包括線下收錢碼支付業務。防抖標記例如為appfuse_type。因為服務端為分散式系統,所以對業務請求進行處理需要進行遠端業務調用。防抖標記的標記值用於指示遠端業務調用是正常還是異常,異常指遠端業務調用的鏈路發生抖動。防抖標記的標記值例如為normal或shake,其中shake代表抖動,normal表示正常,即沒發生抖動。
在區塊340中,根據首次業務請求進行遠端業務調用。這裡可以由支付防抖裝置作為上游系統向服務端的下游系統進行遠端業務調用,作為替換方式,也可以由支付防抖裝置指示服務端的上游系統向下游系統進行遠端業務調用。
在區塊350中,基於遠端業務調用返回的調用結果,確定針對首次業務請求的遠端業務調用是否異常。如果遠端業務調用返回的調用結果異常,則確定針對首次業務請求的遠端業務調用異常,流程進行到區塊360。如果遠端業務調用返回的調用結果正常,則確定針對首次業務請求的遠端業務調用正常,流程進行到區塊380。
在區塊360中,為防抖標記賦予用於指示遠端業務調用異常的標記值,比如shake,基於與唯一階段標識所標識的支付階段對應的模擬正常結果和防抖標記產生兜底處理結果。與唯一階段標識所標識的支付階段對應的模擬正常結果保存在支付防抖裝置的記憶體中,支付防抖裝置解析所攔截的業務請求,根據解析出來的唯一階段標識在其記憶體中找到對應的模擬正常結果,從而產生兜底處理結果。流程進行到區塊370。
在區塊370中,將兜底處理結果發送給客戶端。因此,從客戶端看到的返回結果都是模擬的正常結果。
在區塊380中,為防抖標記賦予用於指示遠端業務調用正常的標記值,比如normal,基於遠端業務調用返回的調用結果和防抖標記產生正常處理結果。因此,正常處理結果包括遠端業務調用返回的調用結果中的資訊和防抖標記。流程進行到區塊390。
在區塊390中,將正常處理結果發送給客戶端。
圖4為當前業務請求為支付過程的非首次業務請求時的支付防抖方法的示例。
在區塊400中,支付防抖裝置攔截客戶端在支付過程中發送到服務端的非首次業務請求,非首次業務請求至少包括唯一階段標識和防抖標記。其中,防抖標記是上一業務請求處理過程所返回的防抖標記。
在區塊410中,判斷非首次業務請求所包括的防抖標記的標記值指示遠端業務調用是否異常。如果防抖標記的標記值指示遠端業務調用異常,則確定針對非首次業務請求的遠端業務調用異常,流程進行到區塊420。如果防抖標記的標記值指示遠端業務調用正常,則流程進行到區塊440。
在區塊420中,產生兜底處理結果,兜底處理結果包括與唯一階段標識所標識的支付階段對應的模擬正常結果和防抖標記,防抖標記具有用於指示遠端業務調用異常的標記值,比如shake。流程進行到區塊430。
在區塊430中,將兜底處理結果發送給客戶端。因此,從客戶端看到的返回結果都是模擬的正常結果。圖5為一個示例提供的從客戶端看到的支付的中間階段返回的模擬正常結果的示意圖。圖6為圖5所示的支付示例的最後階段返回的模擬正常結果的示意圖。
在區塊440中,根據非首次業務請求進行遠端業務調用。流程進行到區塊450。
在區塊450中,基於遠端業務調用返回的調用結果是否異常,確定針對非首次業務請求的遠端業務調用是否異常。如果調用結果異常比如SYSTEM_ERROR時,則確定遠端業務調用異常,流程進行到區塊460。如果調用結果正常,則確定遠端業務調用正常,流程進行到區塊480。
在區塊460中,為防抖標記賦予用於指示遠端業務調用異常的標記值,比如shake,基於與唯一階段標識所標識的支付階段對應的模擬正常結果和防抖標記產生兜底處理結果。流程進行到區塊470。
在區塊470中,將兜底處理結果發送給客戶端。
在區塊480中,產生正常處理結果,正常處理結果包括遠端業務調用返回的調用結果中的資訊和防抖標記,防抖標記具有用於指示遠端業務調用正常的標記值,比如normal。流程進行到區塊490。
在區塊490中,將正常處理結果發送給客戶端。
作為一個可選實施例,在圖3的區塊360和/或圖4的區塊460中為防抖標記賦予用於指示遠端業務調用異常的標記值之前,該實施例的支付防抖方法還可以包括抖動識別步驟。抖動識別步驟可以包括:識別遠端業務調用異常是否為能夠進行兜底處理的異常,在識別出遠端業務調用異常是能夠進行兜底處理的異常時,為防抖標記賦予用於指示遠端業務調用異常的標記值並包括在兜底處理結果中。
如果當前的業務請求包括支付資訊,支付防抖裝置可以記錄業務請求中的支付資訊和多階段上下文的狀態快取。支付資訊可以包括訂單金額、付款帳戶、以及收款帳戶等資訊,根據支付資訊產生訂單,訂單可以包括流水號。此外,與支付過程對應的支付資訊還可以來自服務端。記錄支付資訊以便於在同步兜底處理之後進行防抖非同步恢復。多階段上下文的狀態快取是多階段狀態中防抖需要用到的資訊。作為一個可選實施例,在當前業務請求是支付過程的最後業務請求時,該實施例的支付防抖方法還可以包括:在將兜底處理結果發送給客戶端後,根據與支付過程對應的支付資訊,從墊支帳戶中支付相應數目的支付款給賣家。從墊支帳戶中支付相應數目的支付款給賣家的過程可以稱為非同步恢復流程,因為這個過程是以非同步恢復方式完成的。在從墊支帳戶中支付相應數目的支付款給賣家之前,該實施例的支付防抖方法還可以包括:回應於從墊支帳戶中支付相應數目的支付款給賣家,通知賣家相應數目的支付款已到帳。通知賣家可以採用語音播報、簡訊通知、或者其他任何現有的方式。
在同步兜底處理之後,非同步恢復流程可以透過即時、定時、或者手動等方式觸發。其中,非同步恢復的過程與前述業務請求的處理過程在分散式系統中經由的鏈路大概率是不同的鏈路,也有可能是相同的鏈路。通常非同步恢復流程是以即時方式觸發,大約從通知賣家支付款已到帳時起的例如1~2秒鐘後從墊支帳戶打相應數目的支付款到賣家的帳戶。在極少數情況下,如果以即時方式觸發非同步恢復流程時系統仍然有故障,則可以定時方式從通知賣家支付款已到帳時起經過預設時長後從墊支帳戶打支付款到賣家的帳戶。在極特殊情況下,如果以定時方式觸發非同步恢復流程時系統仍然有故障,則可以人工介入以手動方式從墊支帳戶打支付款到賣家的帳戶。
整個支付過程對使用者而言是有體感的,看到的是免單優惠,如圖5和圖6所示,對賣家而言是無感知的,使用者支付完成後,同步地使賣家收到語音播報或簡訊通知等,而在資金處理方面需要在防抖非同步恢復的時候從支付墊資帳戶打款給賣家,而買家帳戶沒有資金變動而且可以事後從買家帳戶追款或者不從買家帳戶追款。
圖7為本公開實施例2提供的支付防抖方法的整個支付過程的流程圖,實施例2以本次支付過程包括3個階段為例。其中,支付防抖裝置為承擔防抖能力的基礎功能模組,支付防抖裝置可以是接入服務端中的組件,也可以是客戶端和服務端之間的獨立裝置。
如圖7所示,在700,支付防抖裝置攔截客戶端在支付過程中發送到服務端的第一次業務請求,第一次業務請求包括唯一階段標識,其中,唯一階段標識用於唯一標識當前業務請求所對應的第一支付階段。
在705,為第一次業務請求創建防抖標記,比如appfuse_type,以標識本次支付為需要防抖的業務。
在710,根據第一次業務請求進行遠端業務調用。
在715,基於遠端業務調用返回的調用結果是否異常,確定針對第一次業務請求的遠端業務調用是否異常。在確定遠端業務調用正常時,為防抖標記賦予用於指示遠端業務調用正常的標記值,比如normal,基於遠端業務調用返回的調用結果和防抖標記產生正常處理結果。
在720,將正常處理結果發送給客戶端。
在725,支付防抖裝置攔截客戶端在支付過程中發送到服務端的第二次業務請求,第二次業務請求包括唯一階段標識和防抖標記,其中,唯一階段標識用於唯一標識當前業務請求所對應的第二支付階段,防抖標記具有用於指示遠端業務調用正常的標記值,比如normal。
在730,根據第二次業務請求進行遠端業務調用。
在735,基於遠端業務調用返回的調用結果異常,確定針對第二次業務請求的遠端業務調用異常。
在740,在確定遠端業務調用異常時,識別遠端業務調用異常是否為能夠進行兜底處理的異常,即識別返回的調用結果的錯誤碼是否在兜底的範圍內,如果在兜底範圍內則進行兜底處理。
在745,在識別出異常為能夠進行兜底處理的異常時,為防抖標記賦予用於指示遠端業務調用異常的標記值,比如shake,基於與唯一階段標識所標識的第二支付階段對應的模擬正常結果和防抖標記產生兜底處理結果。
在750,將兜底處理結果發送給客戶端。
在755,支付防抖裝置攔截客戶端在支付過程中發送到服務端的最後業務請求,最後業務請求包括唯一階段標識和防抖標記,其中,唯一階段標識用於唯一標識當前業務請求所對應的最後支付階段,該防抖標記具有用於指示遠端業務調用異常的標記值,比如shake。
在760,基於防抖標記的標記值指示遠端業務調用異常,確定針對最後業務請求的遠端業務調用異常。
在765,產生兜底處理結果,兜底處理結果包括與唯一階段標識所標識的最後支付階段對應的模擬正常結果和防抖標記,防抖標記具有用於指示遠端業務調用異常的標記值,比如shake。
在770,將兜底處理結果發送給客戶端。
在775,客戶端顯示完成本次支付,使用者看到的都是模擬正常結果。
在780,啟動非同步恢復過程,以實現業務的最終一致。
在785,根據與該支付過程對應的支付資訊,從墊支帳戶中支付相應數目的支付款給賣家。
該實施例的支付防抖方法還可以包括:回應於從墊支帳戶中支付相應數目的支付款給賣家,通知賣家相應數目的支付款已到帳。通知賣家可以採用語音播報、簡訊通知、或者其他任何現有的方式。
由實施例2可見,對於防抖處理的業務,除了本次支付的最後一次業務請求,對於之前的每一次業務請求,支付防抖裝置均在發送返回結果給客戶端的同時,發送具有標記值的防抖標記給客戶端。客戶端發送下一次業務請求的時候會帶上該防抖標記,再次進入到支付防抖裝置內,如果防抖標記的防抖值指示遠端業務調用異常,則會被識別為這個支付過程上一階段已經被兜底處理,當次階段繼續走兜底流程,直到使用者完成這次支付。當然,對於本次支付的最後一次業務請求,支付防抖裝置發送返回結果給客戶端,也可以同時發送具有標記值的防抖標記給客戶端,只是這一階段是支付過程的最後階段,後面不會再有客戶端發送的業務請求了,因此發送防抖標記給客戶端的話資訊不夠簡潔。另外,如果對於當前業務請求進行遠端業務調用異常,支付防抖裝置在發送返回結果的同時發送具有用於指示遠端業務調用異常的標記值的防抖標記給客戶端,對於客戶端後續發起的業務請求,支付防抖裝置都不再發送防抖標記給客戶端,則雖然發送給客戶端的資訊簡潔,但是需要修改客戶端的程式。
本公開的支付防抖方法不限於上述各實施例所公開的技術方案,上面公開的對於支付過程一次業務請求處理的各個實施例可以在不偏離發明實質的情況下做出各種組合、變形和修改,此外,整個支付過程的各個階段的各個實施例也可以在不偏離發明實質的情況下做出各種組合、變形和修改。
利用本公開的方案,從通用高可用架構層面減少服務端的鏈路抖動、故障對業務帶來的影響以及業務損失,提升整體業務鏈路的成功率,同時提升使用者體驗。
利用本公開的方案,在目前網際網路規模以及複雜的企業級分散式架構體系下,為未來核心業務場景達到99.999%甚至更高的可用率目標提供高可用架構層面的保障,保障金融級別的穩定性,降低系統抖動造成的公眾影響,減少商戶收款損失。
圖8為本公開一個實施例提供的支付防抖裝置800的結構示意圖。其中,支付防抖裝置既可以為一個獨立的裝置,也可以為接入服務端的組件。如圖8所示,該實施例的支付防抖裝置800可以包括:攔截單元810、異常確定單元820、兜底處理單元830、以及發送單元840。
攔截單元810被配置為攔截客戶端在支付過程中發送到服務端的當前業務請求,當前業務請求至少包括唯一階段標識,其中,支付過程包括多個支付階段,以及唯一階段標識用於唯一標識當前業務請求所對應的支付階段。攔截單元810的操作可以參照上面參考圖2描述的區塊210的操作。
異常確定單元820被配置為基於與當前業務請求對應的防抖標記,確定針對當前業務請求的遠端業務調用是否異常。異常確定單元820的操作可以參照上面參考圖2描述的區塊220的操作。
兜底處理單元830被配置為在針對當前業務請求的遠端業務調用被確定為異常時,產生兜底處理結果,兜底處理結果至少包括與唯一階段標識所標識的支付階段對應的模擬正常結果。兜底處理單元830的操作可以參照上面參考圖2描述的區塊230的操作。
發送單元840被配置為將兜底處理結果發送給客戶端。發送單元840的操作可以參照上面參考圖2描述的區塊240的操作。
圖9為本公開另一個實施例提供的支付防抖裝置900的結構示意圖。如圖9所示,該實施例的支付防抖裝置900可以包括:攔截單元910、防抖標記創建單元920、異常確定單元930、業務調用單元940、兜底處理單元950、標記值調整單元960、以及發送單元970。
攔截單元910被配置為攔截客戶端在支付過程中發送到服務端的當前業務請求,當前業務請求至少包括唯一階段標識,其中,支付過程包括多個支付階段,以及唯一階段標識用於唯一標識當前業務請求所對應的支付階段。攔截單元910的操作可以參照上面參考圖7描述的700、725和755的操作。
防抖標記創建單元920,被配置為在當前業務請求是首次業務請求時,在攔截到當前業務請求後為當前業務請求創建防抖標記。防抖標記創建單元920的操作可以參照上面參考圖7描述的705的操作。
異常確定單元930被配置為基於與當前業務請求對應的防抖標記,確定針對當前業務請求的遠端業務調用是否異常。異常確定單元930還可以被配置為在防抖標記的標記值指示遠端業務調用異常時,確定針對當前業務請求的遠端業務調用異常。異常確定單元930的操作可以參照上面參考圖7描述的735和760的操作。
業務調用單元940被配置為在防抖標記的標記值指示遠端業務調用正常時,根據當前業務請求執行遠端業務調用。作為該實施例的一態樣,對於在首次業務請求處理期間創建防抖標記並且防抖標記的標記值為空的情況,以及非首次業務請求所帶的防抖標記的標記值為正常的情況,都認為防抖標記的標記值指示遠端業務調用正常。業務調用單元940的操作可以參照上面參考圖7描述的710和730的操作。異常確定單元930還可以被配置為基於遠端業務調用的返回結果是否異常,確定針對當前業務請求的遠端業務調用是否異常。異常確定單元930的操作可以參照上面參考圖7描述的735的操作。
兜底處理單元950被配置為在針對當前業務請求的遠端業務調用被確定為異常時,產生兜底處理結果,兜底處理結果至少包括與唯一階段標識所標識的支付階段對應的模擬正常結果。兜底處理單元950的操作可以參照上面參考圖7描述的745和765的操作。
標記值調整單元960被配置為在遠端業務調用的返回結果異常時,為防抖標記賦予用於指示遠端業務調用異常的標記值並包括在兜底處理結果中。標記值調整單元960的操作可以參照上面參考圖7描述的745的操作。
發送單元970被配置為將兜底處理結果發送給客戶端。發送單元970的操作可以參照上面參考圖7描述的750和770的操作。
作為該實施例的一態樣,該實施例的支付防抖裝置還可以包括正常處理單元。正常處理單元被配置為在針對當前業務請求的遠端業務調用被確定為正常時,產生正常處理結果,正常處理結果至少包括遠端業務調用返回的調用結果中的資訊。正常處理單元的操作可以參照上面參考圖7描述的715的操作。標記值調整單元960還可以被配置為在遠端業務調用的返回結果正常時,確定針對當前業務請求的遠端業務調用正常,為防抖標記賦予用於指示遠端業務調用正常的標記值並包括在正常處理結果中。標記值調整單元960的操作可以參照上面參考圖7描述的715的操作。發送單元970還可以被配置為將正常處理結果發送給客戶端。發送單元970的操作可以參照上面參考圖7描述的720的操作。
作為該實施例的另一態樣,該實施例的支付防抖裝置還可以包括業務類型確定單元。業務類型確定單元被配置為在當前業務請求是首次業務請求時,在攔截到當前業務請求後,解析所攔截的當前業務請求,以確定當前業務請求所屬的業務類型。業務類型確定單元的操作可以參照上面參考圖3描述的區塊320的操作。防抖標記創建單元920還可以被配置為在所確定的業務類型屬於需要防抖處理的業務類型時,為當前業務請求創建防抖標記。標記創建單元920的操作可以參照上面參考圖3描述的區塊330的操作。
作為該實施例的又一態樣,該實施例的支付防抖裝置還可以包括異常識別單元。異常識別單元被配置為在遠端業務調用的返回結果異常時,識別遠端業務調用異常是否為能夠進行兜底處理的異常。異常識別單元的操作可以參照上面參考圖7描述的740的操作。標記值調整單元960還可以被配置為在識別出遠端業務調用異常是能夠進行兜底處理的異常時,為防抖標記賦予用於指示遠端業務調用異常的標記值並包括在兜底處理結果中。標記值調整單元960的操作可以參照上面參考圖7描述的745的操作。
作為該實施例的在一態樣,該實施例的支付防抖裝置還可以包括支付處理單元。在當前業務請求是所述支付過程的最後業務請求時,在將兜底處理結果發送給客戶端後,根據與支付過程對應的支付資訊,從墊支帳戶中支付相應數目的支付款給賣家。支付處理單元的操作可以參照上面參考圖7描述的780-785的操作。
本公開的支付防抖裝置不限於上述各實施例所公開的技術方案,上面公開的各個實施例可以在不偏離發明實質的情況下做出各種組合、變形和修改。
如上參照圖2-9,對本公開的支付防抖方法及裝置的實施例進行了描述。應當理解的是,以上對於方法實施例的細節描述同樣適用於裝置實施例。以上的支付防抖裝置可以採用硬體實現,也可以採用軟體或者硬體和軟體的組合來實現。
圖10是本公開的一個實施例提供的實現支付防抖的計算設備的結構方塊圖。
如圖10所示,計算設備1000可以包括至少一個處理器1010、記憶體1020、記憶體1030、通信介面1040以及內部匯流排1050,該至少一個處理器1010執行在電腦可讀儲存媒體(即,記憶體1020)中儲存或編碼的至少一個電腦可讀指令(即,上述以軟體形式實現的元素)。
在一個實施例中,在記憶體1020中儲存有電腦可執行指令,其當執行時使得至少一個處理器1010:攔截客戶端在支付過程中發送到服務端的當前業務請求,當前業務請求至少包括唯一階段標識,其中,支付過程包括多個支付階段,以及唯一階段標識用於唯一標識當前業務請求所對應的支付階段;基於與當前業務請求對應的防抖標記,確定針對當前業務請求的遠端業務調用是否異常;在針對當前業務請求的遠端業務調用被確定為異常時,產生兜底處理結果,兜底處理結果至少包括與唯一階段標識所標識的支付階段對應的模擬正常結果;以及將兜底處理結果發送給客戶端。
應該理解的是,在記憶體1020中儲存的電腦可執行指令當執行時使得至少一個處理器1010進行本公開的各個實施例中以上結合圖2-9描述的各種操作和功能。
在本公開中,計算設備1000可以包括但不限於:個人電腦、伺服器電腦、工作站、桌上型電腦、膝上型電腦、筆記型電腦、行動計算裝置、智慧型電話、平板電腦、行動電話、個人數位助理(PDA)、手持裝置、訊息收發設備、可佩戴計算設備、消費電子設備等等。
根據一個實施例,提供了一種例如非暫時性機器可讀媒體的程式產品。非暫時性機器可讀媒體可以具有指令(即,上述以軟體形式實現的元素),該指令當被機器執行時,使得機器執行本公開的各個實施例中以上結合圖2-9描述的各種操作和功能。
具體地,可以提供配有可讀儲存媒體的系統或者裝置,在該可讀儲存媒體上儲存著實現上述實施例中任一實施例的功能的軟體程式碼,且使該系統或者裝置的電腦或處理器讀出並執行儲存在該可讀儲存媒體中的指令。
在這種情況下,從可讀媒體讀取的程式碼本身可實現上述實施例中任何一項實施例的功能,因此機器可讀代碼和儲存機器可讀代碼的可讀儲存媒體構成了本發明的一部分。
可讀儲存媒體的實施例包括軟碟、硬碟、磁光碟、光碟(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁帶、非易失性儲存卡和ROM。可選擇地,可以由通信網路從伺服器電腦上或雲端上下載程式碼。
本領域技術人員應當理解,上面公開的各個實施例可以在不偏離發明實質的情況下做出各種變形和修改。因此,本發明的保護範圍應當由所附的申請專利範圍來限定。
需要說明的是,上述各流程和各系統結構圖中不是所有的步驟和單元都是必須的,可以根據實際的需要忽略某些步驟或單元。各步驟的執行順序不是固定的,可以根據需要進行確定。上述各實施例中描述的裝置結構可以是物理結構,也可以是邏輯結構,即,有些單元可能由同一物理實體實現,或者,有些單元可能分由多個物理實體實現,或者,可以由多個獨立設備中的某些部件共同實現。
以上各實施例中,硬體單元或模組可以透過機械方式或電氣方式實現。例如,一個硬體單元、模組或處理器可以包括永久性專用的電路或邏輯(如專門的處理器,FPGA或ASIC)來完成相應操作。硬體單元或處理器還可以包括可編程邏輯或電路(如通用處理器或其它可編程處理器),可以由軟體進行臨時的設置以完成相應操作。具體的實現方式(機械方式、或專用的永久性電路、或者臨時設置的電路)可以基於成本和時間上的考慮來確定。
上面結合圖式闡述的具體實施方式描述了示例性實施例,但並不表示可以實現的或者落入申請專利範圍的保護範圍的所有實施例。在整個本說明書中使用的術語“示例性”意味著“用作示例、實例或例示”,並不意味著比其它實施例“優選”或“具有優勢”。出於提供對所描述技術的理解的目的,具體實施方式包括具體細節。然而,可以在沒有這些具體細節的情況下實施這些技術。在一些實例中,為了避免對所描述的實施例的概念造成難以理解,習知的結構和裝置以方塊圖形式示出。
本公開內容的上述描述被提供來使得本領域任何普通技術人員能夠實現或者使用本公開內容。對於本領域普通技術人員來說,對本公開內容進行的各種修改是顯而易見的,並且,也可以在不脫離本公開內容的保護範圍的情況下,將本文所定義的一般性原理應用於其它變型。因此,本公開內容並不限於本文所描述的示例和設計,而是與符合本文公開的原理和新穎性特徵的最廣範圍相一致。
110:階段
120:階段
130:階段
140:階段
210:區塊
220:區塊
230:區塊
240:區塊
310:區塊
320:區塊
330:區塊
340:區塊
350:區塊
360:區塊
370:區塊
380:區塊
390:區塊
400:區塊
410:區塊
420:區塊
430:區塊
440:區塊
450:區塊
460:區塊
470:區塊
480:區塊
490:區塊
700:步驟
705:步驟
710:步驟
715:步驟
720:步驟
725:步驟
730:步驟
735:步驟
740:步驟
745:步驟
750:步驟
755:步驟
760:步驟
765:步驟
770:步驟
775:步驟
780:步驟
785:步驟
800:支付防抖裝置
810:攔截單元
820:異常確定單元
830:兜底處理單元
840:發送單元
900:支付防抖裝置
910:攔截單元
920:防抖標記創建單元
930:異常確定單元
940:業務調用單元
950:兜底處理單元
960:標記值調整單元
970:發送單元
1000:計算設備
1010:處理器
1020:記憶體
1030:記憶體
1040:通信介面
1050:內部匯流排
透過參照下面的圖式,可以實現對於本公開內容的本質和優點的進一步理解。在圖式中,類似組件或特徵可以具有相同的圖式標記。
圖1為線下收錢碼支付業務所包括的各個支付階段的示例;
圖2示出了本公開實施例1提供的支付防抖方法的流程圖;
圖3為圖2中所示的當前業務請求為支付過程的首次業務請求的示例;
圖4為圖2中所示的當前業務請求為支付過程的非首次業務請求的示例;
圖5為一個示例提供的從客戶端看到的支付的中間階段返回的模擬正常結果的示意圖;
圖6為圖5所示的支付示例的最後返回的模擬正常結果的示意圖;
圖7為本公開實施例2提供的支付防抖方法的整個支付過程的流程圖;
圖8為本公開一個實施例提供的支付防抖裝置800的結構示意圖;
圖9為本公開另一個實施例提供的支付防抖裝置900的結構示意圖;
圖10為本公開的一個實施例提供的實現支付防抖的計算設備的結構方塊圖。