فایل تنظیمات پکیج

از نسخه 2 به بعد فایلی به عنوان تنظیمات پکیج IPay وجود دارد. وجود این فایل باعث بهبود بسیار خوبی در استفاده راحتتر از پکیج شده است.

در این فایل شما میتوانید تمام اطلاعات و تنظیمات مورد نیاز برای پکیج را وارد کنید. مسیر پیشفرض فایل در کنار پوشه vendor و با نام ipay.php است، اما شما میتوانید این فایل را در هر مسیری که میخواهید قرار بدهید و آدرس را در هنگام ساخت شی از کلاس به IPay بدهید.

این فایل در نسخه 2 دارای تنظیمات زیر است. شما باید فایل ipay.php را همراه با محتویات زیر در کنار پوشه vendor (یا هر مسیری که میخواهید)ایجاد کنید.

<?php

return array(
	'database' => array(
		'host'     => '127.0.0.1',
		'dbname'   => 'database_name',
		'username' => 'root',
		'password' => 'xxxxxx',
		'create' => true
	),

	'debug' => array(
		'status' => true,
		'lang'   => 'fa'
	),

	'zarinpal' => array(
		'merchant-id'  => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
		'callback-url' => 'url',
		'server'       => 'germany',
		'email'        => 'email@gmail.com',
		'mobile'       => '09xxxxxxxxx',
		'description'  => 'description',
	),

	'mellat' => array(
		'username'     => 'username',
		'password'     => 00000000,
		'terminalId'   => 0000000,
		'callback-url' => 'url'
	)
);

تنظیمات database برای اتصال به پایگاه داده است. در صورتی که قسمت create فعال (true) باشد، در هر بار استفاده از IPay، پکیج چک میکند که آیا جداول پکیج ایجاد شده است یا خیر، در صورتی که موجود نبودند، خود پکیج به صورت خودکار آنها را نصب میکند. پس توجه داشته باشید که در اولین استفاده از پکیج این گزینه را true کنید.

تنظیمات debug برای فعال سازی محیط تست پکیج است.

تنظیمات zarinpal و mellat برای درگاه های بانک ملت و سایت زرین پال است. توجه داشته باشید که در صورت استفاده از هر کدام از درگاه ها ابتدا تنظیمات آن را به درستی پر کرده باشید.

مستندات مخصوص درگاه بانک ملت

متدهای زیر به صورت قدم به قدم برای اتصال به بانک و تایید پرداخت کاربر توضیح داده میشود.

قدم اول: منتقل کردن کاربر به درگاه

  1. ساختن شیء از کلاس
use IPay\Mellat\IPayMellat;
.
.
.
$mellatPay = new IPayMellat();

در صورتی که فایل تنظمیات پکیج را در مسیر پیشفرض (کنار پوشه vendor با نام ipay.php) قرار نداده اید و در مسیری دیگر وجود دارد، مسیر آن را به عنوان پارامتر اول به کلاس IPayMellat بدهید.

  1. ارسال درخواست اتصال به درگاه بانک ملت

با استفاده از متد sendPayRequest میتوانید درخواست اتصال به سرور بانک را بدهید. این متد دارای سه پارامتر است که تنها پارامتر اول اجباری است.

پارامتر اول: مبلغی است که میخواهید کاربر واریز کند.

پارامتر دوم (اختیاری): اطلاعات اضافی. این اطلاعات اضافی به سرور بانک فرستاده میشود و بدون هیچ تغییر بازگشت داده میشود.

پارامتر سوم (اختیاری): آدرس بازگشتی. در صورتی که این پارامتر داده نشود، آدرس را از فایل تنظیمات میخواند.

$mellatPay->sendPayRequest($amount, $additionalData, $callBackUrl);
  1. ریدایرکت کاربر به درگاه

برای ریدایرکت کاربر به درگاه، ابتدا توسط متد passPayRequest چک میکنیم که آیا بانک آماده برای منتقل کردن کاربر است و هیچ مشکلی پیش نیامده است که در این صورت کاربر را به درگاه منتقل میکنیم. اگر هم خطایی پیش آمد با استفاده از متد getPayRequestResCode میتوانیم شماره خطا را دریافت کنیم. همچنین توسط متد getRefId میتوانیم شماره refId را ذخیره کنیم تا پس از بازگشت کاربر به سایت بتوانیم مشخص کنیم که کدام کاربر و برای کدام محصول پرداخت را انجام داده است.

if ($mellatPay->passPayRequest())
{
  $productRefId = $mellatPay->getRefId();
    .
    .
    .
  $mellatPay->redirectToBank();
}
else
{
  //Error
  $errorNumber = $mellatPay->getPayRequestResCode();
}

قدم دوم: گرفتن جواب از درگاه بانک ملت

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

  1. ساخت شیء
