序言
我的目的是为多个项目创建可重用的代码(并在github上发布)以管理订阅。我了解条带化和定期计费提供商,但这不是该模块的目标。它应该只是用于计算帐户余额,轻松通知续订订阅以及处理价格计算的包装程序/帮助程序。
在某些国家/地区,您可能无法使用重复计费,因为提供商或付款方式对此支持不佳或没有支持,或者价格太高(小额付款)。而且有些人不想使用循环计费,而是手动支付账单/在年末开具发票。因此,请不要建议贝宝定期计费,递归或类似服务。
情况
假设您有一个可以订阅订阅计划的模型(例如User
)。该模型具有一个字段,该字段存储当前正在订阅的订阅计划的标识符。因此,在每次计划更改时,都会记录更改。
有一个模型(例如SubscriptionPlanChanges
),其中的以下字段记录了提到的更改:
subscriber
与订阅模型有关(User
在这种情况下)from_plan
定义更改之前模型具有的计划标识符to_plan
定义模型现在选择的计划标识符created_at
是存储更改的日期时间字段valid_until
存储日期,直到实际订阅有效paid_at
也是一个日期时间字段,用于定义是否(以及何时)订阅已支付
当然,这种布局是可以讨论的。
帐户余额问题
当用户更改其订阅计划时,我需要比较计划字段,获取价格,并根据当前计划valid_until
及其价格计算新计划的扣除额。说:您订购了计划A的一年,但是在6个月后,您升级到计划B,因此您可以从计划A的6个月中扣除一半的已付价格。
我想知道的是:如果某个用户(例如)切换到免费计划,那么他有一个积分,如果该用户想要再次切换,则可以扣除该积分。您会在另一个字段中缓存该值,还是每次都计算与该用户相关的所有记录?您会添加/更改有关表格布局的内容吗?
易于理解的问题
当订阅期结束时,用户会收到通知,并有可能通过再次付费来续订其订阅。最简单的方法是只更新paid_at
和valid_until
新的订阅选项。但是,我不确定您是否存储了某人可能需要的所有数据,例如付款/订阅历史记录。
另一个选择是为此创建一个附加记录,其中from_plan
和to_plan
具有相同的标识符(因此表示“无变化”)。但是这不会以某种方式干扰帐户余额的计算吗?
如果有人能为我指出有关处理此类订阅的逻辑的正确方向,我将非常感激。
更新
感谢您的帮助。我认为我的问题太模糊了,因此我将尝试通过使用较少的抽象来使其更加精确。不幸的是,我还不能解决我的问题。
案例A
User
可以选择Subscription Plan A
。当前,此文件存储了一个SubscriptionPlanChange
以进行跟踪。例如5个月后,User
将其订阅升级为Subscription Plan B
。因此,他为新订阅支付价格,减去未使用的7个月的方案a的价格。
案例B
3个月后,User
回滚到他的Subscription Plan A
。他不必付款,但会收到一笔余额,因此,在订阅结束时,他将从新订阅中扣除该余额。
案例C
User
可以为具有独立订阅计划的子服务选择订阅计划。相同Case A
,Case B
可以申请该子服务订阅。
_Case D_
用户取消其订阅之一。这导致他的余额增加了。
我的问题(目前至少是)主要取决于如何正确存储数据,以便我可以重现订阅的历史以进行业务分析和计算余额,并根据订阅获得未付款项等。
我也不确定是否应将余额存储在例如用户模型本身中,或者是否未存储但可以根据存储的数据/历史记录随时进行计算。
需要注意一些事项,尽管我认为它们不应该引入问题:
- 它不一定是a
User
,也可以是任何东西,这就是为什么aSubscriber
是多态的 Plans
不一定必须是计划,而可以例如Magazines
是提到的。这就是我在案例C和案例D中描述的内容。