افزونه پرداخت لاراول

افزونه پرداخت لاراول

کلاس SoapClient یکی از مهم ترین کتابخانه های داخلی php می باشد که برای اتصال به وب سرویس های استاندارد Soap (از جمله درگاه های پرداخت بانکی ، پنل های پیامک و ...) استفاده می شود.

در اینجا سعی کرده ایم مراحل طراحی تا ساخت درگاه پرداخت در لاراول را به راحت ترین شکل ممکن ارائه کنیم.

عضویت در سایت سیزپی

ابتدا به سایت سیزپی بروید و یک حساب در آن ایجاد کنید. سپس از طریق منوی درگاه پرداخت نسبت به ایجاد یک درگاه پرداخت برای سایت خود اقدام کنید. در این حالت شما آدرس وب سایت خود را می دهید و پس از تایید توسط تیم سیزپی، درگاه پرداخت برای سایت شما فعال می شود. پس از فعال شدن این درگاه 4 فیلد مرچنت (پذیرنده) ، ترمینال ، نام کاربری (Key) ، رمز عبور (IV) در اختیارتان قرار می گیرد که برای احراز هویت در اتصال به وب سرویس درگاه پرداخت سیزپی استفاده می شوند.

 

ساخت درگاه پرداخت در لاراول

ابتدا با دستور زیر لاراول را نصب می کنیم.

 

composer create-project --prefer-dist laravel/laravel SamplePayment

 

راه اندازی View صفحه پرداخت

حال به مسیر resources -> views بروید و یک ویو با نام shop.blade.php ایجاد کنید و کدهای زیر را در آن قرار دهید

<form method="post" action="{{url('shop')}}">

    {{csrf_field()}}

    <input type="text" name="price">

    <button type="submit">تکمیل خرید</button>

</form>

در کد بالا یک Text Box به همراه یک دکمه قرار دادیم. در Text Box قیمتی که می خواهیم از کاربر دریافت کنیم را وارد کرده و با زدن دکمه خرید کاربر به درگاه متصل شده و می تواند پرداخت را انجام دهد.

 

توجه: این فرم در واقع یک فرم بسیار ساده برای یادگیری مفاهیم پرداخت در لاراول می باشد. شما می توانید آن را توسعه داده و به فروشگاه خود متصل کنید.

مسیردهی (Routing) درگاه پرداخت در لاراول

حال فایل web.php را باز کرده و کدهای زیر را در آن قرار دهید:

Route::get('buy',function(){

    return view('shop');

});

 

Route::post('verify','siteController@verify_order');

Route::post('shop','siteController@add_order');

مسیرهای تعریف شده ما به شرح زیر است:

 

  • مسیر buy
    اگر کاربر به مسیر www.yoursite.com/buy رفت، فرم پرداخت برای آن ظاهر شود.

 

  • مسیر verify_order
    برای زمانی مورد استفاده قرار می گیرد که کاربر پرداخت را انجام داده و سپس به سایت باز می گردد.

 

  • مسیر shop
    این مسیر اطلاعات اعم از قیمت نهایی قابل پرداخت، ایمیل و شماره تماس کاربر را دریافت کرده و به سایت سیزپی می فرستد.

 

توضیحات مسیر order و shop در ادامه آمده است.

 

ایجاد کنترلر برای درگاه پرداخت در لاراول

سپس دستور زیر را برای ایجاد یک کنترلر وارد کنید.

 

php artisan make:controller siteController

حال یک پوشه با نام lib در فولدر app ایجاد کنید و داخل پوشه lib یک فایل با نام sizpay.php بوجود بیاورید و کدهای زیر را در آن قرار دهید.

<?php

namespace App\lib;

use DB;

class sizpay

{

    public $merchant;

    public $terminal;

    public $username;

    public $password;

    public function __construct()

    {

        $this->merchant = "500118980400014;

        $this->terminal = "18000143";

        $this->username = "GhAyNNpHClj27uDE5YUwRCmvRXV8oP4HYxSXwI2vC/Y=";

        $this->password = "TgkrvSIeL40R62H02ch3pw==";

    }

    public function pay($Amount,$OrderId = '')

    {

        $client = new \SoapClient('https://rt.sizpay.ir/KimiaIPGRouteService.asmx?WSDL');

        $result = $client->GetToken2($parameters = array(

                'MerchantID'  => $this->merchant,

                'TerminalID'  => $this->terminal,

                'UserName'    => $this->username,

                'Password'    => $this->password,

                'Amount'      => $Amount,

                'OrderID'     => time(),

                'ReturnURL'   => url('/verify),

                'InvoiceNo'   => time(),

                'DocDate'     => '',

                'ExtraInf'    => $OrderId,

                'AppExtraInf' => '',

                'SignData'    => ''

            ))->GetToken2Result;

        $result = json_decode($result);

        if (isset($result->ResCod) && in_array($result->ResCod, array('0', '00')))

        {

            return $result->Token;

        }

        else

        {

            return false;

        }

    }

}

این کلاس توسط سیزپی برای اتصال سایت ها به درگاه بانکی، ارائه شده است.

نکته : اطلاعات 4 فیلد مرچنت ، ترمینال ، نام کاربری و رمز عبور را از پنل پذیرندگان سیزپی دریافت و در این فایل جایگزین کنید.

 

فیلد های OrderID و InvoiceNo و به بعد را میتوانید مطابق دلخواه تغییر دهید

فیلد ReturnURL همان آدرسی است که کاربر پس از انجام پرداخت به آن هدایت می شود

 

حال کنترلر siteController.php را باز کرده و کدهای زیر را در آن قرار دهید.

//siteController.php

 

    public function add_order(Request $request)