use IPay\Mellat\IPayMellat;
.
.
.
$mellatPay = new IPayMellat();
  1. چک کردن اینکه کاربر آیا پرداخت را انجام داده است یا خیر؟

در کد زیر توسط سه متد userPayment, verifyPayment و settleRequest چک میکنیم که آیا کاربر پرداخت را انجام داده است یا خیر؟ متد userPayment توسط داده های بازگشتی از بانک چک میکند که آیا پرداخت انجام شده است یا خیر؟ متد verifyPayment توسط بانک چک میکند که آیا کاربر پرداخت را انجام داده است یا خیر؟ و متد settleRequest درخواست واریز وجه به حساب از بانک را میکند. اگر هر سه این متدها جواب true برگردانند، به این معنی است که کاربر پرداخت را انجام داده است. در غیر این صورت خطای مناسب را به کاربر نمایش میدهیم.

if ($mellatPay->userPayment() && $mellatPay->verifyPayment())
{
    if ($mellatPay->settleRequest())
    {
      $productRefId = $mellatPay->getRefId()
        .
        .
        .
    }
    else
    {
      return 'error';
    }
}
else
{
    return 'error';
}

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

مستندات مخصوص درگاه زرین پال

قدم اول: منتقل کردن کاربر به درگاه

  1. ساختن شیء از کلاس
use IPay\Zarinpal\IPayZarinpal;
.
.
.
$zarinPay = new IPayZarinpal($merchentId);

در صورتی که فایل تنظمیات پکیج را در مسیر پیشفرض (کنار پوشه vendor با نام ipay.php) قرار نداده اید و در مسیری دیگر وجود دارد، مسیر آن را به عنوان پارامتر اول به کلاس IPayZarinpal بدهید.

  1. ارسال درخواست اتصال به درگاه زرین پال

با استفاده از متد sendPayRequest میتوانید درخواست اتصال به زرین پال را بدهید. این متد دارای دو پارامتر است که تنها پارامتر اول اجباری است.

پارامتر اول: مبلغی است که میخواهید کاربر واریز کند (به تومان).

پارامتر دوم (اختیاری): آدرس بازگشتی. در صورتی که این پارامتر داده نشود، آدرس را از فایل تنظیمات میخواند.

$zarinPay->sendPayRequest(4000, $callbackUrl);
  1. ریدایرکت کاربر به درگاه

برای ریدایرکت کاربر به درگاه، ابتدا توسط متد passPayRequest چک میکنیم که آیا زرین پال آماده برای منتقل کردن کاربر است و هیچ مشکلی پیش نیامده است که در این صورت کاربر را به درگاه منتقل میکنیم. اگر هم خطایی پیش آمد با استفاده از متد getStatusCode میتوانیم شماره خطا را دریافت کنیم. همچنین توسط متد getAuthority میتوانیم شماره authority را ذخیره کنیم تا پس از بازگشت کاربر به سایت بتوانیم مشخص کنیم که کدام کاربر و برای کدام محصول پرداخت را انجام داده است.

authority کدی یکتا است که زرین پال برای هر درخواست به درگاه، اختصاص میدهد.

if ($zarinPay->passPayRequest())
{
    $productAuthority = $zarinPay->getAuthority();
      .
      .
      .
    return $zarinPay->redirectToBank();
}
else
{
    //Error
    $errorNumber = $zarinPay->getStatusCode();
}

در صورتی که میخواهید به زرین گیت ریدایرکت کنید پارامتر اول متد redirectToBank را true قرار دهید.

قدم دوم: گرفتن جواب از درگاه زرین پال

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

  1. ساخت شیء از کلاس
use IPay\Zarinpal\IPayZarinpal;
.
.
.
$zarinPay = new IPayZarinpal($merchentId);
  1. چک کردن اینکه کاربر آیا پرداخت را انجام داده است یا خیر؟

در کد زیر توسط دو متد userPayment, verifyPayment چک میکنیم که آیا کاربر پرداخت را انجام داده است یا خیر؟ متد userPayment توسط داده های بازگشتی از بانک چک میکند که آیا پرداخت انجام شده است یا خیر؟ متد verifyPayment توسط سرور زرین پال چک میکند که آیا کاربر پرداخت را انجام داده است یا خیر؟ اگر هر دو این متدها جواب true برگردانند، به این معنی است که کاربر پرداخت را انجام داده است. در غیر این صورت خطای مناسب را به کاربر نمایش میدهیم.

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

if ($zarinPay->userPayment() && $zarinPay->verifyPayment())
{
    $productAuthority = $zarinPay->getAuthority();
    $refId = $zarinPay->getRefId();
      .
      .
      .
}
else
{
    //Error
    $errorNumber = $zarinPay->getStatusCode();
}

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