Laravel 收银员 `$user->subscribed()` 在没有订阅存在时返回 true
Laravel cashier `$user->subscribed()` returning true when no subscription exists
我的代码很简单:
if($user->subscribed('main')){
$user->subscription('main')->cancel();
}
我收到这样的回复:
Stripe \ Error \ InvalidRequest
No such subscription: sub_EQTvxKjit2Ak6i
该订阅实际上之前已被取消,因此它不应该给出 true
响应。
我尝试返回 $user->subscribed('main')
,结果返回为 true
。
该用户还有其他订阅,但 'main' 未激活。
我错过了什么吗?
$user->subscribed()
只检查数据库的订阅状态——它根本不查询 Stripe API。但是当您尝试取消该订阅时,它会查询 API.
因此,如果您的数据库与 Stripe 中的数据不同步,可能会产生这样的错误。也许您的数据库已从 Stripe 测试模式订阅,但您正在查询 Stripe 生产 API?或者反之亦然?
如果您阅读 Billable trait,您会在那里找到此功能
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 table 中是否存在订阅记录。
根据上述功能,如果订阅不存在,那么它将 return false.
确保你没有做错任何事情。
更新收银台 v13.4
您可以先使用 Stripe 同步数据库条目:
optional($user->subscription('main'))->syncStripeStatus();
然后调用
if ($user->subscribed('main')) { ... }
我的代码很简单:
if($user->subscribed('main')){
$user->subscription('main')->cancel();
}
我收到这样的回复:
Stripe \ Error \ InvalidRequest
No such subscription: sub_EQTvxKjit2Ak6i
该订阅实际上之前已被取消,因此它不应该给出 true
响应。
我尝试返回 $user->subscribed('main')
,结果返回为 true
。
该用户还有其他订阅,但 'main' 未激活。
我错过了什么吗?
$user->subscribed()
只检查数据库的订阅状态——它根本不查询 Stripe API。但是当您尝试取消该订阅时,它会查询 API.
因此,如果您的数据库与 Stripe 中的数据不同步,可能会产生这样的错误。也许您的数据库已从 Stripe 测试模式订阅,但您正在查询 Stripe 生产 API?或者反之亦然?
如果您阅读 Billable trait,您会在那里找到此功能
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 table 中是否存在订阅记录。 根据上述功能,如果订阅不存在,那么它将 return false.
确保你没有做错任何事情。
更新收银台 v13.4
您可以先使用 Stripe 同步数据库条目:
optional($user->subscription('main'))->syncStripeStatus();
然后调用
if ($user->subscribed('main')) { ... }