    {

        $order = new sizpay();

        $token = $order->pay($request->price, uniqid());

        if ($token)

        {

        $html = '<p style="color:#ff0000; font:18px Tahoma; direction:rtl;">در حال اتصال به درگاه بانکی. لطفا صبر کنید ...</p>

            <form name="frmPay" method="post" action="https://rt.sizpay.ir/Route/Payment">

            <input type="hidden" name="MerchantID" value="'.$order->merchant.'" />

            <input type="hidden" name="TerminalID" value="'.$order->terminal.'" />

            <input type="hidden" name="Username"   value="'.$order->username.'" />

            <input type="hidden" name="Password"   value="'.$order->password.'" />

            <input type="hidden" name="Token"      value="'.$token.'" />

            <input type="hidden" name="SignData"   value="" />

            <noscript><center><input type="submit" value="پرداخت" /></center></noscript>

            </form><script>document.frmPay.submit();</script>';

        }

        else

        {

            $html = 'خطا در اتصال به وبسرویس سیزپی';

        }

        echo $html;

        exit;

    }

در واقع در این متد تعریف کرده ایم که وقتی کاربر روی گزینه ثبت سفارش کلیک کرد یک شی جدید از کلاس sizpay ایجاد کرده و سپس مقدار token را با ارائه اطلاعات (قیمت، شماره سفارش) به وب سرویس سیزپی بدست بیاوریم.

تست کردن درگاه پرداخت در لاراول

بنابراین برای ارسال اطلاعات، مقدار توکن را به آدرس وب سرویس سیزپی ریدایرکت می کنیم. برای تست کردن این متد لطفا مراحل زیر را طی کنید:

 

مرورگر را باز کرده و به آدرس localhost:8000/buy بروید.

 

بعد از باز شدن صفحه، یک مقدار به عنوان قیمت در Text Box وارد کنید و دکمه خرید را بزنید.

 

بعد از زدن دکمه به سایت سیزپی منتقل می شوید و می توانید پرداخت را انجام دهید.

 

اما کار ما در اینجا تمام نمی شود. بعد از این که کاربر پرداخت را انجام داد، به سایت ما منتقل می شود. حال ما باید چک کنیم که آیا پرداخت کاربر موفقیت آمیز بوده یا نه. همچنین اطلاعات خرید را هم دریافت کنیم.

 

برای اینکار یک متد به نام Order در کنترلر siteController.php تعریف کرده و صحت پرداخت کاربر را در آن بررسی می کنیم.

//siteController.php

 

    public function verify_order(Request $request)

    {

        $order = new sizpay();

        if (isset($request->post('ResCod')) && in_array($request->post('ResCod'), array('0', '00')))

        {

            $client = new \SoapClient('https://rt.sizpay.ir/KimiaIPGRouteService.asmx?WSDL');

            $result = $client->Confirm2($parameters = array(

                    'MerchantID'  => $order->merchant,

                    'TerminalID'  => $order->terminal,

                    'UserName'    => $order->username,

                    'Password'    => $order->password,

                    'Token'       => $request->post('Token'),

                    'SignData'    => ''

                ))->Confirm2Result;

            $result = json_decode($result);

            if (isset($result->ResCod) && in_array($result->ResCod, array('0', '00')))

            {

                    return 'پرداخت با موفقیت انجام شد.';

            }

            else

            {

                    return 'خطا در انجام عملیات';

            }

        }

        else

        {

                return 'پرداخت توسط کاربر لغو شد';

        }

    }

نتیجه گیری

پس از پرداخت، وب سایت سیزپی یک پاسخ را در قالب POST برای ما ارسال می کند. در این حالت باید request را مورد بررسی قرار دهیم. داخل request اطلاعات تراکنش انجام شده قرار دارد

 

ResCod: بیانگر وضعیت تراکنش می باشد

Token: توکن پرداخت که برای استعلام وضعیت پرداخت بکار میرود

در نظر داشته باشید که این اطلاعات با متد POST به سایت لاراولی ما ارسال می شود. بنابراین مسیری که به نام verify_order تعریف کرده ایم از این متد پیروی می کند.

 

حال اگر مقدار ResCode برابر 0 یا 00 بود بدین منظور است که عملیات موفقیت آمیز بوده و شما می توانید دستورهای مورد نیاز خودتان را اعم از ارسال فایل به کاربر یا ثبت سفارش و … انجام دهید. در غیر اینصورت پرداخت نا موفق می باشد.

 

برای دریافت اطلاعات سایر اعدادی که وضعیتهای متفاوتی را به ما گزارش می دهند، لطفا به سایت سیزپی رفته و مستندات آن را مطالعه کنید.


دیدگاه

درباره ما

سیزپی، زیر مجموعه هلدینگ دانش بنیان پیشگامان می باشد، که در حال دریافت مجوز از بانک مرکزی به عنوان پرداختیار به ارائه خدمات پرداخت اینترنتی مشغول می باشد. سیزپی با داشتن تیمی متشکل از متخصصین فناوری اطلاعات، امنیت و پرداخت الکترونیک به عنوان یک پیشرو در حوزه فناوریهای نوین مالی، در تلاش است تا خدمات پرداخت را به صورتی ساده، مقرون به صرفه، ایمن و قابل اعتماد به میلیون ها نفر در سراسر کشور ارائه دهد. ازمهمترین فعالیت های سیزپی در قالب پرداخت‌یار تسهیل فرآیند دریافت درگاه پرداخت، ارائه خدمات نوین مالی در حوزه فین تک به کسب و کارها مانند لینک پرداخت، کیف پول و درگاه پرداخت سازمانی، فاکتور الکترونیک، کارتخوان مجازی و ... می باشد.