定制 dgvai/laravel-sslcommerz 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

dgvai/laravel-sslcommerz

Composer 安装命令:

composer require dgvai/laravel-sslcommerz

包简介

Laravel package of SSLCommerz

README 文档

README

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_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.

dgvai/laravel-sslcommerz 适用场景与选型建议

dgvai/laravel-sslcommerz 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 43.07k 次下载、GitHub Stars 达 24, 最近一次更新时间为 2020 年 04 月 14 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 dgvai/laravel-sslcommerz 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 dgvai/laravel-sslcommerz 我们能提供哪些服务?
定制开发 / 二次开发

基于 dgvai/laravel-sslcommerz 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 43.07k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 25
  • 点击次数: 9
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 24
  • Watchers: 3
  • Forks: 12
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-04-14