问题描述
最近,我们在开发Shopify应用时,遇到了一个非常恼人的问题。我们希望允许商家降级他们当前的订阅计划,但是要求降级要在下一个计费周期才生效,当前的计划应该保持不变直到下一个计费周期。
我们发现了Shopify的 APPLY_ON_NEXT_BILLING_CYCLE
替换行为,本以为这就是我们想要的功能。但是,在测试时,我们发现当前的订阅立即被取消,降级后的订阅直接变成了 ACTIVE
状态,而这个行为应该是在下一个计费周期才触发的。
Shopify,你在逗我吗?
这特么是什么鬼设计?文档里写得清清楚楚,降级的订阅应该在下一个计费周期才生效,但实际上却是立即生效。这不是坑人吗?
更可笑的是,测试订阅和正式订阅的行为还不一致,test:true
只会发生订阅的直接替换,旧订阅被直接取消,新订阅立即生效,订阅周期立即调整为新订阅,不会出现文档中的各种行为。这不是在逼我们用正式订阅来测试吗?那测试订阅还有个毛用?
订阅和计费周期分不清?
Shopify似乎把订阅和计费周期的概念混淆了。对他们来说,只要有新的计费周期,旧的订阅就可以立即取消,新的订阅就可以立即生效。但对我们开发者来说,我们需要知道哪些订阅是活跃的,哪些是延期的。
现在Shopify的做法,让我们根本无法区分一个订阅是否应该保持活跃状态。他们只关心到什么时间节点需要向用户收多少钱。
我们app降级的例子,这个例子在standard下会触发延期:
1 | STANDARD |
用户先购买了Pro的年付套餐,下一个bill时间是2025-03-08,然后他降级到了Basic的月付,猜猜shopify会返回什么?
它会返回active的套餐是Basic,下一个bill时间是2025-03-08!!!!!
而我们期望的是他返回active的套餐是Pro年付,到2025-03-08之后再变成Basic月付.
shopify只关心了他要在2025年3月8日收取用户Basic的套餐, 但是他完全忽略了当前active的应该是Pro套餐.
总结
Shopify的这个订阅替换功能,简直就是一个大坑。
我真的是忍无可忍,只能在这里吐槽一下。Shopify,你们好歹也是一个大公司,能不能把这些基础功能设计得更人性化一点?不要再坑开发者了好吗?
相比之下Stripe的设计就合理的多,它会保持套餐的有效,直到下一个周期才会改变套餐.
参考链接:
https://shopify.dev/docs/api/admin-graphql/2023-10/enums/AppSubscriptionReplacementBehavior