The integration of the Razorpay payment gateway with Laravel 9 will be demonstrated in this post. We will assist you by providing an example of a laravel 9 razorpay pay payment. Let's talk about the integration of Razorpay with Laravel 9. Let's talk about Laravel 9's integration of Razorpay. Follow the instructions below for the Laravel 9 integration of the Razorpay api.

They offer many alternatives, including the ability to pay with a credit card, debit card, UPI, phone pay, google pay, and Paytm. So, if you want to integrate Razorpay with your Laravel app, just follow the instructions listed below. You may also see the preview below:

Step 1: Create the application

In order to create Laravel 9 projects, we must run a command.

composer create-project --prefer-dist laravel/laravel l9Razorpay

Step 2: Create Razorpay Account

Register an account at

after successfully registering. Go to the link below to acquire your ID and secret, as shown in the screen photo below:

Visit this page:

Step 3: Add key Id and Key Secret id inside of .env file


Step 4: Install razorpay/razorpay Package

To use the razorpay api, install the razorpay/razorpay composer package. check the command below.

composer require razorpay/razorpay

Step 5: Create Controller

I'm going to make a RazorpayPaymentController right now.


namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Razorpay\Api\Api;
use Session;
use Exception;
class RazorpayPaymentController extends Controller
     * Write code on Method
     * @return response()
    public function index()
        return view('payment');
     * Write code on Method
     * @return response()
    public function store(Request $request)
        $input = $request->all();
        $api = new Api(env('RAZORPAY_KEY'), env('RAZORPAY_SECRET'));
        $payment = $api->payment->fetch($input['razorpay_payment_id']);
        if(count($input)  && !empty($input['razorpay_payment_id'])) {
            try {
                $response = $api->payment->fetch($input['razorpay_payment_id'])->capture(array('amount'=>$payment['amount'])); 
            } catch (Exception $e) {
                return  $e->getMessage();
                return redirect()->back();
        Session::put('success', 'Payment successful');
        return redirect()->back();

Step 6: Create Route

I will now design a route to call the controller and the function.


use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RazorpayPaymentController;
| Web Routes
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
Route::get('payment', [RazorpayPaymentController::class, 'index']);
Route::post('payment', [RazorpayPaymentController::class, 'store'])->name('');

Step 6: Create views file


<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title>Laravel 9 - Razorpay Payment Gateway Integration</title>
    <script src="" crossorigin="anonymous"></script>
    <link rel="stylesheet" href=""
        integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

    <div id="app">
        <main class="py-4">
            <div class="container">
                <div class="row">
                    <div class="col-md-6 offset-3 col-md-offset-6">
                        @if($message = Session::get('error'))
                        <div class="alert alert-danger alert-dismissible fade in" role="alert">
                            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                <span aria-hidden="true">?</span>
                            <strong>Error!</strong> {{ $message }}
                        @if($message = Session::get('success'))
                        <div class="alert alert-success alert-dismissible fade {{ Session::has('success') ? 'show' : 'in' }}"
                            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                <span aria-hidden="true">?</span>
                            <strong>Success!</strong> {{ $message }}
                        <div class="card card-default">
                            <div class="card-header">
                                Laravel 9- Razorpay Payment Gateway Integration
                            <div class="card-body text-center">
                                <form action="{{ route('') }}" method="POST">
                                    <script src=""
                                        data-key="{{ env('RAZORPAY_KEY') }}" data-amount="10001" data-currency="INR"
                                        data-buttontext="Pay 100 INR" data-name=""


Migrate project

php artisan migrate

Open URL:

You can test using both the test and live versions.

Recommended Posts

View All

Helper Function Example in Laravel 8

helper function example in laravel 8, laravel 8 global helper function, how to use global helper function in laravel 8, add helper function in laravel

Laravel 9 Stripe Payment Gateway Integration Example

Stripe payment gateway for Laravel 9; I'll demonstrate how to include Stripe payment gateway into Laravel 9 apps in this tutorial.

How to Implement Gravatar Image using thomaswelton/laravel-gravatar in Laravel 9

Learn how to easily implement Gravatar image using thomaswelton/laravel-gravatar in Laravel 9. Enhance user profiles with personalized images.

Generate Laravel PDF with Image Example

In this post, I will demonstrate how to create a Laravel PDF with an image. We occasionally need to generate a PDF with an image for reporting purpose...

Crop Image Before Upload Using Croppie.js in Laravel 9

Using Laravel 9, crop an image before uploading it using Croppie.js. Before uploading an image, Laravel uses Ajax to crop it with croppie. Cropping an...