dgvai/laravel-sslcommerz

SSLCommerz 的 Laravel 扩展包

1.0.4 2022-03-01 04:42 UTC

This package is auto-updated.

Last update: 2024-08-29 05:43:15 UTC


README

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

本扩展包是为 SSLCommerz 在线支付网关而构建的,适用于 Laravel 5.5+、6.x 和 7.x。 (未测试低于 5.5 的版本)

内容

安装

您可以通过 composer 安装此扩展包

    composer require dgvai/laravel-sslcommerz

发布配置

发布配置文件

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

设置和配置

更新您的应用环境 (.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]

注意 SSLC_ROUTE_* 变量是路由名(),不是 URL()

为 SSLCommerz 创建四个 POST 路由

    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');

注意 这些命名路由在 .env 文件中使用

app\Http\Middleware\VerifyCsrfToken.php 中添加异常

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

注意 这将是四个路由的初始组

配置完成后

    php artisan config:cache

使用

发起支付

现在您可以在控制器方法中调用支付

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

注意 这是执行支付的最小基本需求。

退款流程

您还可以调用退款请求并检查退款状态

    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;
        }
    }

交易查询

您还可以根据提供的交易 ID 查询您的交易。

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

可用方法

必需 amount($amount)

描述:设置支付金额

用法:$sslc->amount(50)

必需 trxid($trxid = null)

描述:设置交易 ID。如果传递 null,则 PHP 的 uniqid() 将用于生成 TrxID

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

必需 product($name [,$category])

描述:设置产品名称(必需)和类别(可选)

用法:$sslc->product($product->name, $product->category)

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

描述:设置客户名称和电子邮件(必需),电话、地址、城市、州、邮政编码、国家、传真代码(可选)

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

可选 setUrl($url_array[])

描述:手动设置成功、失败、取消和 IPN URL,而不使用 .env 中的 URL

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

可选 setCurrency($currency)

描述:手动设置货币,而不使用 .env 中的货币

用法:$sslc->setCurrency('USD')

可选 setBin($bin)

描述:您可以提供卡的 BIN 以允许必须通过此 BIN 完成交易。您可以通过逗号 ',' 分隔这些 BIN。例如:371598,371599,376947,376948,376949

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

可选 enableEMI($installment, $max_installment, bool $restrict_emi_only = false)

描述:此方法启用 EMI 支付。

installment = 客户从您的网站选择,因此网关页面不会显示任何分期选项

max_installment = 最大分期选项,在这里客户将在网关页面获得 3、6、9 期分期

restrict_emi_only = 值为 true/false,如果值为 true,则支付页面中仅可能进行 EMI 交易,不会显示移动银行和互联网银行渠道。

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

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

描述:此方法设置运输详情。通常不需要!

用法:$sslc->setShipping(5,'productname','24/7 北京街','达卡',1234)

可选 setAirlineTicketProfile($flight_type, $hours_till_departure, $pnr, $journey_from_to, $third_party_booking)

描述:此方法在product_profileairline-tickets时为必填项!通常不需要!请参阅官方文档本节。

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

可选 setTravelVerticalProfile($hotel_name, $length_of_stay, $check_in_time, $hotel_city)

描述:此方法在product_profiletravel-vertical时为必填项!通常不需要!请参阅官方文档本节。

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

可选 setTelecomVerticleProfile($product_type, $topup_number, $country_topup)

描述:此方法在product_profiletelecom-vertical时为必填项!通常不需要!请参阅官方文档本节。

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

可选 setCarts($cart, $product_amount, $vat, $discount_amount, $convenience_fee)

描述:此方法通常不使用!请参阅官方文档本节。

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

可选 setExtras($extra1, $extra2, $extra3, $extra4)

描述:此方法用于将额外参数传递给成功/失败响应,如果需要的话。非必填项!请参阅官方文档本节。

用法:$sslc->setExtras($my_token)

必填 make_payment($checkout = false)

描述:进行支付。1. 对于托管模式(默认),不传递任何内容/false。2. 对于结账模式,传递第一个参数true,它将返回JSON

用法:$sslc->make_payment()

变更日志

请参阅变更日志获取最近更改的更多信息。

许可证

MIT许可(MIT)。请参阅许可文件获取更多信息。