\Stripe\Checkout\Session::create([ 'mode' => 'subscription', 'line_items' => [[ 'price' => $price->id, 'quantity' => 1 ]], 'customer_email' => $donor['email'] ?? null, 'metadata' => [ 'first_name' => $donor['firstName'] ?? '', 'last_name' => $donor['lastName'] ?? '', 'employer' => ($donor['employer'] ?? ''), 'occupation' => ($donor['occupation'] ?? ''), 'retired' => (isset($donor['retired']) && $donor['retired']) ? 'true' : 'false', 'purpose' => 'campaign_donation_monthly' ], 'success_url' => $successUrl, 'cancel_url' => $cancelUrl, // Payment method collection inside Checkout (Google Pay & cards supported) 'payment_method_collection' => 'always', 'subscription_data' => [ 'metadata' => [ 'purpose' => 'campaign_donation_monthly' ] ], ]); echo json_encode(['url' => $session->url]); } catch (\Throwable $e) { http_response_code(400); echo json_encode(['error' => $e->getMessage()]); }