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

این نسخه پکیج، از دیتابیس، برای ذخیره لاگ ها و مدیریت اتصال به بانک استفاده میکند. برای اینکار باید جدولی به نام mellat_orders_log بسازید که کد SQL آن در زیر آمده است.

CREATE TABLE IF NOT EXISTS `mellat_orders_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ref_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`sale_order_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`sale_refrences_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`additional_data` varchar(1000) COLLATE utf8_unicode_ci NOT NULL,
`message` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`timestamp` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=22 ;

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

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

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

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

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

  1. ست کردن تنظیمات دیتابیس

حالا برای ست کردن تنظیمات دیتابیس در شیء ساخته شده، به صورت زیر کار میکنیم.

$mellatPay->setDB($server, $dbName, $username, $password);
  1. ارسال درخواست اتصال به درگاه بانک ملت

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

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

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

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

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

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

  1. ساخت شیء و ست کردن تنظیمات دیتابیس

در ابتدا باید دو مرحله اول قدم اول را نیز در اینجا تکرار کنیم.

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

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

متدهای کمکی

متد setDebugMode

توسط این متد میتوانید مشخص کنید که آیا در حالت تست درگاه قرار دارید یا خیر؟ این متد فقط میتواند در قدم اول و بعد از دو مرحله اول صدا زده شود تا کارایی خود را نشان دهد. اگر این متد صدا زده بشود، اگر درگاه به هر خطایی در ارتباط با بانک برخورد کند یک Exception برمیگرداند و شماره خطا و متن خطا بر اساس مستندات بانک ملت را به شما نشان میدهد که در زمان توسعه درگاه میتواند کمک بزرگی به شما باشد. پارامتر اول این تابع میتواند مقدار ‘en’ یا ‘fa’` را بگیرد. که زبان متن خطا را مشخص میکند.

$mellatPay = new IPayMellat('site56', 69202546, 6541369);
$mellatPay->setDB('localhost', 'my_db', 'root', '5d5sa6d');
$mellatPay->setDebugMode('fa');

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

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

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

در هنگام ساختن یک شیء جدید از کلاس IPayZarinpal باید مرچنت کد را که زرین پال به شما داده است را به کلاس بدهید.

  1. ست کردن تنظیمات دیتابیس

حالا برای ست کردن تنظیمات دیتابیس در شیء ساخته شده، به صورت زیر کار میکنیم.

$zarinPay->setDB($server, $dbName, $username, $password);
  1. ارسال درخواست اتصال به درگاه زرین پال

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

$additionalData = array(
    'email' => 'email@gmail.com',
    'mobile' => '09xxxxxxxxx',
    'description' => 'description'
);
$zarinPay->sendPayRequest(4000, $callbackUrl, $additionalData);
  1. ریدایرکت کاربر به درگاه

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

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

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

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

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

  1. ساخت شیء و ست کردن تنظیمات دیتابیس

در ابتدا باید دو مرحله اول قدم اول را نیز در اینجا تکرار کنیم.

  1. چک کردن اینکه کاربر آیا پرداخت را انجام داده است یا خیر؟

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

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

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

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

متدهای کمکی

متد setDebugMode

توسط این متد میتوانید مشخص کنید که آیا در حالت تست درگاه قرار دارید یا خیر؟ این متد فقط میتواند در قدم اول و بعد از دو مرحله اول صدا زده شود تا کارایی خود را نشان دهد. اگر این متد صدا زده بشود، اگر درگاه به هر خطایی در ارتباط با درگاه برخورد کند یک Exception برمیگرداند و شماره خطا و متن خطا بر اساس مستندات زرین پال را به شما نشان میدهد که در زمان توسعه درگاه میتواند کمک بزرگی به شما باشد. پارامتر اول این تابع میتواند مقدار ‘en’ یا ‘fa’ را بگیرد. که زبان متن خطا را مشخص میکند.

$zarinPay = new IPayZarinpal('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx);
$zarinPay->setDB('localhost', 'my_db', 'root', '5d5sa6d');
$zarinPay->setDebugMode('fa');