Stripe is one of the most widely used payment gateways for processing online transactions. It provides secure, fast, and developer-friendly payment solutions.
In this tutorial, we will learn how to integrate Stripe Payment Gateway in Laravel 12 with a complete checkout page and payment processing.
✅ Install and configure Stripe in Laravel 12
✅ Create a Stripe API Key
✅ Build a payment form
✅ Process payments and handle responses
If you don’t have Laravel installed, create a new Laravel 12 project:
composer create-project laravel/laravel stripe-integration
cd stripe-integration
Run the Laravel development server:
php artisan serve
Update your .env
file with your database details:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=stripe_db
DB_USERNAME=root
DB_PASSWORD=
Run migrations:
php artisan migrate
Now, install the official Stripe package via Composer:
composer require stripe/stripe-php
Go to Stripe Dashboard and sign in. Then, get your Publishable Key and Secret Key from the Developers > API Keys section.
Now, add them to your .env
file:
STRIPE_KEY=your_publishable_key
STRIPE_SECRET=your_secret_key
Run the command to create a new controller:
php artisan make:controller StripePaymentController
Modify app/Http/Controllers/StripePaymentController.php
:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Charge;
use Session;
class StripePaymentController extends Controller
{
public function index()
{
return view('stripe.index');
}
public function processPayment(Request $request)
{
Stripe::setApiKey(env('STRIPE_SECRET'));
try {
$charge = Charge::create([
'amount' => $request->amount * 100, // Convert to cents
'currency' => 'usd',
'source' => $request->stripeToken,
'description' => 'Payment from Laravel Stripe Integration',
]);
Session::flash('success', 'Payment successful!');
return back();
} catch (\Exception $e) {
return back()->withErrors(['error' => $e->getMessage()]);
}
}
}
Modify routes/web.php
:
use App\Http\Controllers\StripePaymentController;
use Illuminate\Support\Facades\Route;
Route::get('/stripe', [StripePaymentController::class, 'index'])->name('stripe.index');
Route::post('/stripe/payment', [StripePaymentController::class, 'processPayment'])->name('stripe.payment');
Now, create the payment form view in resources/views/stripe/index.blade.php
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Stripe Payment</title>
<script src="https://js.stripe.com/v3/"></script>
</head>
<body>
<h2>Laravel 12 Stripe Payment Gateway</h2>
@if (session('success'))
<p style="color: green;">{{ session('success') }}</p>
@endif
@if ($errors->any())
@foreach ($errors->all() as $error)
<p style="color: red;">{{ $error }}</p>
@endforeach
@endif
<form action="{{ route('stripe.payment') }}" method="POST">
@csrf
<input type="number" name="amount" placeholder="Enter Amount" required>
<script
src="https://checkout.stripe.com/checkout.js"
class="stripe-button"
data-key="{{ env('STRIPE_KEY') }}"
data-amount="1000"
data-name="Laravel Stripe Payment"
data-description="Secure Payment"
data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
data-locale="auto"
data-currency="usd">
</script>
</form>
</body>
</html>
Now, open your browser and visit:
http://127.0.0.1:8000/stripe
To test the payment, use Stripe’s test card details:
Card Number: 4242 4242 4242 4242
Expiration: Any future date (e.g., 12/25)
CVV: Any 3 digits (e.g., 123)
In this tutorial, we successfully integrated Stripe Payment Gateway into Laravel 12. We covered:
✅ Installing and setting up Stripe in Laravel
✅ Creating a payment form with Stripe Checkout
✅ Processing payments and handling errors
Now, you can extend this by implementing subscriptions, refunds, or webhook notifications for real-time payment tracking. 🚀