取消取消 Stripe 订阅

Un-canceling a Stripe subscription

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

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!

有什么更好的办法吗?

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

在PHP你会做:

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

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

来自仪表板。转到您的订阅详细信息,然后单击 Edit Details 右上角。一个无标题的模式 "Reactivate subscription" 应该弹出

This subscription is set to cancel at the end of the period. You can reactivate the subscription and it'll continue as usual.

点击Reactivate

编辑

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

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

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

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

根据 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 设置为之前的任何值。如果您不使用多个计划订阅,则不确定这些是否有必要。