نسخه 2 مستندات نسخه 2 - اتمام پشتیبانی
فایل تنظیمات پکیج
از نسخه 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
برای درگاه های بانک ملت و سایت زرین پال است. توجه داشته باشید که در صورت استفاده از هر کدام از درگاه ها ابتدا تنظیمات آن را به درستی پر کرده باشید.
مستندات مخصوص درگاه بانک ملت
متدهای زیر به صورت قدم به قدم برای اتصال به بانک و تایید پرداخت کاربر توضیح داده میشود.
قدم اول: منتقل کردن کاربر به درگاه
- ساختن شیء از کلاس
use IPay\Mellat\IPayMellat;
.
.
.
$mellatPay = new IPayMellat();
در صورتی که فایل تنظمیات پکیج را در مسیر پیشفرض (کنار پوشه vendor
با نام ipay.php
) قرار نداده اید و در مسیری دیگر وجود دارد، مسیر آن را به عنوان پارامتر اول به کلاس IPayMellat
بدهید.
- ارسال درخواست اتصال به درگاه بانک ملت
با استفاده از متد sendPayRequest
میتوانید درخواست اتصال به سرور بانک را بدهید. این متد دارای سه پارامتر است که تنها پارامتر اول اجباری است.
پارامتر اول: مبلغی است که میخواهید کاربر واریز کند.
پارامتر دوم (اختیاری): اطلاعات اضافی. این اطلاعات اضافی به سرور بانک فرستاده میشود و بدون هیچ تغییر بازگشت داده میشود.
پارامتر سوم (اختیاری): آدرس بازگشتی. در صورتی که این پارامتر داده نشود، آدرس را از فایل تنظیمات میخواند.
$mellatPay->sendPayRequest($amount, $additionalData, $callBackUrl);
- ریدایرکت کاربر به درگاه
برای ریدایرکت کاربر به درگاه، ابتدا توسط متد passPayRequest
چک میکنیم که آیا بانک آماده برای منتقل کردن کاربر است و هیچ مشکلی پیش نیامده است که در این صورت کاربر را به درگاه منتقل میکنیم. اگر هم خطایی پیش آمد با استفاده از متد getPayRequestResCode
میتوانیم شماره خطا را دریافت کنیم. همچنین توسط متد getRefId
میتوانیم شماره refId
را ذخیره کنیم تا پس از بازگشت کاربر به سایت بتوانیم مشخص کنیم که کدام کاربر و برای کدام محصول پرداخت را انجام داده است.
if ($mellatPay->passPayRequest())
{
$productRefId = $mellatPay->getRefId();
.
.
.
$mellatPay->redirectToBank();
}
else
{
//Error
$errorNumber = $mellatPay->getPayRequestResCode();
}
قدم دوم: گرفتن جواب از درگاه بانک ملت
پس از اتمام عملیات کاربر در درگاه بانک، کاربر به آدرسی که ما در قدم اول مشخص کردیم منتقل میشود. حالا در این آدرس ما باید چک کنیم که آیا کاربر پرداخت را انجام داده است یا خیر؟
- ساخت شیء
use IPay\Mellat\IPayMellat;
.
.
.
$mellatPay = new IPayMellat();
- چک کردن اینکه کاربر آیا پرداخت را انجام داده است یا خیر؟
در کد زیر توسط سه متد userPayment
, verifyPayment
و settleRequest
چک میکنیم که آیا کاربر پرداخت را انجام داده است یا خیر؟ متد userPayment
توسط داده های بازگشتی از بانک چک میکند که آیا پرداخت انجام شده است یا خیر؟ متد verifyPayment
توسط بانک چک میکند که آیا کاربر پرداخت را انجام داده است یا خیر؟ و متد settleRequest
درخواست واریز وجه به حساب از بانک را میکند. اگر هر سه این متدها جواب true
برگردانند، به این معنی است که کاربر پرداخت را انجام داده است. در غیر این صورت خطای مناسب را به کاربر نمایش میدهیم.
if ($mellatPay->userPayment() && $mellatPay->verifyPayment())
{
if ($mellatPay->settleRequest())
{
$productRefId = $mellatPay->getRefId()
.
.
.
}
else
{
return 'error';
}
}
else
{
return 'error';
}
توسط دو قدم گفته شده در بالا میتوانید کل روند پرداخت بانک ملت را انجام دهید.
مستندات مخصوص درگاه زرین پال
قدم اول: منتقل کردن کاربر به درگاه
- ساختن شیء از کلاس
use IPay\Zarinpal\IPayZarinpal;
.
.
.
$zarinPay = new IPayZarinpal($merchentId);
در صورتی که فایل تنظمیات پکیج را در مسیر پیشفرض (کنار پوشه vendor
با نام ipay.php
) قرار نداده اید و در مسیری دیگر وجود دارد، مسیر آن را به عنوان پارامتر اول به کلاس IPayZarinpal
بدهید.
- ارسال درخواست اتصال به درگاه زرین پال
با استفاده از متد sendPayRequest
میتوانید درخواست اتصال به زرین پال را بدهید. این متد دارای دو پارامتر است که تنها پارامتر اول اجباری است.
پارامتر اول: مبلغی است که میخواهید کاربر واریز کند (به تومان).
پارامتر دوم (اختیاری): آدرس بازگشتی. در صورتی که این پارامتر داده نشود، آدرس را از فایل تنظیمات میخواند.
$zarinPay->sendPayRequest(4000, $callbackUrl);
- ریدایرکت کاربر به درگاه
برای ریدایرکت کاربر به درگاه، ابتدا توسط متد passPayRequest
چک میکنیم که آیا زرین پال آماده برای منتقل کردن کاربر است و هیچ مشکلی پیش نیامده است که در این صورت کاربر را به درگاه منتقل میکنیم. اگر هم خطایی پیش آمد با استفاده از متد getStatusCode میتوانیم شماره خطا را دریافت کنیم. همچنین توسط متد getAuthority
میتوانیم شماره authority
را ذخیره کنیم تا پس از بازگشت کاربر به سایت بتوانیم مشخص کنیم که کدام کاربر و برای کدام محصول پرداخت را انجام داده است.
authority
کدی یکتا است که زرین پال برای هر درخواست به درگاه، اختصاص میدهد.
if ($zarinPay->passPayRequest())
{
$productAuthority = $zarinPay->getAuthority();
.
.
.
return $zarinPay->redirectToBank();
}
else
{
//Error
$errorNumber = $zarinPay->getStatusCode();
}
در صورتی که میخواهید به زرین گیت ریدایرکت کنید پارامتر اول متد redirectToBank
را true
قرار دهید.
قدم دوم: گرفتن جواب از درگاه زرین پال
پس از اتمام عملیات کاربر در درگاه، کاربر به آدرسی که ما در قدم اول مشخص کردیم منتقل میشود. حالا در این آدرس ما باید چک کنیم که آیا کاربر پرداخت را انجام داده است یا خیر؟
- ساخت شیء از کلاس
use IPay\Zarinpal\IPayZarinpal;
.
.
.
$zarinPay = new IPayZarinpal($merchentId);
- چک کردن اینکه کاربر آیا پرداخت را انجام داده است یا خیر؟
در کد زیر توسط دو متد userPayment
, verifyPayment
چک میکنیم که آیا کاربر پرداخت را انجام داده است یا خیر؟ متد userPayment
توسط داده های بازگشتی از بانک چک میکند که آیا پرداخت انجام شده است یا خیر؟ متد verifyPayment
توسط سرور زرین پال چک میکند که آیا کاربر پرداخت را انجام داده است یا خیر؟ اگر هر دو این متدها جواب true
برگردانند، به این معنی است که کاربر پرداخت را انجام داده است. در غیر این صورت خطای مناسب را به کاربر نمایش میدهیم.
در این مرحله اگر پرداخت به درستی انجام شده باشد زرین پال کدی را تحت عنوان refId
میدهد که برای پیگیری پرداخت به کار میرود. این کد را از طریق متد getRefId
میتوان گرفت.
if ($zarinPay->userPayment() && $zarinPay->verifyPayment())
{
$productAuthority = $zarinPay->getAuthority();
$refId = $zarinPay->getRefId();
.
.
.
}
else
{
//Error
$errorNumber = $zarinPay->getStatusCode();
}
توسط دو قدم گفته شده در بالا میتوانید کل روند پرداخت درگاه زرین پال را انجام دهید.