در اوایل شروع کار و راه اندازی فروشگاه اینترنتی و یا بخشی برای دریافت وجه از مشتریان در سایت, نیازمند یک درگاه پرداخت است که مراحل طولانی برای دریافت درگاه مستقیم بانکی که نیازمند لوگوی طلای وزارت ارشاد و نماد اعتماد الکترونک است, می تواند موقعیت هایی را که برای فروش آنلاین محصولات و خدمات سایت می توانستید داشته باشید را از بین ببرد.
برای همین توصیه میشه به محض راه اندازی فروشگاه آنلاین و یا اضافه کردن بخش پولی و محصولات به وب سایت یک درگاه پرداخت داشته باشید تا بتوانید بدون وقفه ای, محصولات را بفروش برسانید.
برای ساده تر شدن کار ما از درگاه واسط پرداخت استفاده می کنیم که یکی از آنها ZarinPal است.
مزیت دیگری که درگاه واسط پرداخت دارد این است که شما در صورت قطعی موقت درگاه مستقیم بانکی خود می توانید بدون مشکل از خدمات پرداخت آنلاین رو سایت بهره ببرید که بسیار مهم و ضروی است چرا که در کمپین های تبلیغاتی و یا ایمیل مارکتینگ , بوجود آمدن این مشکل هزینه بر است.
پس در این آموزش قصد داریم به شما نحوه اتصال به درگاه زرین پال php را با یک مثال کاربردی و سورس کد php درگاه زرین پال به شما نمایش بدیم.
دریافت درگاه زرین پال
کافی است یک وب سایت که در آن بخش فروشگاه یا خدمات پرداخت را دارد داشته باشید و بعد ثبت نام و ارسال مدارک , مرچنت کد درگاه پرداخت خود را دریافت کنید.
اتصال به درگاه زرین پال php
به منظور استفاده هرچه راحتر یک نمونه کد ” اتصال به درگاه زرین پال php ” برای ارسال تراکنش و یک نمونه کد برسی تراکنش بعد از برگشت از بانک نوشتم که کار شما رو تا حد زیادی راحت میکنه
در آخر پست از بخش دانلود باکس می توانید سورس کد کامل برای اتصال به درگاه واسط را به همراه دیتابیس و ذخیره سفارشات را دریافت کنید.
config.php – تنظبمات مربوط مربوط به پروژه
1 2 3 4 5 |
<?php $MerchantID = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'; //Required $CallbackURL = 'http://www.site.com/verify.php'; // Required |
کد مرچنت که از درگاه واسط دریافت کردید را وارد کنید. همچنین به جای www.site.com آدرس وبسایت خود را وارد کنید (به همراه فولدر این پروژه)
send.php – ارسال تراکنش به درگاه زرین پال ZarinPal :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php require_once('config.php'); $Amount = 1000; // Toman - Required $Description = 'توضیحات تراکنش'; // Required $Email = 'U'; // Optional $Mobile = ''; // Optional $client = new SoapClient('https://zarinpal.com/pg/services/WebGate/wsdl', ['encoding' => 'UTF-8']); $result = $client->PaymentRequest([ 'MerchantID' => $MerchantID, 'Amount' => $Amount, 'Description' => $Description, 'Email' => $Email, 'Mobile' => $Mobile, 'CallbackURL' => $CallbackURL,]); //Redirect to URL You can do it also by creating a form if ($result->Status == 100) { Header('Location: https://zarinpal.com/pg/StartPay/'.$result->Authority); } else { echo'ERR: '.$result->Status; } |
در بالا مقدار اصلی $amount
است که باید بنابر قیمت محصول خود که از دیتابیس می خوانید به تومان قرار بدید .همچنین بخش Description
رو میتونید شماره فاکتور یا نام محصول رو قرار بدید.
بقیه متغییرها اطلاعاتی در مورد سفارش و مشتری است که می توانید خالی قرار بدید
verify.php – جهت برسی نتیجه تراکنش :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php require_once('config.php'); $Amount = 1000; //Amount will be based on Toman $Authority = $_GET['Authority']; if ($_GET['Status'] == 'OK') { $client = new SoapClient('https://zarinpal.com/pg/services/WebGate/wsdl', ['encoding' => 'UTF-8']); $result = $client->PaymentVerification([ 'MerchantID' => $MerchantID, 'Authority' => $Authority, 'Amount' => $Amount,]); if ($result->Status == 100) { echo 'تراکنش موفقیت آمیز بود . شمارهه پیگیری:'.$result->RefID; } else { echo 'ترانکش با خطا مواجه شد . وضعیت : '.$result->Status; } else { echo 'عملیات پرداخت توسط کاربر لغو شد.'; } |
همانطور که در بالا دیدید تمام مقدار ها ثابت بودند مثل قیمت و ما هیچ عملیاتی مثل ذخیره سازی اطلاعات سفارش در دیتابیس mysql و همچنین دادن محصول یا لینک دانلود و یا هر خدمت دیگری را انجام ندادیم.
در صورتی که نیاز است قبل از اتصال به درگاه پرداخت ما ابتدا به دیتابیس متصل و قیمت واقعی رو بیرون بکشیم و داخل متغییر$amount
قرار بدیم.
بعد از آن یک سطر را در جدول مثلا orders
ثبت و id
آن سفارش را به صورت یک query string در url
بازگشتی (callback.php
) قرار بدیم تا هنگام بازگشت کاربر از درگاه, آن id
را از url دریافت بر اساس نتیجه تراکنش, وضعیت پرداخت را در جدول orders تغییر بدیم.
همچنین اگر پرداخت موفقیت آمیز بود, محصول را برای کاربر ثبت کنید.
بنابراین کد بالا یک مثال ساده از نحوه اتصال و بررسی وضعیت تراکنش بعد از بازگشت بود و در صورتی که مرچنت کد زرین پال را ندارید می توانید بصورت تستی این مورد رو روی هاست تست کنید.
برای همین به جای آدرس های https://zarinpal.com
در کدها آدرس https://sandbox.zarinpal.com
را جایگزین کنید و همچنین در حالت تست می توانید مقدار $MerchantID
را هر کاراکتری که خواستید قرار بدید.
در سورس کد نمونه ما یک دیتابیس و جدول برای ثبت سفارشات کاربر داریم که بنابر آن هنگام بازگشت از درگاه, وضعیت آن را در جدول مورد نظر بروزرسانی می کنیم.
برای دانلود سورس کد آموزش آموزش اتصال به درگاه زرین پال php + کد های نمونه + مستندات PDF به همراه دیتابیس MySQL به باکس دانلود مراجعه کنید
هر سوالی داشتید از نظرات همین مطلب ارسال کنید. سریعا, پاسخگوی سوالات شما هستیم.
موفق و پیروز باشید.
دوست عزیز، در مثال مربوط به متن اموزش وقتی فایل send.php رو اجرا میکنم خطای زیر رو میده در حالی همه چیز درسته و روی هاست واقعی هم تست میکنم:
خطای برگشتی:
ERR: -1
در سورسی که فرستادید ، فایل کانفیگ همه اطلاعات لازم را میگیره اما به دیتابیس کانکت نمیشه . اصلاحش کنید لطفا
سلام.
حتما در فایل config.php باید اطلاعات دیتابیس خودتان را وارد کنید و همچنین فایل .sql را ایمورت کنید.
داخل فایل core.php اطلاعات کلاس تابع pdo اتصال به دیتابیس قرار داده شده.
این مورد تست شده هست و مشکلی از این نظر نداره.
اگر موردی دیدید دقیق با خطا بفرمایید راهنمایی بشه.
موفق باشید.
سلام خسته نباشید فرض کنید من ربات فروشگاه میخوام بسازم الان کسی از طریق زرین پال پرداخت کرد چطور میتونم کاری بکنم هرکسی برا خودش حساب داشته باشه و این در حساب زخیره بشه؟زخیره بشه منظورم پولی که پرداخت میکنه که اگه چیزی خرید از حسابش کم ششه
سلام. ممنونم.
باید اعتبار کیف پول ایجاد کنید که خود یک جدول جداست و نیاز داره در هنگام ثبت سفارش هم از این جدول استفاده بشه که userid کاربر سطری هست که اعتبار را به عدد ذخیره می کند.
در ربات فروشگاه آنلاین خدمات این کار رو انجام دادیم :
https://netparadis.com/market-telegram-bot-source
سلام وقت بخیر
من یه چیزیو درست متوجه نمیشم، هنوزم برای اپلیکیشن ام تست نکردم کد رو، فقط میخوام قبل از تست بدونم اگه در خط ۲۱ فایل send.php محتوای verify.php رو قرار بدیم (تا دیگه لازم نباشه دوباره یه شی soapClient بسازیم یا مقادیر مختلف رو مثه همین Authority از طریق GET دریافت کنیم یا config.php رو require کنیم) و نتیجه ی نهایی مد نظرو بفرستیم برای اپلیکیشن بهتر نیس؟
سلام. ممنون.
بله میتونید هر دو عملیات رو در یک فایل انجام بدید. دلیل اینکه هر دو را در دو فایل جداگانه send.php و verify.php انتقال درک بهتر نحوه پیاده سازی این درگاه است تا دوستانی که تازه شروع کردند بتوانند به راحتی درگاه پرداخت را به پروژه خود اضافه کنند.
موفق باشید.
سلام ببخشید از من ارور
Fatal error: Uncaught Error: Call to a member function query() on null in C:\wamp64\www\zar\pay.php on line 11
این رو میگیره من نمیدون متغیر $telegram دقیقا چیه
سلام.
اطلاعات دیتابیس را باید بدرستی وارد کنید و همچنین جداول رو هم باید داخل دیتابیس ایمپورت کنید.
موفق باشید.
همه این کارا رو انجام دادم ولی مشکل اینجاست که متغیر $telegram اصلا تعریف نشده که چیه
بله الان چک شد درست می فرمایید. این متغییر مربوط به کانکشن دیتابس بود که فایل اصلی آن در فایل zip قرار داده نشده بود.
الان فایل تغییر کرد مجدد از باکس دانلود فایل جدید را دریافت و استفاده کنید.
موفق باشید.
خیلی از شما ممنونم بابات رسیدگی سریع به مشکلات
خوشحالیم که مفید واقع شده.
موفق باشید.
سلام
چجوری می تونم روی لوکال تست کنم زرین پال رو ؟
Transaction canceled by user
مشکل در تأیید جواز امنیتی
همچین اروری به من نشون میده
سلام. از ساب دامین sandbox استفاده کنید.
موفق باشید.
سلام و درود
خیلی خوب بود
ممنون.
زنده باد
سلام ممنون. خوشحالیم که مفید واقع شده.
موفق باشید.
دمت گرم ، عالی بود.
سلام. خوشحالیم که مفید واقع شده.
موفق باشید.
همچنین ، فقط یه ‘}’ داخل verify.php بعد از خط ۱۸ کم گذاشتید.
این بخش از کد صحیح است و مشکلی ندارد.
موفق باشید.
حق با شماست نیاز به اصلاح داره و هنوز اصلاح نشده.
فوق العاده بود
خوشحالم که مفید واقع شده. موفق باشید.