在APP内实现会员自动续费功能前端
在APP内实现会员自动续费功能,其核心流程有如下两个环节:微信
会员自动续费本质是委托扣款模式。只有用户完成签约,商户才能够对用户帐户进行自动扣款,从而完成会员订单的支付操做。异步
用户在应用内经过微信或支付宝的SDK完成代扣签约,微信或支付宝在用户签约成功后将签约信息经过异步通知的方式通知给商户后台。商户后台须要维护用户的签约信息,签约ID为核心信息,在订单的代扣请求中用于验证受权。post
系统在检测用户会员即将到期后,发起该用户自动续费流程。须要完成订单建立及订单支付环节(代扣),最后在支付通知回调时为用户延迟会员时间。续费订单和普通订单主要区别在因而否调用委托代扣接口。微信支付
用户委托扣款受权是会员自动续费的前提,主要有支付中签约和纯签约两种模式。优化
支付的同时完成代扣协议的签约。只须要在原先的下单参数增长签约信息就能够支持签约功能,看上去很是适合咱们会员自动续费的场景。在用户下单购买会员连续包月以后一并完成签约功能。 设计
然而在实践的过程当中发现有个问题忽略了,支付中签约默认是不开启签约的,须要用户手动开启委托代扣。咱们是但愿能够提升用户签约比例的,须要用户手动勾选这一步的操做成本真的太大了,不符合咱们的预期。cdn
纯签约模式是商户先经过前端页面调用纯签约接口与用户完成代扣协议签约,当须要扣款时可调用申请扣款接口进行自动扣款。用户在签约后商户后台会接收到回调通知。blog
调整后会员自动续费基本流程以下所示: 接口
仅签约接口能够限定用户必须签约后才能够购买连续包月商品。为了模拟用户签约并支付的体验,在用户签约成功后由系统发起自动续费流程。
优化流程后,用户签约成功以后须要发起自动续费流程。这里须要确保不会对用户重复续费,这里能够考虑使用签约ID做为订单幂等元素。相同的签约ID只会发起一次自动续费。
当会员到期后会发起自动续费流程,这里能够考虑使用会员到期时间戳做为订单幂等元素。若会员续费成功,会员到期时间戳会相应延长,不会再触发会员即将到期的逻辑。若会员续费失败,会员到期时间戳仍是不变,也不会发起多个续费订单。
在功能实现时换个思路可能会有不同的发现。在这个功能上,使用仅签约接口能够模拟用户支付并签约的效果,符合咱们的预期。关于订单服务的设计能够查看以前的文章:订单服务的设计思考