How to Integrate Stripe Payment Gateway in Laravel 12 | asadmukhtar.info
Step-by-Step Guide to Setting Up Authentication in Laravel 12 with Breeze   |   Manual Authentication in Laravel 12: Step-by-Step Guide   |   How to Build a REST API in Laravel 12 with Sanctum   |   Laravel 12 CRUD Application with Image Upload   |   Laravel 12 Multi-Auth System: Admin & User Login   |   How to Integrate Stripe Payment Gateway in Laravel 12   |   Building a Role-Based Access Control (RBAC) in Laravel 12   |   How to Use Laravel 12 Queues and Jobs for Background Tasks   |   Laravel 12 Livewire CRUD Example with Validation   |   Email Verification and Password Reset in Laravel 12   |   How to Use Laravel 12 API with Vue.js 3   |   Laravel 12 AJAX CRUD with jQuery and Bootstrap   |   Laravel 12 Multi-Language Website Setup   |   React Best Practices for 2025: Performance, SEO, and Scalability   |   How to Build a Full-Stack MERN App: A Step-by-Step Guide   |   React State Management: Redux vs. Context API vs. Recoil   |   Server-Side Rendering (SSR) in React with Next.js for SEO   |   How to Optimize React Apps for Faster Load Times   |   Building a REST API with Node.js and Express for a React App   |   Integrating JWT Authentication in React and Node.js (MERN Stack)   |   Real-time Chat App with React, Node.js, and Socket.io   |   How to Deploy a MERN Stack Application on AWS or Vercel   |   Connecting React Frontend to a Node.js Backend with Axios   |   Laravel Implement Flash Messages Example   |   How to integrate Angular 19 with Node.js and Express for full-stack development   |   Best practices for connecting Angular 19 frontend with Laravel API   |   Step-by-step guide to upgrading an existing project to Angular 19   |   How to implement authentication in Angular 19 using JWT and Firebase   |   Optimizing server-side rendering in Angular 19 with route-level render modes   |   Using Angular 19 signals for state management in large applications   |   How to create standalone components in Angular 19 for modular architecture   |   Building a CRUD application in Angular 19 with MongoDB and Express   |   Implementing lazy loading in Angular 19 to improve performance   |   How to integrate Angular 19 with GraphQL for efficient data fetching   |   Vue 3 Composition API vs Options API: A Comprehensive Comparison   |   Fetching and Displaying Data from APIs in Vue.js with Axios   |   Building a Todo App in Vue.js with Local Storage Integration   |   Handling Forms and Validation in Vue.js Using VeeValidate   |   State Management in Vue.js Applications Using Vuex   |   10 Most Important Tasks Every MERN Stack Developer Should Master   |   How to Build a Full-Stack CRUD App with MERN Stack   |   Best Practices for Authentication & Authorization in MERN Stack   |   1. MEAN Stack vs. MERN Stack: Which One Should You Choose in 2025   |   Top 10 Node.js Best Practices for Scalable and Secure Applications   |   How to Build a REST API with Laravel and Node.js (Step-by-Step Guide)   |   Mastering Angular and Express.js for Full-Stack Web Development   |   Top 10 Daily Tasks Every Frontend Developer Should Practice   |   Essential Backend Development Tasks to Boost Your Coding Skills   |   Real-World Mini Projects for Practicing React.js Daily   |   Laravel Developer Task List: Beginner to Advanced Challenges   |   How to Assign Effective Tasks to Your Intern Developers   |   10 Must-Try Tasks to Master JavaScript Fundamentals   |   Practical CSS Challenges That Improve Your UI Design Skills   |   Top Tasks to Learn API Integration in React and Angular   |   Best Task Ideas for a 30-Day Web Development Challenge   |   Top Git and GitHub Tasks Every Developer Should Know   |   30-Day Task Plan for Web Development Interns   |   Weekly Task Schedule for Junior Developers in a Startup   |   How to Track Progress with Development Tasks for Interns   |   What Tasks Should You Give to Interns in a MERN Stack Project   |   Build These 5 Projects to Master React Routing   |   Task-Based Learning: Become a Full-Stack Developer in 90 Days   |   Daily Coding Tasks That Will Sharpen Your Logical Thinking   |   Top 7 Backend Task Ideas to Practice With Node.js and MongoDB   |  

How to Integrate Stripe Payment Gateway in Laravel 12

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.

What You’ll Learn

✅ Install and configure Stripe in Laravel 12
✅ Create a Stripe API Key
✅ Build a payment form
✅ Process payments and handle responses

Step 1: Install Laravel 12

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

Step 2: Setup Database

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

Step 3: Install Stripe Package

Now, install the official Stripe package via Composer:

composer require stripe/stripe-php

Step 4: Get Stripe API Keys

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

Step 5: Create a Stripe Controller

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()]);
        }
    }
}

Step 6: Define Routes

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');

Step 7: Create Payment Form

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>

Step 8: Test Stripe Payment

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)  

Conclusion

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. 🚀


Related Tutorials

How to Integrate Stripe Payment Gateway in Laravel 12