dgvai / laravel-sslcommerz
Laravel package of SSLCommerz
Installs: 20 681
Dependents: 0
Suggesters: 0
Security: 0
Stars: 24
Watchers: 4
Forks: 11
Open Issues: 3
Requires
- guzzlehttp/guzzle: ~7.0
README
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_CANCE = [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','custemail@email.com'); 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.