关于连续订阅的业务设计

72 天前
 aababc

老铁们,我又来求助了,公司在做出海的业务,需要对接 apple/google 的自动订阅,订阅的回调每次都会有一个 expires_date_ms 的结束时间告诉我们订阅啥时间结束。为了方便我们会直接使用这个 expires_date_ms 作为用户的到期时间,但是产品又希望能做一些优惠活动比如赠送用户时长。现在遇到的问题就是如何协调 apple/google 订阅的到期时间和自己赠送的时长。我们现在的技术方案是使用两个字段来存储,一个是到期时间一个是赠送的时长,判断如果用户到期了但是又有赠送时长,就使用当前时间+赠送的订阅时长作为用户新的到期时间,这里还需要一个定时脚本来扣减赠送时长。但是个人总觉得这种方案不够优秀,看看大家有没有更好的方案

2810 次点击
所在节点    程序员
26 条回复
iosyyy
72 天前
@aababc #4 那就把过期时间设为 now+赠送时间呗
也就是说你这个加的时间起点应该是从订阅时间结束算的
如果订阅时间已经结束代表是一个新的订阅周期开始那就把时间调到现在变成 现在+订阅时间
gfreezy
72 天前
@aababc 不记得细节了,只参与了设计,没写具体的代码。
但是 expire date 和扣费肯定是一致的,扣费成功 expire date 延长,扣费失败,expire date 不变。

是否可以使用 expires_date - purchase_date

这个应该是不行的。purchase date 不是开始时间。自动续费的时候一般会在周期结束前几天扣款。

我记得我们好像是固定死 31 天,这样实现比较简单(相当于没有 31 天的月份多送用户几天)
encro
72 天前
@gfreezy

微信读书也就这样,我订阅没关,赠送 vip 已经超过过半年了。没用。。。
aababc
72 天前
@gfreezy 感谢,我再梳理一下看看,感觉还是有点糊涂,头大!
aababc
72 天前
@GXD #20 感谢,我看看大家的这几种方案,那个比较合适
diagnostics
72 天前
获取赠送时长的时候增加一个 expired_date_ms = 订阅的 expires_date_ms + 赠送时间 ms

没有订阅的时候就是 expired_date_ms = now + 赠送时间 ms

判断过期的时候,遍历现有的所有 expired_date_ms 取最大值

多个赠送的时候,遍历现有的所有 expired_date_ms 取最大值 + 赠送时间的 ms

中途取消订阅的时候,比较复杂,那就直接取消订阅一起把赠送的取消(产品设计上辅助开发)不就行了吗?不行的话,那就是取出最大赠送时间的 expired_date_ms - 减去当前时间,得到剩余赠送。或者另一个设计就是吧每个赠送时间单独成一个策略主体,这个时候可能需要单独计算每个策略的赠送时间。


-------------------------

或者重构设计,过期时间是计数的设计,每到 XX 时候,调度把时间减去 YY 时间。有订阅优先扣订阅,无订阅扣最近的赠送时间。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1055568

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX