取消Stripe订阅

时间:2015-02-14 04:12:19

标签: stripe-payments

假设用户想取消订阅,我发出如下命令:

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!

我能做些什么更好的事情吗?

4 个答案:

答案 0 :(得分:11)

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

在PHP中你会这样做:

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

Stripe的支持文章之一here详细介绍了这一点。

答案 1 :(得分:2)

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

  

此订阅设置为在​​期末结束时取消。您可以   重新启动订阅,它会像往常一样继续。

点击Reactivate

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

根据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和计划ID设置为以前的位置的地方。如果您不使用多个计划订阅,则不确定是否有必要。