Instamojo Payment Gateway Integration in Laravel

Throughout Laravel 9 instamojo payment gateway integration example tutorial we are going to share how to integrate the instamojo payment gateway in the php laravel 9 application via the instamojo PHP package.

Here in this article you will learn step by step guide on how to integrate Instamojo payment in laravel app. You can use this example in your laravel 5, laravel 6, laravel 7, laravel 8 or laravel 9 apps.

Laravel 9 Instamojo Payment Gateway Integration Example

  • Step 1: Download Laravel App
  • Step 2: Connect App to Database
  • Step 3: Install Instamojo package
  • Step 4: Configure Instamojo Package
  • Step 5: Create Model and Migration
  • Step 6: Create Controller
  • Step 7: Make Routes
  • Step 8: Create Blade View file
  • Step 9: Start Development Server

Step 1: Install Laravel App

First we need to install fresh Laravel application by executing the following command on the terminal:

composer create-project --prefer-dist laravel/laravel instamojo-payment-gateway

Go inside the app:

cd instamojo-payment-gateway

Step 2: Connect App To Database

Now go to you app root directory and open the .env file. Then add the database details:

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=here your database name here
DB_USERNAME=here database username here
DB_PASSWORD=here database password here

Step 3: Install Instamojo Package

In this step, execute the following command on terminal to install instamojo package:

composer require instamojo/instamojo-php

Step 4: Configure Package

First of all, visit the instamojo.com and create an account on it. Then you will get the client id and secret id from Instamojo.

After that, open the .env file And set the API keyauth-token and URL in the .env file like the following:

IM_API_KEY=api_key
IM_AUTH_TOKEN=auth_token
IM_URL=https://test.instamojo.com/api/1.1/

Next, Open the services.php file and add the following code into it, which is inside the app/config directory. few step in Instamojo payment gateway integration in PHP.

'instamojo' => [
    'api_key'       => env('IM_API_KEY'),
    'auth_token'    => env('IM_AUTH_TOKEN'),
    'url'           => env('IM_URL'),
],

Step 5: Create Model & Migration

Generate the payments table and its model using the following command:

php artisan make:model Payment -m

After successfully run the command go to database/migrations/create_payments_table.php file and replace the function, below here:

public function up()
{
   Schema::create('payments', function (Blueprint $table) {
       $table->increments('id');
       $table->string('i_payment_id');
       $table->string('user_id');
       $table->string('amount');
       $table->timestamps();
   });
}

Next, migrate the table using the below command. It will create two new tables in the database.

php artisan migrate

Step 6: Create Controller

In this step, Create the controller name PaymentController using the below command.

php artisan make:controller PaymentController

Then open PaymentController.php and add the following code into it, which is placed on app/Http/Controller/ directory:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
class PaymentController extends Controller
{
   
   public function index()
   {
        return view('payments');
   }
   public function pay(Request $request){
 
     $api = new \Instamojo\Instamojo(
            config('services.instamojo.api_key'),
            config('services.instamojo.auth_token'),
            config('services.instamojo.url')
        );
 
    try {
        $response = $api->paymentRequestCreate(array(
            "purpose" => "For text Php Coding Stuff",
            "amount" => $request->amount,
            "buyer_name" => "$request->name",
            "send_email" => true,
            "email" => "$request->email",
            "phone" => "$request->mobile_number",
            "redirect_url" => "http://127.0.0.1:8000/pay-success"
            ));
             
            header('Location: ' . $response['longurl']);
            exit();
    }catch (Exception $e) {
        print('Error: ' . $e->getMessage());
    }
 }
 
 public function success(Request $request){
     try {
 
        $api = new \Instamojo\Instamojo(
            config('services.instamojo.api_key'),
            config('services.instamojo.auth_token'),
            config('services.instamojo.url')
        );
 
        $response = $api->paymentRequestStatus(request('payment_request_id'));
 
        if( !isset($response['payments'][0]['status']) ) {
           dd('payment failed');
        } else if($response['payments'][0]['status'] != 'Credit') {
             dd('payment failed');
        } 
      }catch (\Exception $e) {
         dd('payment failed');
     }
    dd($response);
  }
}

Step 7: Add Routes

In this step, open the web.php file and add the following routes into it, which is placed inside the routes directory:

use App\Http\Controllers\PaymentController;
 
Route::get('payment', [PaymentController::class, 'index']);
Route::post('pay', [PaymentController::class, 'pay']);
Route::get('pay-success', [PaymentController::class, 'success']);

Step 8: Create Blade View File

In this step, Visit the resources/views directory and create blade view file name payments.blade.php. Then add the following code into payments.blade.php. We learn How to integrate Instamojo payment gateway in laravel.

<!DOCTYPE html>
<html>
   <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <meta name="csrf-token" content="{{ csrf_token() }}">
      <title>Instamojo Payment Gateway </title>
      <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.css" rel="stylesheet">
      <style>
         .mt40{
         margin-top: 40px;
         }
      </style>
   </head>
   <body>
      <div class="container">
         <div class="row">
            <div class="col-lg-12 mt40">
               <div class="card-header" style="background: #0275D8;">
                  <h2>Register for Event</h2>
               </div>
            </div>
         </div>
         @if ($errors->any())
         <div class="alert alert-danger">
            <strong>Opps!</strong> Something went wrong<br>
            <ul>
               @foreach ($errors->all() as $error)
               <li>{{ $error }}</li>
               @endforeach
            </ul>
         </div>
         @endif
         <form action="{{ url('pay') }}" method="POST" name="laravel_instamojo">
            {{ csrf_field() }}
            <div class="row">
               <div class="col-md-12">
                  <div class="form-group">
                     <strong>Name</strong>
                     <input type="text" name="name" class="form-control" placeholder="Enter Name" required>
                  </div>
               </div>
               <div class="col-md-12">
                  <div class="form-group">
                     <strong>Mobile Number</strong>
                     <input type="text" name="mobile_number" class="form-control" placeholder="Enter Mobile Number" required>
                  </div>
               </div>
               <div class="col-md-12">
                  <div class="form-group">
                     <strong>Email Id</strong>
                     <input type="text" name="email" class="form-control" placeholder="Enter Email id" required>
                  </div>
               </div>
               <div class="col-md-12">
                  <div class="form-group">
                     <strong>Event Fees</strong>
                     <input type="text" name="amount" class="form-control" placeholder="" value="100" readonly="">
                  </div>
               </div>
               <div class="col-md-12">
                  <button type="submit" class="btn btn-primary">Submit</button>
               </div>
            </div>
         </form>
      </div>
   </body>
</html>

Step 9: Start you Application

In this step, execute the php artisan serve command on the terminal to start the development server:

php artisan serve

Testing Card Credential

Card No : 4242424242424242
 Month : any future month
 Year : any future Year
 CVV : 111
 Password : 1221

So Instamojo payment gateway integration in laravel 9 completed. i hope you like this article.

Leave a Comment