【问题标题】:Un-canceling a Stripe subscription取消取消 Stripe 订阅
【发布时间】:2015-02-14 04:12:19
【问题描述】:

假设用户想取消他们的订阅,所以我发出这样的命令:

stripe_subscription.delete(at_period_end: true)

但后来——在期限结束之前——用户改变了主意。我可以拨打电话以撤消预定的取消吗?

如果没有,最好的实现方式是什么?我最好的猜测是这样的:

new_subscription = stripe_customer.subscriptions.create(plan: stripe_subscription.plan.id, trial_end: stripe_subscription.current_period_end)
stripe_subscription.delete()   # if permitted
self.stripe_subscription = new_subscription
save!

有什么更好的办法吗?

【问题讨论】:

    标签: stripe-payments


    【解决方案1】:

    如果订阅仍然有效,您只需 update 当前订阅并再次传递计划 ID 即可恢复订阅。

    在 PHP 中你会这样做:

    $customer = Stripe_Customer::retrieve("cus_XXX");
    $subscription = $customer->subscriptions->retrieve("sub_YYY");
    $subscription->plan = "myPlanId";
    $subscription->save();
    

    这在 Stripe 的一篇支持文章中有更详细的介绍here

    【讨论】:

    • 链接的支持文章指出,这也可以通过 Stripe Dashboard 完成,以防它是一次性的,不值得通过 API 实现。
    • 更新了 Stripe 关于重新激活已取消订阅的小节的固定链接:stripe.com/docs/subscriptions/…
    • 看来(基于我的测试和文档)如果订阅已到达取消日期的末尾(意味着它要么立即取消,要么取消日期已过),那么您 不能重新激活它,你必须创建一个全新的。
    • 那个链接很有帮助。谢谢。对于它的价值,如果你想这样做,你可能不想在 Stripe 订阅上运行 delete 方法来取消它,而是对 Stripe 订阅进行更新并将 cancel_at_period_end 参数设置为true.
    【解决方案2】:

    不确定接受的答案是否是旧答案,但对于最新版本的 Stripe,您必须这样做(在 PHP 中):

    $sub->cancel_at_period_end = false;
    return $sub->save();
    

    【讨论】:

    • 在我看来,这表明订阅将被立即取消,而不是在订阅期结束时。这是准确的吗?您能否更具体地说明您所指的“最新版本”?
    • 在我的测试中,我发现订阅一直有效,直到达到续订日期。发生这种情况时,API 会检查这个名为“cancel_at_period_end”的标志是设置为 true 还是 false。如果为真,它不会更新并取消它。 OTOH 如果设置为 false 则更新。所以 IMO 这只是一个标志,由 API 决定是取消还是续订,它只在实际续订时影响。
    • 我不应该怀疑你,我将单独添加的 C# 解决方案也是如此,但你会得到我的投票!
    • 确实如此。 C# 也是一样的 (stripe.com/docs/billing/subscriptions/canceling-pausing)。 subscriptionService.Update(subscriptionId: ss.Id, new SubscriptionUpdateOptions { CancelAtPeriodEnd = false, } );
    【解决方案3】:

    从仪表板。转到您的订阅详细信息,然后单击右上角的Edit Details。一个模态的无标题“重新激活订阅”应该弹出说

    此订阅设置为在​​订阅期结束时取消。你可以 重新激活订阅,它会照常继续。

    点击Reactivate

    编辑

    在取消前的剩余天数上,这些操作现在似乎出现在鼠标上:

    请注意,如果订阅已取消,则不会显示。

    【讨论】:

    • 似乎找不到这个。屏幕截图会有所帮助。
    • 这似乎并不存在
    • 我添加了截图。请注意,如果订阅已取消,则不会显示。
    【解决方案4】:

    根据 Supersan 的上述回答,此解决方案也适用于使用最新 Stripe.net 库 21.4.1 的 C#

     var items = new [] { new SubscriptionItemUpdateOption() { Id = i.Id, PlanId = i.Plan.Id } }.ToList();
     var updateOptions = new SubscriptionUpdateOptions { Items = updatedItems, CancelAtPeriodEnd = false };
     await subscriptionService.UpdateAsync(externalSubscriptionId, updateOptions);
    

    我刚刚将 Id 和 Plan Id 设置为之前的值。如果您不使用多个计划订阅,则不确定这些是否有必要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 2018-09-01
      • 2021-10-24
      • 2015-01-12
      • 2021-04-09
      • 1970-01-01
      • 2020-10-05
      相关资源
      最近更新 更多