user(); if ($planner->subscribed()) { return redirect()->route('dashboard'); } $plan = $request->input('plan', 'monthly'); $priceId = $plan === 'yearly' ? env('STRIPE_PRICE_YEARLY') : env('STRIPE_PRICE_MONTHLY'); return $planner->newSubscription('default', $priceId) ->checkout([ 'success_url' => route('subscription.success') . '?session_id={CHECKOUT_SESSION_ID}', 'cancel_url' => route('subscription.index'), ]); } public function success(Request $request): RedirectResponse { $sessionId = $request->query('session_id'); if ($sessionId) { $planner = $request->user(); $session = Cashier::stripe()->checkout->sessions->retrieve($sessionId, [ 'expand' => ['subscription'], ]); if ($session->subscription && ! $planner->subscribed()) { $subscription = $session->subscription; $planner->subscriptions()->create([ 'type' => 'default', 'stripe_id' => $subscription->id, 'stripe_status' => $subscription->status, 'stripe_price' => $subscription->items->data[0]->price->id ?? null, 'quantity' => $subscription->items->data[0]->quantity ?? 1, 'trial_ends_at' => $subscription->trial_end ? now()->setTimestamp($subscription->trial_end) : null, 'ends_at' => null, ]); } } return redirect()->route('dashboard')->with('success', 'Subscription activated!'); } public function cancel(Request $request): RedirectResponse { $planner = $request->user(); if (! $planner->subscribed()) { return back()->with('error', 'No active subscription found.'); } $planner->subscription()->cancel(); return back()->with('success', 'Subscription canceled. Access will continue until the end of your billing period.'); } }