Laravel Cashier-使用条纹ID取消订阅

时间:2019-09-10 12:10:20

标签: laravel stripe-payments laravel-cashier

我正在使用Laravel Cashier进行条纹付款。一个用户可以有多个订阅。用户应该能够取消特定的订阅。反正可以通过条带ID或计划ID取消订阅吗?

5 个答案:

答案 0 :(得分:2)

您可以使用PHP Stripe库执行此操作。

要立即取消

$sub = Stripe\Subscription::retrieve($subscription_id);
$sub->cancel();

要在当前期间结束后取消

$sub = Stripe\Subscription::update($subscription_id, [
   'cancel_at_period_end' => true
]);

答案 1 :(得分:1)

我确定这是在某处记录的,但是对我而言,我找不到它,但是,如果您将Stripe订阅ID作为第二个参数传递,则可以取消Laravel方式的任何订阅...

$user->subscription('default', 'price_abcdefghi12345')->cancel();

答案 2 :(得分:0)

您可以使用带有订阅ID的Laravel Cashier来使用它。

在Laravel中 您可以在数据库的订阅表中找到订阅ID。(列名称为 stripe_id

 $subscription = \Stripe\Subscription::retrieve($subscription_id);

如果您输入正确的订阅ID,您将获得订阅详细信息

要取消订阅

 $sub->cancel();

更新您的 subscriptions 表以获取特定的订阅ID(列名再次为 stripe_id )。在我的

 \Stripe\Subscription::where('stripe_id', $sub->id)
        ->update([
            'trial_ends_at' => Carbon::now()->toDateTimeString(),
         ]);

答案 3 :(得分:0)

您可以直接在订阅中调用 cancel() 方法:

$subscription->cancel();

正如您在此处 (Github Reference) 看到的,从您的 User 模型调用的方法 $this->subscription 仅获取按名称过滤的 Subscription 实例:

/**
 * Get a subscription instance by name.
 *
 * @param  string  $name
 * @return \Laravel\Cashier\Subscription|null
 */
public function subscription($name = 'default')
{
    return $this->subscriptions->where('name', $name)->first();
}

而且,如您所见 (Github Reference),订阅模型有自己的取消方法:

/**
 * Cancel the subscription at the end of the billing period.
 *
 * @return $this
 */
public function cancel()
{
    // ...
}

因此,您始终可以直接在 Subscription 实例上调用它。

答案 4 :(得分:0)

您无需拥有 id 即可取消。

你可以直接打电话

$subscription->cancel();

它会起作用。如果您有多个要同时取消的订阅。你可以这样做。让我们找到所有活动订阅。您可以找到所有范围 here

$subscriptions = $user->subscriptions()->active()->get(); // getting all the active subscriptions 

$subscriptions->map(function($subscription) {
    $subscription->cancel(); // cancelling each of the active subscription
});