Laravel Razorpay Payment Gateway Example

In this tutorial i explain razorpay payment gateway integration in laravel. it is simple example of Laravel Razorpay Payment Gateway Example. Here you will learn laravel razorpay integration. I am going to show you about razorpay integration in laravel. you will do the following things for razorpay api integration in laravel.

As you all know if you are developing e-commerce website then you must need payment system for buy and sell your product in your website and at that time we require any type of payment integration require in website. Razorpay payment gateway integration is very easy to use like other payment gateway. you can easily integrate razorpay payment gateway in laravel 6, laravel 7 and laravel 8 app.

Razorpay payment gateway is for india. they provide lot’s of option like credit card, debit card, UPI, phone pay, google pay, paytm payment option to do payment of user. so if you want to implement razorpay integration in your laravel app then you can do it by following bellow few steps. you can see bellow preview too:

Read Also :  Laravel 8 Create Factory Tinker Example

Laravel Razorpay Payment Gateway Example

Step 1 : Create Account in Razorpay

Step 2 : Install Razorpay Package

Step 3 : Add Key and Secret Key

Step 4 : Create Route

Step 5 : Create Controller

Step 6 : Create View

Step 1 : Create Account in Razorpay

First of all we need to create Razorpay account for integrate razorpay in laravel using below link and create test account for testing purpose. Razor Pay Login

Step 2 : Install Razorpay Package

Now, we need to install razorpay/razorpay package in laravel for razorpay integration in laravel. So, copy below command and run in your terminal.

composer require razorpay/razorpay
Step 3 : Add Key And Secret Key

Now, we need to add key and secret key in .env file for razorpay api integration, you can find these key from setting menu of razor pay dashboard.

RAZOR_KEY=xxxxx
RAZOR_SECRET=xxxxx
Step 4 : Create Route

Now, we are creating two route for payment and action add below code in web.php

Route::get('razorpay', [RazorpayController::class, 'razorpay'])->name('razorpay');
Route::post('razorpaypayment', [RazorpayController::class, 'payment'])->name('payment');
Step 5 : Create Controller

In this step we are creating RazorpayController in this location app/Http/Controllers.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Razorpay\Api\Api;
use Session;
use Redirect;

class RazorpayController extends Controller
{
    public function razorpay()
    {        
        return view('index');
    }

    public function payment(Request $request)
    {        
        $input = $request->all();        
        $api = new Api(env('RAZOR_KEY'), env('RAZOR_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();
                \Session::put('error',$e->getMessage());
                return redirect()->back();
            }            
        }
        
        \Session::put('success', 'Payment successful, your order will be despatched in the next 48 hours.');
        return redirect()->back();
    }
}
Step 6 : Create View

Create view file for form and output , we have save as index.blade.php file

<!DOCTYPE html>
<html>
<head>
    <title>Laravel Razorpay Payment Gateway Example - web-tuts.com</title>
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>    
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-12">
            @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>
                    </button>
                    <strong>Error!</strong> {{ $message }}
                </div>
            @endif
            {!! Session::forget('error') !!}
            @if($message = Session::get('success'))
                <div class="alert alert-info alert-dismissible fade in" role="alert">
                    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        <span aria-hidden="true">×</span>
                    </button>
                    <strong>Success!</strong> {{ $message }}
                </div>
            @endif
            {!! Session::forget('success') !!}
            <div class="panel panel-default" style="margin-top: 30px;">
                <h3>Laravel Razorpay Payment Gateway Example - web-tuts.com </h3><br>
                <div class="panel-heading">
                    <h2>Pay With Razorpay</h2>

                <!-- <div class="panel-body text-center"> -->
                    <form action="{!!route('payment')!!}" method="POST" >                        
                        <script src="https://checkout.razorpay.com/v1/checkout.js"
                                data-key="{{ env('RAZOR_KEY') }}"
                                data-amount="1000"
                                data-buttontext="Pay 10 INR"
                                data-name="web-tuts"
                                data-description="Payment"
                                data-image="https://web-tuts.com/abc_content/uploads/2021/01/web-tuts.png"
                                data-prefill.name="name"
                                data-prefill.email="email"
                                data-theme.color="#ff7529">
                        </script>
                        <input type="hidden" name="_token" value="{!!csrf_token()!!}">
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>