Giter Club home page Giter Club logo

laravel-sslcommerz's Introduction

SSLCommerz Payment Gateway Package for Laravel

Latest Stable Version Total Downloads Latest Unstable Version License Monthly Downloads Daily Downloads composer.lock

This package is built for SSLCommerz online payment gateway in Bangladesh for Laravel 5.5+, 6.x and 7.x. (not tested for lower versions (< 5.5))

Contents

Installation

You can install the package via composer:

composer require dgvai/laravel-sslcommerz

Publish Configuration

Publish configuration file

php artisan vendor:publish --tag=sslc-config

Setup and configure

Update your app environment (.env)

    SSLC_STORE_ID           =   [YOUR SSLCOMMERZ STORE_ID]
    SSLC_STORE_PASSWORD     =   [YOUR SSLCOMMERZ STORE_ID]
    SSLC_STORE_CURRENCY     =   [STORE CURRENCY eg. BDT]
    SSLC_ROUTE_SUCCESS      =   [route name of success_url, eg: payment.success]
    SSLC_ROUTE_FAILURE      =   [eg: payment.failure]
    SSLC_ROUTE_CANCEL        =   [eg: payment.cancel]
    SSLC_ROUTE_IPN          =   [eg: payment.ipn]
    SSLC_ALLOW_LOCALHOST    =   [TRUE/FALSE]

NOTE SSLC_ROUTE_* variables are route name() not url()

Create four POST routes for SSLCommerz

    Route::post('sslcommerz/success','PaymentController@success')->name('payment.success');
    Route::post('sslcommerz/failure','PaymentController@failure')->name('failure');
    Route::post('sslcommerz/cancel','PaymentController@cancel')->name('cancel');
    Route::post('sslcommerz/ipn','PaymentController@ipn')->name('payment.ipn');

NOTE These named routes are being used in .env file

Add exception in app\Http\Middleware\VerifyCsrfToken.php

    protected $except = [
        'sslcommerz/*'
    ];

NOTE This will be the initial group of those four routes

After done configuraing

php artisan config:cache

Usage

Make Payment

Now you can call for payment in you controller method:

use DGvai\SSLCommerz\SSLCommerz;
use App\Http\Controllers\Controller;

class PaymentController extends Controller
{
    public function order()
    {
        ...
        //  DO YOU ORDER SAVING PROCESS TO DB OR ANYTHING
        ...

        $sslc = new SSLCommerz();
        $sslc->amount(20)
            ->trxid('DEMOTRX123')
            ->product('Demo Product Name')
            ->customer('Customer Name','[email protected]');
        return $sslc->make_payment();

        /**
         * 
         *  USE:  $sslc->make_payment(true) FOR CHECKOUT INTEGRATION
         * 
         * */
    }

    public function success(Request $request)
    {
        $validate = SSLCommerz::validate_payment($request);
        if($validate)
        {
            $bankID = $request->bank_tran_id;   //  KEEP THIS bank_tran_id FOR REFUNDING ISSUE
            ...
            //  Do the rest database saving works
            //  take a look at dd($request->all()) to see what you need
            ...
        }
    }

    public function failure(Request $request)
    {
        ...
        //  do the database works
        //  also same goes for cancel()
        //  for IPN() you can leave it untouched or can follow
        //  official documentation about IPN from SSLCommerz Panel
        ...
    }
}

NOTE This is the minimalist basic need to perform a payment.

Refund Process

Also you can call for Refund Request and check Refund State

    public function refund($bankID)
    {
        /** 
         * SSLCommerz::refund($bank_trans_id, $amount [,$reason])
         */

        $refund = SSLCommerz::refund($bankID,$refund_amount);

        if($refund->status)
        {
            /**
             * States:
             * success : Refund request is initiated successfully
             * failed : Refund request is failed to initiate
             * processing : The refund has been initiated already
            */

            $state  = $refund->refund_state;

            /**
             * RefID will be used for post-refund status checking
            */

            $refID  = $refund->ref_id;

            /**
             *  To get all the outputs
            */

            dd($refund->output);
        }
        else 
        {
            return $refund->message;
        }
    }

    public function check_refund_status($refID)
    {
        $refund = SSLCommerz::query_refund($refID);
	
        if($refund->status)
        {
            /**
             * States:
             * refunded : Refund request has been proceeded successfully
             * processing : Refund request is under processing
             * cancelled : Refund request has been proceeded successfully
            */

            $state  = $refund->refund_state;

            /**
             * RefID will be used for post-refund status checking
            */

            $refID  = $refund->ref_id;

            /**
             *  To get all the outputs
            */

            dd($refund->output);
        }
        else 
        {
            return $refund->message;
        }
    }

