我正在使用Laravel Cashier进行条纹付款。一个用户可以有多个订阅。用户应该能够取消特定的订阅。反正可以通过条带ID或计划ID取消订阅吗?
答案 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
});