1、目標
在APP內實現會員自動續費功能
2、流程
在APP內實現會員自動續費功能,其核心流程有以下兩個環節:
2.1 會員自動續費授權
會員自動續費本質是委託扣款模式。只有使用者完成簽約,商戶才可以對使用者賬戶進行自動扣款,從而完成會員訂單的支付操作。
使用者在應用內通過微信或支付寶的SDK完成代扣簽約,微信或支付寶在使用者簽約成功後將簽約資訊通過非同步通知的方式通知給商戶後臺。商戶後臺需要維護使用者的簽約資訊,簽約ID為核心資訊,在訂單的代扣請求中用於驗證授權。
2.2 會員到期後自動發起續費流程
系統在檢測使用者會員即將到期後,發起該使用者自動續費流程。需要完成訂單建立及訂單支付環節(代扣),最後在支付通知回撥時為使用者延遲會員時間。續費訂單和普通訂單主要區別在於是否呼叫委託代扣介面。
3、委託扣款授權
使用者委託扣款授權是會員自動續費的前提,主要有支付中籤約和純簽約兩種模式。
3.1 支付中籤約
支付的同時完成代扣協議的簽約。只需要在原先的下單引數增加簽約資訊就可以支援簽約功能,看上去非常適合我們會員自動續費的場景。在使用者下單購買會員連續包月之後一併完成簽約功能。
然而在實踐的過程中發現有個問題忽略了,支付中籤約預設是不開啟簽約的,需要使用者手動開啟委託代扣。我們是希望可以提高使用者簽約比例的,需要使用者手動勾選這一步的操作成本真的太大了,不符合我們的預期。
3.2 僅簽約
純簽約模式是商戶先通過前端頁面呼叫純簽約介面與使用者完成代扣協議簽約,當需要扣款時可呼叫申請扣款介面進行自動扣款。使用者在簽約後商戶後臺會接收到回撥通知。
4、方案設計
調整後會員自動續費基本流程如下所示:
4.1 自動續費流程優化
- 使用僅簽約介面,不使用支付中籤約介面
僅簽約介面可以限定使用者必須簽約後才可以購買連續包月商品。為了模擬使用者簽約並支付的體驗,在使用者簽約成功後由系統發起自動續費流程。
4.2 如何避免會員簽約後的重複續費
優化流程後,使用者簽約成功之後需要發起自動續費流程。這裡需要確保不會對使用者重複續費,這裡可以考慮使用簽約ID作為訂單冪等元素。相同的簽約ID只會發起一次自動續費。
4.3 如何避免會員到期後的重複續費
當會員到期後會發起自動續費流程,這裡可以考慮使用會員到期時間戳作為訂單冪等元素。若會員續費成功,會員到期時間戳會相應延長,不會再觸發會員即將到期的邏輯。若會員續費失敗,會員到期時間戳還是不變,也不會發起多個續費訂單。
5、小結
在功能實現時換個思路可能會有不一樣的發現。在這個功能上,使用僅簽約介面可以模擬使用者支付並簽約的效果,符合我們的預期。關於訂單服務的設計可以檢視之前的文章:訂單服務的設計思考