Stripe在特定日期取消订阅

问题描述 投票:2回答:2

我在PHP中使用StripeAPI,我不知道如何在特定日期停止客户订阅。

我知道有一个立即取消订阅的选项:

$subscription = \Stripe\Subscription::retrieve('sub_49ty4767H20z6a');
$subscription->cancel();

或者,对于在当前结算周期结束时(客户已支付的持续时间)取消订阅,请执行以下操作:

$subscription->cancel(['at_period_end' => true]);

使用此选项,将安排取消。

但是如何在特定日期取消订阅?在我的系统中,用户可以要求取消,但他必须等待特定日期(至少保留X个月作为订阅者)

你知道我怎么做的吗?谢谢!

stripe-payments
2个回答
1
投票

Stripe刚刚将它添加到他们的API中,我碰巧偶然发现了它。他们有一个名为“cancel_at”的字段,可以设置为将来的日期。它们没有在文档中列出此属性,因为它是如此新颖。您可以在此处查看响应对象中的值:

https://stripe.com/docs/api/subscriptions/create?lang=php

我已经使用.NET对此进行了测试,并且可以确认它将订阅设置为以您提供的值到期。


1
投票

没错。好问题。这是一个检查/执行示例:

$today = time();
$customer = \Stripe\Customer::retrieve('Their Customer ID');
$signUpDate = $customer->subscriptions->data[0]->created;

// This will define the date where you wish to cancel them on.
// The example here is 30 days from which they initially subscribed.
$cancelOnDate = strtotime('+30 day', $signUpDate);

// If today is passed or equal to the date you defined above, cancel them.
if ($today >= $cancelOnDate) {
    $subscription = \Stripe\Subscription::retrieve('sub_49ty4767H20z6a');
    $subscription->cancel();
}

这是一个在订阅时设置取消的示例:

$today = time();

// Cancel them 30 days from today
$cancelAt = strtotime('+30 day', $today);

$subscription = \Stripe\Subscription::create(array(
    "customer" => 'Their Customer ID',
    "plan" => 'xxxxxxxxx',
    "cancel_at" => $cancelAt
));
© www.soinside.com 2019 - 2024. All rights reserved.