یکی از موارد رایج در وبسایتها و اپلیکیشنهای تحت وب، استفاده از درگاه پرداخت آنلاین جهت دریافت وجه از کاربره. دریافت وجه میتونه دلایل مختلفی از جمله پرداخت حق اشتراک، دانلود فایل و خرید یک محصول فیزیکی یا مجازی داشته باشه.
زرینپال یکی از ارائه دهندههای خدمات درگاه پرداخت اینترنتی هست که به دلیل سابقه زیاد و اعتبار مناسب، گزینه خوبی برای استفاده هست. در این مقاله قصد دارم نحوه استفاده از این درگاه پرداخت رو در یک پروژه لاراول توضیح و آموزش بدم.
در صورت تمایل میتونین با استفاده از لینک معرف من نسبت به ثبت نام در زرینپال اقدام کنین:
سادهترین و سریعترین راه برای استفاده در درگاه پرداخت زرینپال در لاراول استفاده از پکیجی هست که توسط من و برای این منظور توسعه داده شده. برای اضافه کردن این پکیج به پروژه لاراول کافیه دستور Composer زیر رو اجرا کنین:
composer require pishran/zarinpal
بعد از اضافه کردن پکیج به پروژه، وارد فایل env
بشید و خط زیر رو وارد کنید:
ZARINPAL_MERCHANT_ID=<YOUR-MERCHANT-ID-GOES-HERE>
لطفا توجه کنین که باید کد پذیرنده یا همون Merchant ID که از زرینپال دریافت کردین رو در این متغیر قرار بدین. حالا همهچیز آمادهست و میتونین به راحتی از این درگاه پرداخت اینترنتی تو پروژهتون استفاده کنید.
بطور کلی استفاده از درگاههای پرداخت اینترنتی از 2 مرحله تشکیل میشه. مرحله اول ایجاد تراکنش و ارجاع کاربر به درگاه پرداخت بانکی هست و مرحله دوم هم بررسی وضعیت پرداخت به لحاظ موفقیت آمیز بودن.
برای فرستادن کاربر به درگاه پرداخت میتونین مشابه کد زیر عمل کنین:
// مبلغ تراکنش به تومان
$amount = 1000;
$response = zarinpal()
->amount($amount)
->request()
->description('توضیحات تراکنش')
->callbackUrl('https://www.faridaghili.ir/payment-callback')
->mobile('09120199514') // شماره موبایل مشتری - اختیاری
->email('info@faridaghili.ir') // آدرس ایمیل مشتری - اختیاری
->send();
if (! $response->success()) {
// مشکلی پیش اومده که میتونین علتش رو به مشتری نمایش بدین
return $response->error()->message();
}
// ذخیره اطلاعات در دیتابیس
Payment::create([
'authority' => $response->authority(),
'amount' => $amount,
]);
// هدایت مشتری به درگاه پرداخت
return $response->redirect();
بعد از اجرای کدهای بالا، کاربر شما به درگاه پرداخت بانکی منتقل میشه و میتونه پرداخت رو با استفاده از کارت بانکی و رمز دوم انجام بده (یا انجام نده!). در هر صورت، چه با تکمیل پرداخت و چه با انصراف از پرداخت، به آدرسی که در متد callbackUrl
مشخص کردید برمیگرده.
در این مرحله لازمه که وضعیت تراکنش رو بررسی کنیم تا موفقیت یا عدم موفقیت پرداخت برامون احراز بشه و کالا یا خدمات رو به کاربر ارائه کنیم. جهت استعلام وضعیت تراکنش از کد زیر استفاده میکنیم:
// دریافت کوئری استرینگهای ارسال شده توسط زرین پال
$authority = request()->query('Authority');
$status = request()->query('Status');
if ($status != 'OK') {
return 'پرداخت موفق نبود';
}
// دریافت تراکنش از دیتابیس
$payment = Payment::where('authority', $authority)->first();
if (! $payment) {
return 'اطلاعات پرداخت پیدا نشد';
}
// استعلام وضعیت تراکنش از زرینپال براساس شناسه و مبلغ
$response = zarinpal()
->amount($payment->amount)
->verification()
->authority($authority)
->send();
if (! $response->success()) {
// تراکنش موفق نبود که میتونین علتش رو به مشتری نمایش بدین
return $response->error()->message();
}
// پرداخت موفقیت آمیز بود و میتونین کد رهگیری رو در دیتابیس ذخیره کنین
$payment->update([
'reference_id' => $response->referenceId(),
'paid_at' => now(),
]);
// اینجا همهچیز درست شده و وقتشه که کالا یا خدمات رو به مشتری تحویل بدین
امیدوارم این مقاله مورد استفادهتون قرار بگیره و دفعه بعدی که خواستین تو پروژهتون درگاه پرداخت داشته باشین، این کار رو بدون نگرانی و دردسر انجام بدین.
همچنین پیشنهاد میکنم سری به مخزن پکیج pishran/Zarinpal
بزنین تا با سایر قابلیتها و امکاناتی که داره آشنا بشین.