连续订阅设计(apple/google)

公司的业务调整需要接入 apple/google 的连续订阅,看了一下 apple 的产品配置和我们实际的情况,需要支持如下几种配置

  1. 月付,首期优惠(第一个月的费用低一些)
  2. 年付,赠送体验时长(有几天的试用时间,到期之后再扣费)
    看了一下 apple 的回包数据
    {
     "quantity": "1",
     "product_id": "xxxx",
     "transaction_id": "xxxx",
     "original_transaction_id": "xxdef",
     "purchase_date": "2024-07-04 07:49:55 Etc\/GMT",
     "purchase_date_ms": "1720079395000",
     "purchase_date_pst": "2024-07-04 00:49:55 America\/Los_Angeles",
     "original_purchase_date": "2024-07-02 07:00:03 Etc\/GMT",
     "original_purchase_date_ms": "1719903603000",
     "original_purchase_date_pst": "2024-07-02 00:00:03 America\/Los_Angeles",
     "expires_date": "2024-07-04 07:54:55 Etc\/GMT",
     "expires_date_ms": "1720079695000",
     "expires_date_pst": "2024-07-04 00:54:55 America\/Los_Angeles",
     "web_order_line_item_id": "2342342134235234",
     "is_trial_period": "false",
     "is_in_intro_offer_period": "false",
     "in_app_ownership_type": "PURCHASED",
     "subscription_group_identifier": "sfewfe",
     "app_account_token": ""
    }
    通过这个数据我们可以拿到
    expires_date_ms 订阅的到期时间
    purchase_date_ms 订阅支付时间
    is_trial_perios 是否是体验周期,如果是体验周期 expires_date_ms 就是免费时长的到期时间,比如 3 天免费
    is_in_intro_offer_period 是否是优惠购买
    如果只有订阅的场景,那么我们就可以直接使用 expires_date_ms 作为用户的到期时间即可,随着 apple/google 的回调来调整用户的到期时间。
    但是产品的业务需求需要在这个基础上做出一些特例,需有支持赠送时长,大概的场景如下:
  • 用户有订阅的情况下,用户的到期时间在订阅时长后追加赠送时长,用户一直订阅就用不了赠送时长
  • 用户订阅过期的情况下,用户的到期时间就是赠送时间(可以理解从生效时间开始累计),这里有个情况就是假设用户过期很久了突然获得了几天的用户时长,就需要从获取的那一刻开始计算

可能出现但是不需要考虑的问题

  • 用户在 apple/google 同时订阅
  • 用户在订阅中再次订阅(apple应该是不支持的,具体的还没有测试)

现在有个问题
expires_date_mspurchase_date_ms 的差值能否代表用户的订阅时长
如何更方便的存储用户的到期时间,能既满足订阅的动态增长,也满足赠送时长的业务切实现的业务不那么复杂
我自己有一个设计思路但是不够完备和完善,所有就想看看大家有没有更好的方案
感谢大家!

aab
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

苹果可以再次订阅的时候可以修改本次订阅的到期时间的把,这样就没有用不了赠送时长的问题了。我没对接过不清楚。

7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!