Transaction Query

Also you can query for your Transaction based on the Transaction ID you provided.

    public function get_transaction_status($trxID)
    {
        $query = SSLCommerz::query_transaction($trxID);
	
        if($query->status)
        {
            dd($query->output);
        }
        else 
        {
            $query->message;
        }
    }

Available Methods

required amount($amount)

Description: Set the amount of payment

Usage: $sslc->amount(50)

required trxid($trxid = null)

Description: Set the Transaction ID. If null passed, php uniqid() will be used to generate the TrxID

Usage: $sslc->trxid(mt_rand(10000000,999999999))

required product($name [,$category])

Description: Set the Product Name (required) and Category (optional)

Usage: $sslc->product($product->name, $product->category)

required customer($name, $email [,$phone, $address, $city, $state, $postal, $country, $fax])

Description: Set the Customer Name and Email (required), Phone,Address,City,State,Postal Code, Country, FAX Code (optional)

Usage: $sslc->customer($user->name, $user->email, $user->phone)

optional setUrl($url_array[])

Description: To Manually set the success,failure,cancel and ipn URL not using from .env one

Usage: $sslc->setUrl([route('custome.success'), route('custom.failure'), .. ])

optional setCurrency($currency)

Description: To Manually set the currency not using from .env one

Usage: $sslc->setCurrency('USD')

optional setBin($bin)

Description: You can provide the BIN of card to allow the transaction must be completed by this BIN. You can declare by coma ',' separate of these BIN. Example: 371598,371599,376947,376948,376949

Usage: $sslc->setBin('371598,371599,376947')

optional enableEMI($installment, $max_installment, bool $restrict_emi_only = false)

Description: This method enables EMI payment.

installment = Customer selects from your Site, So no instalment option will be displayed at gateway page

max_installment = Max instalment Option, Here customer will get 3,6, 9 instalment at gateway page

restrict_emi_only = Value is true/false, if value is true then only EMI transaction is possible, in payment page. No Mobile banking and internet banking channel will not display.

Usage: $sslc->enableEMI(5,12,false)

optional setShipping($product_number, $name, $address, $city [,$postal, $state, $country])

Description: This method sets shipping details. Not required usually!

Usage: $sslc->setShipping(5,'productname','24/7 Beijing Street','Dhaka',1234)

optional setAirlineTicketProfile($flight_type, $hours_till_departure, $pnr, $journey_from_to, $third_party_booking)

Description: This method is Mandatory, if product_profile is airline-tickets! Not usually required! See Official Documentation for this section.

Usage: $sslc->setAirlineTicketProfile('bus',3,1,'DHK-RAJ',null)

optional setTravelVerticalProfile($hotel_name, $length_of_stay, $check_in_time, $hotel_city)

Description: This method is Mandatory, if product_profile is travel-vertical! Not usually required! See Official Documentation for this section.

Usage: $sslc->setTravelVerticalProfile('Dalas',3,'12:00pm',Rajshahi)

optional setTelecomVerticleProfile($product_type, $topup_number, $country_topup)

Description: This method is Mandatory, if product_profile is telecom-vertical! Not usually required! See Official Documentation for this section.

Usage: $sslc->setTelecomVerticleProfile('Flexiload',0170000000,'BD')

optional setCarts($cart, $product_amount, $vat, $discount_amount, $convenience_fee)

Description: This method is not usually used! See Official Documentation for this section.

Usage: $sslc->setCarts($cart_json,5,'3%','20%','500')

optional setExtras($extra1, $extra2, $extra3, $extra4)

Description: This method is used to pass to the success/failure response as extra parameter, if it is needed. Not mandatory! See Official Documentation for this section.

Usage: $sslc->setExtras($my_token)

required make_payment($checkout = false)

Description: Make the payment. 1. For hosted mode (default), pass nothing/false. 2. For checkout mode, pass the first param true, and it will return JSON

Usage: $sslc->make_payment()

Changelog

Please see CHANGELOG for more information what has changed recently.

License

The MIT License (MIT). Please see License File for more information.

laravel-sslcommerz's People

Contributors

dgvai avatar robiussani152 avatar sharafat avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.