Laravel收银员`$ user-> subscribed()`在没有订阅的情况下返回true

时间:2019-01-28 21:15:13

标签: laravel laravel-cashier

我的代码很简单:

if($user->subscribed('main')){
    $user->subscription('main')->cancel();
}

我收到以下答复:

Stripe \ Error \ InvalidRequest
No such subscription: sub_EQTvxKjit2Ak6i

实际上该订阅先前已被取消,因此它不应给出true响应。

我尝试返回$user->subscribed('main'),结果返回为true

此用户有其他订阅,但“ main”未激活。

我想念什么吗?

2 个答案:

答案 0 :(得分:1)

$user->subscribed()仅检查数据库的订阅状态-根本不查询Stripe API。但是,当您尝试取消该订阅时,它将查询API。

因此,如果您的数据库与Stripe中的数据不同步,则可能会产生这样的错误。也许您的数据库已从Stripe测试模式进行订阅,但是您正在查询Stripe生产API?反之亦然?

答案 1 :(得分:0)

如果您阅读了 Billable 特征,那么您将在其中找到此功能

public function subscribed($subscription = 'default', $plan = null)
{
    $subscription = $this->subscription($subscription);

    if (is_null($subscription)) {
        return false;
    }

    if (is_null($plan)) {
        return $subscription->valid();
    }

    return $subscription->valid() &&
           $subscription->stripe_plan === $plan;
}

此功能仅检查 subscriptions 表中的订阅记录是否存在。 根据上述功能,如果不存在订阅,则它将返回false。

确保您没有做任何错误。