آموزش اتصال به درگاه زرین پال php

  • آپدیت شده در تاریخ

آموزش اتصال به درگاه زرین پال php

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

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

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

مزیت دیگری که درگاه واسط پرداخت دارد این است که شما در صورت قطعی موقت درگاه مستقیم بانکی خود می توانید بدون مشکل از خدمات پرداخت آنلاین رو سایت بهره ببرید که بسیار مهم و ضروی است چرا که در کمپین های تبلیغاتی و یا ایمیل مارکتینگ , بوجود آمدن این مشکل هزینه بر است.

پس در این آموزش قصد داریم به شما نحوه اتصال به درگاه زرین پال php را با یک مثال کاربردی و سورس کد php درگاه زرین پال به شما نمایش بدیم.

دریافت درگاه زرین پال

کافی است یک وب سایت که در آن بخش فروشگاه یا خدمات پرداخت را دارد داشته باشید و بعد ثبت نام و ارسال مدارک , مرچنت کد درگاه پرداخت خود را دریافت کنید.

اتصال به درگاه زرین پال php

به منظور استفاده هرچه راحتر یک نمونه کد ” اتصال به درگاه زرین پال php ” برای ارسال تراکنش و یک نمونه کد برسی تراکنش بعد از برگشت از بانک نوشتم که کار شما رو تا حد زیادی راحت میکنه

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

config.php – تنظبمات مربوط مربوط به پروژه

کد مرچنت که از درگاه واسط دریافت کردید را وارد کنید. همچنین به جای www.site.com آدرس وبسایت خود را وارد کنید (به همراه فولدر این پروژه)

send.php – ارسال تراکنش به درگاه زرین پال ZarinPal :

در بالا مقدار اصلی $amount است که باید بنابر قیمت محصول خود که از دیتابیس می خوانید به تومان قرار بدید .همچنین بخش Descriptionرو میتونید شماره فاکتور یا نام محصول رو قرار بدید.

بقیه متغییرها اطلاعاتی در مورد سفارش و مشتری است که می توانید خالی قرار بدید

verify.php – جهت برسی نتیجه تراکنش :

همانطور که در بالا دیدید تمام مقدار ها ثابت بودند مثل قیمت و ما هیچ عملیاتی مثل ذخیره سازی اطلاعات سفارش در دیتابیس mysql و همچنین دادن محصول یا لینک دانلود و یا هر خدمت دیگری را انجام ندادیم.

در صورتی که نیاز است قبل از اتصال به درگاه پرداخت ما ابتدا به دیتابیس متصل و قیمت واقعی رو بیرون بکشیم و داخل متغییر$amount قرار بدیم.

بعد از آن یک سطر را در جدول مثلا orders ثبت و id آن سفارش را به صورت یک query string در url بازگشتی (callback.php) قرار بدیم تا هنگام بازگشت کاربر از درگاه, آن id را از url دریافت بر اساس نتیجه تراکنش, وضعیت پرداخت را در جدول orders تغییر بدیم.

همچنین اگر پرداخت موفقیت آمیز بود, محصول را برای کاربر ثبت کنید.

 

بنابراین کد بالا یک مثال ساده از نحوه اتصال و بررسی وضعیت تراکنش بعد از بازگشت بود و در صورتی که مرچنت کد زرین پال را ندارید می توانید بصورت تستی این مورد رو روی هاست تست کنید.

برای همین به جای آدرس های https://zarinpal.com در کدها آدرس https://sandbox.zarinpal.com را جایگزین کنید و همچنین در حالت تست می توانید مقدار $MerchantID را هر کاراکتری که خواستید قرار بدید.

در سورس کد نمونه ما یک دیتابیس و جدول برای ثبت سفارشات کاربر داریم که بنابر آن هنگام بازگشت از درگاه, وضعیت آن را در جدول مورد نظر بروزرسانی می کنیم.

برای دانلود سورس کد آموزش آموزش اتصال به درگاه زرین پال php + کد های نمونه + مستندات PDF به همراه دیتابیس MySQL  به باکس دانلود مراجعه کنید

هر سوالی داشتید از نظرات همین مطلب ارسال کنید. سریعا, پاسخگوی سوالات شما هستیم.

