假设用户想取消订阅,我发出如下命令:
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!
我能做些什么更好的事情吗?
答案 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设置为以前的位置的地方。如果您不使用多个计划订阅,则不确定是否有必要。