場景:
用戶可以使用賬戶積分進行 “支付消費”遍坟,每一積分等于一元RMB蔬胯。
當消費的積分不足時,可以通過額外支付金額 ?上積分進行支付逾苫。
例如 一件衣服需要 100塊,可以使用50積分+50RMB混合支付進行消費枚钓。
問題1:
由于支付是異步操作并回調(diào)到業(yè)務系統(tǒng)的铅搓,所以 使用第三方支付過程中,原來的賬戶積分已經(jīng)發(fā)生變化了搀捷。
就以前面例子來說在 在進行支付過程中星掰,有可能因為其他業(yè)務導致 原來的50積分扣掉為10積分多望,那這樣支付完畢以后,必然是積分不足無法完成扣費操作氢烘。
解決方法:
講用戶積分進行鎖定怀偷,并且鎖定10分鐘后如果無法進行消費操作,則自動解鎖(這里可以考慮使用redis的存活時間進行實現(xiàn))播玖。鎖定了10積分以后椎工,其他業(yè)務功能再進行相關的消費操作前,就判斷得到積分不足從而終止用戶消費操作蜀踏。待 第三方支付成功以后维蒙,會將鎖定積分 + 支付金額繼續(xù)事務操作。
問題2:
業(yè)務系統(tǒng)有可能經(jīng)常更新果覆,并且支付系統(tǒng)有可能不是獨立運行颅痊。
換句話說支付系統(tǒng)有可能因為其他功能更新而更新,從而會有一段時間無法提供服務局待。
例如 已經(jīng)發(fā)起支付斑响,50積分被鎖定時,服務器碰巧正在更新燎猛,并且10分鐘后才回復正常服務恋捆,
10分鐘后鎖定積分被解鎖。
用戶在10分鐘以內(nèi)就完成了支付操作重绷,并且第三方嘗試回調(diào)給業(yè)務系統(tǒng)沸停,發(fā)現(xiàn)業(yè)務系統(tǒng)一直處于更新狀態(tài),直到10分鐘過后業(yè)務系統(tǒng)恢復正常運作昭卓。此時由于50積分被解鎖了愤钾,有可能會出現(xiàn)50積分余額不足的情況。
解決方法:
在更新系統(tǒng)之前一段時間候醒,例如半小時動態(tài)設定一個 關閉支付 狀態(tài)能颁,所有準備發(fā)起的支付都會被拒絕,可能提示為“系統(tǒng)維護中倒淫,暫時無法提供支付操作”之類的內(nèi)容伙菊。在 關閉支付 以后,就可以開始更新系統(tǒng)了敌土。
注意:關閉支付功能一定是要能動態(tài)設置而不需要更新系統(tǒng)镜硕,所以在支付上線之前就應該有這個機制了。
問題3:
鑒于問題2的解決方法返干,如果忘記 關閉支付 功能兴枯,那應該怎么處理呢?
解決方法:
待續(xù)