موفق و پیروز باشید.

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۳۶)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. Dude ۲ شهریور ۱۴۰۱

    سلام اقای شفیعی.
    دو تا سوال داشتم ازتون ممنون میشم راهنماییم کنید.
    ۱: چطوری میتونم شماره تماس یا ایدی کاربر از ادرس کال بک بانکی دریافت کنم؟
    ۲:
    من از درگاه پرداخت زرین پال استفاده میکنم و زمانی که به ادرس کال بک پارامتر علامت سوال (؟) اضافه میکنم ادرس برگشتی به صورت خودکار این علامت (&) اضافه میکنه بین (verify.php&Authority) که باعث میشه صفحه ارور بده.
    http://www.yoursite.ir/?/verify.php&Authority=A00000000000000000000000000217909057&Status=OK
    ولی پارامتر های دیگه مشکلی نداره و ادرس کال بک اجرا میشه به صورت زیر ولی باید حتما علامت ؟ باشه تا بتونه به ادرس صفحه برگرده :
    http://www.yoursite.ir/=ok/verify.php?Authority=A00000000000000000000000000217909057&Status=OK

    پاسخ
    1. حسن شفیعی ۲ شهریور ۱۴۰۱

      سلام.
      به اخر ادرس کال بک اصن ؟ نمیخواد اضافه کنید فقط شماره سفارش رو به آخر کال بک اضافه کنید و تو دیتابیس یه سطر میسازید با شماره سفارش که تو اون رکورد شماره تماس و ایدی کاربر و بقیه اطلاعات رو ذخیره میکنید

      کال بک با شماره سفارش
      site/verify.php?orderid=121

      پاسخ
      1. Dude ۲ شهریور ۱۴۰۱

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

        پاسخ
      2. حسن شفیعی ۳ شهریور ۱۴۰۱

        از دیپ لینک برای کال بک نمیتونید استفاده کنید

        پاسخ
      3. Dude ۲ شهریور ۱۴۰۱

        ادرس دیپ لینک پارامتر (/no=?/) به صورت زیر انجام میدم
        CallbackURL = “poc://deeplink.dev/?=no/https://site.ir/verify.php$”;
        و بعد با استفاده از دیپ لینک ادرس دریافت میکنم و با split(‘/=no/’).last ادرس به صورت زیر دریافت میکنم.علامت سوال اخر کال بک خود زرین پال اضافه میکنه .
        https://site.ir/verify.php?Authority=A00000000000000000000000000217909057&Status=OK

        پاسخ
  2. محمد ۷ مرداد ۱۴۰۱

    من چیکار کنم که مثلا یه محصول گذاشتم قیمتش مثلا ۶۰ هزار تومن وقتی کاربر کلیک کرد اون قیمت نمایش بده درصورتی که کدamount باید مبلغ وارد کنی خب محصول ۱۰۰۰ باشه نمیشع دونه دونه amount بزنی قیمت چطور به صورت خودکار ثبت بشه مرسی از اموزش خوبت

    پاسخ
    1. حسن شفیعی ۷ مرداد ۱۴۰۱

      سلام. باید محصولات رو به همراه قیمت ها داخل یه دیتابیس ذخیره کنید و نمایش بدید

      پاسخ
      1. محمد ۸ مرداد ۱۴۰۱

        فهمیدم بعد ادرس پایگاه داده بدم amount و قیمت بهش بدم که کاربر کلیک کرد همون قیمت باشه مرسی از راهنماییت

        پاسخ
  3. علی مقدم ۲۸ دی ۱۴۰۰

    سلام و تشکر از مطالب مفید. میتونیم uid و vip رو تو سشن session ذخیره کنیم؟

    پاسخ
    1. حسن شفیعی ۲۸ دی ۱۴۰۰

      سلام خوشحالیم که مفید واقع شده.
      بله مشکلی نیست میتونید تو سشن هم ذخیره کنید

      پاسخ
  4. محمد ۲۳ شهریور ۱۴۰۰

    سلام . ممنون از سورستون .
    من به این شکل مقدار میدم ولی ارور ۵۰۰ میده چرا

    pay.php?uid=65465465146351654165165&vip=1

    پاسخ
    1. حسن شفیعی ۲۴ شهریور ۱۴۰۰

      سلام.
      شاید مقدار عددی uid زیاد گذاشتید چون این مقدار وارد دیتابیس ذخیره میشه و سرور این اجازه رو نمیده چون این عدد زیاده یا باید عدد رو کاهش بدید یا فیلدش رو داخل دیتابیس به varchar تغییر بدید

      پاسخ
  5. عرفان زیده سرایی ۱۴ دی ۱۳۹۹

    دوست عزیز، در مثال مربوط به متن اموزش وقتی فایل send.php رو اجرا میکنم خطای زیر رو میده در حالی همه چیز درسته و روی هاست واقعی هم تست میکنم:
    خطای برگشتی:
    ERR: -1

    پاسخ
  6. کاظم زارعیان ۱۴ آبان ۱۳۹۹

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

    پاسخ
    1. حسن شفیعی ۱۴ آبان ۱۳۹۹

      سلام.
      حتما در فایل config.php باید اطلاعات دیتابیس خودتان را وارد کنید و همچنین فایل .sql را ایمورت کنید.
      داخل فایل core.php اطلاعات کلاس تابع pdo اتصال به دیتابیس قرار داده شده.
      این مورد تست شده هست و مشکلی از این نظر نداره.
      اگر موردی دیدید دقیق با خطا بفرمایید راهنمایی بشه.
      موفق باشید.

      پاسخ
  7. مهدی ربیعیان ۲۷ اردیبهشت ۱۳۹۹

    سلام خسته نباشید فرض کنید من ربات فروشگاه میخوام بسازم الان کسی از طریق زرین پال پرداخت کرد چطور میتونم کاری بکنم هرکسی برا خودش حساب داشته باشه و این در حساب زخیره بشه؟زخیره بشه منظورم پولی که پرداخت میکنه که اگه چیزی خرید از حسابش کم ششه

    پاسخ
    1. حسن شفیعی ۲۸ اردیبهشت ۱۳۹۹

      سلام. ممنونم.
      باید اعتبار کیف پول ایجاد کنید که خود یک جدول جداست و نیاز داره در هنگام ثبت سفارش هم از این جدول استفاده بشه که userid کاربر سطری هست که اعتبار را به عدد ذخیره می کند.
      در ربات فروشگاه آنلاین خدمات این کار رو انجام دادیم :
      https://netparadis.com/market-telegram-bot-source

      پاسخ
  8. میلاد محمدی ۱۵ فروردین ۱۳۹۹

    سلام وقت بخیر
    من یه چیزیو درست متوجه نمیشم، هنوزم برای اپلیکیشن ام تست نکردم کد رو، فقط میخوام قبل از تست بدونم اگه در خط ۲۱ فایل send.php محتوای verify.php رو قرار بدیم (تا دیگه لازم نباشه دوباره یه شی soapClient بسازیم یا مقادیر مختلف رو مثه همین Authority از طریق GET دریافت کنیم یا config.php رو require کنیم) و نتیجه ی نهایی مد نظرو بفرستیم برای اپلیکیشن بهتر نیس؟

    پاسخ
    1. حسن شفیعی ۱۷ فروردین ۱۳۹۹

      سلام. ممنون.
      بله میتونید هر دو عملیات رو در یک فایل انجام بدید. دلیل اینکه هر دو را در دو فایل جداگانه send.php و verify.php انتقال درک بهتر نحوه پیاده سازی این درگاه است تا دوستانی که تازه شروع کردند بتوانند به راحتی درگاه پرداخت را به پروژه خود اضافه کنند.
      موفق باشید.

      پاسخ
  9. محمدامین مهدویان ۲۳ بهمن ۱۳۹۸

    سلام ببخشید از من ارور
    Fatal error: Uncaught Error: Call to a member function query() on null in C:\wamp64\www\zar\pay.php on line 11

    این رو میگیره من نمیدون متغیر $telegram دقیقا چیه

    پاسخ
    1. حسن شفیعی ۲۴ بهمن ۱۳۹۸

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

      پاسخ
      1. محمدامین مهدویان ۲۴ بهمن ۱۳۹۸

        همه این کارا رو انجام دادم ولی مشکل اینجاست که متغیر $telegram اصلا تعریف نشده که چیه

        پاسخ
      2. حسن شفیعی ۲۴ بهمن ۱۳۹۸

        بله الان چک شد درست می فرمایید. این متغییر مربوط به کانکشن دیتابس بود که فایل اصلی آن در فایل zip قرار داده نشده بود.
        الان فایل تغییر کرد مجدد از باکس دانلود فایل جدید را دریافت و استفاده کنید.
        موفق باشید.

        پاسخ
      3. محمدامین مهدویان ۲۴ بهمن ۱۳۹۸

        خیلی از شما ممنونم بابات رسیدگی سریع به مشکلات

        پاسخ
      4. حسن شفیعی ۲۴ بهمن ۱۳۹۸

        خوشحالیم که مفید واقع شده.
        موفق باشید.

        پاسخ
  10. ali ۵ بهمن ۱۳۹۸

    سلام
    چجوری می تونم روی لوکال تست کنم زرین پال رو ؟
    Transaction canceled by user
    مشکل در تأیید جواز امنیتی

    همچین اروری به من نشون میده

    پاسخ
    1. حسن شفیعی ۸ بهمن ۱۳۹۸

      سلام. از ساب دامین sandbox استفاده کنید.
      موفق باشید.

      پاسخ
  11. حسین ۲۰ شهریور ۱۳۹۸

    سلام و درود
    خیلی خوب بود
    ممنون.
    زنده باد

    پاسخ
    1. حسن شفیعی ۲۰ شهریور ۱۳۹۸

      سلام ممنون. خوشحالیم که مفید واقع شده.
      موفق باشید.

      پاسخ
  12. حمید ۲۰ تیر ۱۳۹۸

    دمت گرم ، عالی بود.

    پاسخ
    1. حسن شفیعی ۲۰ تیر ۱۳۹۸

      سلام. خوشحالیم که مفید واقع شده.
      موفق باشید.

      پاسخ
      1. حمید ۲۱ تیر ۱۳۹۸

        همچنین ، فقط یه ‘}’ داخل verify.php بعد از خط ۱۸ کم گذاشتید.

        پاسخ
      2. حسن شفیعی ۲۱ تیر ۱۳۹۸

        این بخش از کد صحیح است و مشکلی ندارد.
        موفق باشید.

        پاسخ
      3. عرفان زیده سرایی ۱۴ دی ۱۳۹۹

        حق با شماست نیاز به اصلاح داره و هنوز اصلاح نشده.

        پاسخ
  13. مهدی ۲۹ بهمن ۱۳۹۷

    فوق العاده بود

    پاسخ
    1. حسن شفیعی ۲۹ بهمن ۱۳۹۷

      خوشحالم که مفید واقع شده. موفق باشید.

      پاسخ
دوره های آموزشی