paypal異步回調超時或無法請求到我們的服務器解決方案

業務場景

由於我司最近接入海外業務,支付使用了paypal支付,在線上跑一段時間後頻頻的收到用戶反饋購買商品時用戶已經支付了,系統卻提示用戶未購買成功。這導致用戶體驗相當的差,也影響到了業務正常運作。

問題排查

於是我就拿用戶提供的paypal交易號去查paypal商戶管理平臺查看用戶是否已經完成了支付,結果發現用戶真的完成了支付,但是我們的系統訂單狀態卻是未支付狀態,通過查看數據對比分析基於只有部分用戶反饋未支付成功、其它用戶都支付成功了,可以排除不是代碼級別低級錯誤,可能有如下原因:

  • 原因1
    描述:業務系統與支付中心繫統進行通信時是否延時過大,導致整個交易沒有進行到底系統就報錯。
    結果分析:在支付中心繫統與業務中心繫統中未發現操作日誌,可以排除。

  • 原因2
    描述:paypal服務器異步回調我們服務器時因爲網絡問題延遲或丟包,導致無法請求到我們的系統,造成訂單是未支付狀態
    結果分析:我們的服務部署在國內,使用了阿里雲全球CDN加速器進行加速,基於網絡架構,國外某些區域請求我們服務器時可能會存在丟包或延時的情況。

解決方案

完成問題排查以後,我基本確定是原因2導致的,由於現在好大一部分用戶都反饋有此類問題,所以得想一個應急方案來臨時處理一下呀,於是我就有了如下2套方案:

  • 應急方案1:開發一個小工具針對已付款的用戶直接激活訂單等業務信息,開發小工具時間成本在4個小時左右,而且爲了保證小工具不出問題,還有經過測試人員測一輪才能交給運營使用,七七八八算下來,從開發到交到運營手上前前後後需要1天的時間,時間成本折騰不起,於是又想了另外一個方案。
  • 應急方案2:登錄paypal商戶平臺,點擊右上角 設置->選擇 銷售工具->點擊 即時付款通知的更新->點擊 即時付款通知記錄後,根據paypal交易號查看paypal異步回調交易記錄,然後選擇重新發送異步通知信息,該方案可行,運營可以直接使用,只需要快速寫一個操作文檔交給運營即可。在這裏插入圖片描述

應急方案已經有了,但是從長遠來看,我們得從根上解決問題。

  • 長遠方案1:可否改變網絡架構呢?網絡架構的確可以調整,但是調整成本太大。
  • 長遠方案2:既然paypal異步回調老是由於網絡原因導致我們的訂單業務無法成功,我們可否繞過異步回調呢?嘿嘿,當然可以啦,我們可以在paypal同步回調我們服務器時做手腳呀,在用戶完成支付後點擊返回商家我們就可以使用paypal攜帶給我們的參數再拿去驗證簽名如果合法則繼續執行訂單業務信息,我們既然有了同步回調處理邏輯了,異步回調是否可以捨棄呢?我認爲還是繼續保留,原因是同步回調受限於用戶要點擊返回商家,如果用戶不返回商家則我們的同步回調就調不起來。在同步回調爲調取時異步回調繼續監控,雙從保障,完美解決。

綜上所述:長遠方案2有個弊端也會導致用戶購買不成功,那就是:用戶支付完成以後不點擊返回商家,且paypal異步回調沒有調取成功,則問題就會暴露,最好的方案還是長遠方案1,如果時間允許、成本允許可以考慮重構網絡架構,將我們的系統根據服務點架設到具體的區域。

讀者,您好,如果您有什麼更好的方案歡迎在評論區回覆,共同學習、共同成長喲!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章