بروزرسانی در ۱۶ مرداد ۱۳۹۷ : افزودن نسخه هماهنگ با +۷ php
درگاه مستقیم و بی دردسر درگاه سداد بانک ملی مزایای بسیاری مثل تسویه حساب سریع ، انتقال مستقیم وجه به حساب شما ، نداشتن درصد کارمزد بانکی و .. خیلی موارد دیگر را دارد .در این مقاله آموزشی قصد داریم نحوه دریافت درگاه سداد بانک ملی و آموزش اتصال به درگاه سداد بانک ملی php را به شما عزیزان نشان بدیم.
دریافت درگاه سداد بانک ملی
برای دریافت درگاه سداد بانک ملی به سایت سداد تحت مجموعه خود بانک ملی به آدرس زیر مراجعه کنید
بسته به نوع کسب و کار خود نوع حقوقی و یا حقیقی را انتخاب کنید
در مرحله بعد از شما یک سری اطلاعات از شخص شما یا شرکت درخواست می شود که باید با دقت وارد و ثبت کنید
بعد از ثبت درخواست و تایید به شما ۳ نوع اطلاعات اختصاص می یابد :
- شماره پذیرندگی (MerchantId)
- شماره ترمینال (TerminalId)
- کلید تراکنش (TerminalKey)
در ادامه این اطلاعات را باید در کد ها جایگزین کنید تا تمام تراکنش های سایت به حساب شما متصل شود.
مدارک مورد نیاز دریافت درگاه سداد بانک ملی
- مشتریان حقیقی :
اصل و کپی شناسنامه و کارت ملی مالک سایت
نداشتن مطالبات معوق و چک برگشتی در سیستم بانکی کشور
دارا بودن اسناد تملیکی و استیجاری مرتبط با محل فعالیت
امکان ارائه مجوزهای رسمی از مراجع ذیصلاح جهت کسب و کار اینترنتی
دارا بودن آدرس اینترنتی (دامنه) با پسوندهای مجاز نظیر
.com , .org , .net , .biz , .ir (All .ir SubDomain like .co.ir or .ac.ir and …) - مشتریان حقوقی :
کپی شناسنامه و کارت ملی صاحبان امضا
نداشتن مطالبات معوق و چک برگشتی در سیستم بانکی کشور
کپی آگهی تاسیس و آخرین تغییرات شرکت-روزنامه رسمی
کپی اساسنامه شرکت
دارا بودن آدرس اینترنتی (دامنه) با پسوندهای مجاز نظیر - com , .org , .net , .biz , .ir (All .ir SubDomain like .co.ir or .ac.ir and …)
خوب بعد از آماده سازی این مدارک برروی ثبت درخواست کلیک کنید تا وارد صفحه بعد بشید.
نکته : شما باید یک حساب در بانک ملت داشته باشید که بیشتر از ۴۸ ساعت از افتتاح حساب گذشته باشه
بروزرسانی اول : برای دریافت درگاه پرداخت سداد نیازی به مراجعه حضوری نیست و تمامی کارها از طریق ایمیل انجام میشود
بروزرسانی دوم : برای استفاده از درگاه سداد بانک ملی نیازی به داشتن حساب در بانک ملی نیست و شما میتوانید اطلاعات حساب یک بانک دیگر را ارائه دهید.
نکته ۲ : برای دریافت درگاه سداد بانک ملی حتما سایت شما باید نماد اعتماد الکترونیک (اینماد) داشته باشد که هزینه سالیانه آن فقط ۳۵ هزار تومان است.(رایگان شد!) لینک ثبت نام Enamad
پس از تایید و ارسال فرم یک ایمیل راهنمایی برای شما ارسال می شود که از شما مدارکی را می خواهند که باید بصورت عکس های تکی به ایمیل ضمیمه کنید.بعد از بررسی های نداشتن مطالبات معوق و چک برگشتی در سیستم بانکی کشور و خوش حساب بودن شما پس از طی مراحل اداری حدودا از ۴ روز تا ۱ هفته شایدم بیشتر اطلاعات درگاه براتون ایمیل میشه که شامل شماره پذیرندگی,ترمینال و کلید تراکنش هستش که در مراحل بعد در کد نویسی اتصال به درگاه سداد بانک ملی php استفاده خواهیم کرد.
در اینجا به جای nusoap از CURL برای ارسال درخواست تراکنش استفاده می کنیم که به عنوان یک تابع در فایلfunction.php
تعریف شده است.
نکته : اگر از php ورژن ۷ و به بالا استفاده می کنید به جای function.php
فایل function.v7.php
را فراخوانی کنید چرا که تابع mcrypt_* مربوط به رمزنگاری در نسخه های جدید php حذف شده است و جایگزین آن از OpenSSL_encrypt
استفاده کردیم
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
Pay.php – ارسال تراکنش به درگاه سداد بانک ملی :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<?php session_start(); include_once("function.php"); //Prepare data $key="YourKey"; // TerminalKey $MerchantId="YourMerchantId"; $TerminalId="YourTerminalId"; $Amount=100; // مبلغ به ریال $OrderId = time().mt_rand(1,3222) ; // شماره سفارش را در دیتابیس ذخیره کنید به عنوان یک سطر جدید $LocalDateTime=date("m/d/Y g:i:s a"); $ReturnUrl="http://site.Com/Verify.php"; // ادرس بازگشتی به سایت شما $SignData=encrypt_pkcs7("$TerminalId;$OrderId;$Amount","$key"); $data = array('TerminalId'=>$TerminalId, 'MerchantId'=>$MerchantId, 'Amount'=>$Amount, 'SignData'=> $SignData, 'ReturnUrl'=>$ReturnUrl, 'LocalDateTime'=>$LocalDateTime, 'OrderId'=>$OrderId); $str_data = json_encode($data); $res=CallAPI('https://sadad.shaparak.ir/vpg/api/v0/Request/PaymentRequest',$str_data); $arrres=json_decode($res); if($arrres->ResCode==0) { $Token= $arrres->Token; $url="https://sadad.shaparak.ir/VPG/Purchase?Token=$Token"; header("Location:$url");exit; } else die($arrres->Description); ?> |
Verify.php – جهت برسی نتیجه تراکنش :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php include_once("function.php"); $key="YourKey"; // TerminalKey $OrderId=$_POST["OrderId"]; $Token=$_POST["token"]; $ResCode=$_POST["ResCode"]; if($ResCode==0) { $verifyData = array('Token'=>$Token,'SignData'=>encrypt_pkcs7($Token,$key)); $str_data = json_encode($verifyData); $res=CallAPI('https://sadad.shaparak.ir/vpg/api/v0/Advice/Verify',$str_data); $arrres=json_decode($res); } if($arrres->ResCode!=-1 && $ResCode==0) { //Save $arrres->RetrivalRefNo,$arrres->SystemTraceNo,$arrres->OrderId to DataBase echo "شماره سفارش:".$OrderId."<br>"."شماره پیگیری : ".$arrres->SystemTraceNo."<br>"."شماره مرجع:". $arrres->RetrivalRefNo."<br> اطلاعات بالا را جهت پیگیری های بعدی یادداشت نمایید."."<br>"; // در اینجا باید سفارش کاربر را تایید و در دیتابیس موفقیت آمیز قرار بدید // نمایش صفحه تاییدیه پرداخت } else echo "تراکنش نا موفق بود در صورت کسر مبلغ از حساب شما حداکثر پس از 72 ساعت مبلغ به حسابتان برمی گردد."; ?> |
برای دانلود سورس کد آموزش اتصال به درگاه سداد بانک ملی php + کد های نمونه + مستندات PDF به همراه توابع استفاده شده به باکس دانلود مراجعه کنید
هر سوالی داشتید از نظرات همین مطلب ارسال کنید. سریعا, پاسخگوی سوالات شما هستیم.
موفق و پیروز باشید.
stdClass Object ( [ResCode] => -1 [Token] => [Description] => عملیات ناموفق بود )
به من این ارور رو میده
مشکل چی هستش ؟
سلام
بعد پرداخت موفق و برگشت از درگاه این خطا رو میگیرید ؟
نه قبلش
سلام تمام موارد اوکی هست داخل postman ادرس رو میزنم اوکیه صفحه بانک باز میشه
ولی وقتی داخل مرورگز همون ادرس رو میزنم خطای زیر رو میده
“آدرس هدایت شده برای پرداخت ، در محدوده آدرس های اعلام شده از طرف پذیرنده نمی باشد .لطفا مسئول فني پذيرنده با بانک تماس حاصل فرمايند”
سلام. درخواست احتمالا بصورت post هست وقتی از مرورگر میزنید بصورت get هست و قابل قبول نیست
سلام هم post – get هر دو postman اوکی هست
میتونه واسه این باشه چون مستقیم ادرس ور میزن broswer اجرا میشه باشه؟
یا باید حتما از طریق یه دکمه داخل صفحه ارسال بشه – یعنی روی دکمه کلیک کنن
مقادیری که همراه با ادرس ارسال میشه مهمه
سلام من میتونم بصورت شخصی برای شما پیام بدم ادرس تلگرام یا موبایل
سلام از بخش ارتباط با مای سایت میتونید پیام بدید
سلام
من درگاه بانک ملی برای ووکامرس قرار دادم اما بعد از ثبت سفارش به سایت بانک منتقل نمیشه میتونید راهنمایی کنید؟؟
سلام.
از اقزونه اصلی خود بانک ملی برای ووکامرس استفاده کنید
https://github.com/SadadPsp-Lab/WooCommerce/archive/master.zip
موفق باشید.
از همین مورد هم استفاده کردم جواب نداده
سلام و عرض ادب. ای کاش شما که زحمت کشیدی و کار خیر انجام دادید بیشتر توضیح میدادی کدها رو، مثل آموزش ها. خدا خیرت بده اگر اینکار رو بکنی، خیلی ها میتونن روزی بخورن
سلام حتما سعی میشه ویدیو مربوطه نیز ضبط و اضافه بشه
تشکر بابت لطفتون، واقعا ممنون. ان شا الله که زودتر این کار خیر رو بکنید
سلام
خسته نباشید
موقع اتصال به درگاه پرداخت با پیغام زیر مواجه میشم
“آدرس هدایت شده برای پرداخت ، در محدوده آدرس های اعلام شده از طرف پذیرنده نمی باشد .لطفا مسئول فني پذيرنده با بانک تماس حاصل فرمايند”
مشکل از کجا میتونه باشه؟ تمام اطلاعات رو درست وارد کردم
ممنون میشم راهنماییم کنید
سلام. ممنون.
مطمین شوید که آدرس کالبک با آدرس دامنه شما یکی باشه و مشکل میتونه از این مورد باشه
ممنونم از پاسختون
بله آدرس درسته
من با پشتیبانی سداد هم تماس گرفتم گفتن مشکلی نیست. من توسعه دهنده برنامه اندرویدی هستم. بک اند php کار میکنم. میخواستم نمونه php رو توی اپ اندروید باز کنم. این تستی هم که انجام دادم اومدم ادرس فایل pay که رو سرورم هست رو با مرورگر باز کردم ببینم چطور میشه. این کارم اشتباهه؟
ببخشید که سوال پیش پا افتاده ای میپرسم. خیلی با php کار نکردم.
خیر. مشکلی نیست ولی به هر حال شما باید کد php رو جدا تست کنید و بعد ببرید روی اپلیکیشن.
بله درسته.
واقعا نمیدونم باید چیکار کنم. همش پیغام “آدرس هدایت شده برای پرداخت ، در محدوده آدرس های اعلام شده از طرف پذیرنده نمی باشد .لطفا مسئول فني پذيرنده با بانک تماس حاصل فرمايند” برهم نشون داده میشه
$ReturnUrl رو هم برابر آدرس سایت خودم قرار میدم. همونی که ثبت کردم موقع گرفتن اطلاعات.
https://website.com/Verify.php و فایل Verify.php هم تو public_html هاستم قرار دادم. یعنی فایل Send.php و Verify.php و function
واقعا مشکل از کجاست. ممنون میشم کمکم کنید
شاید آدرس به www یا ساب دامین اگر دارید گیر داده به هر حال باید تمام حالات رو تست کنید و همچنین سعی کنید دستی مقدار متغییر رو قرار بدید و در یک فایل خام جدا تست کنید و بعد بیارید تو پروژه
ممنونم از اینکه با حوصله به پیامام جواب دادید
سپاااس فرااواان
آدرس صفحه ای که در سایت شما درخواست پرداخت رو صادر میکنه و بعد ریدایرکت میکنه به بانک باید توی لیست دامنه های مجاز اعلامی (که توی فرم پر کردید یا جدا درخواست افزودن دادید) باید باشه
سلام. اگه از لاراول استفاده میکنید یه نگاهی به پکیج زیر بندازید. تمام درگاه های بانکی کشور رو تقریبا ساپورت میکنه
https://github.com/shetabit/payment
سلام و عرض ادب
بابت راهنمایی و این پست ممنونم .
سلام. خوشحالیم که مفید واقع شده.
موفق باشید.
سلام و عرض ادب
من یه مشکلی برام پیش اومده که بعد از انجام عملیات شرط if($arrres->ResCode!=-1 && $ResCode==0) برقرار شده و کدهای داخل بلاک هم اجرا شده ، اما شماره پیگیری سفارش که عنوانش تو داکیومنت SystemTraceNo هست خالی اومده
در واقع من اصلا شماره پیگیری دریافت نکردم و پول هم بعد از بانک برگشت شده به حساب کاربر
بنظرتون برای رفع این مشکل باید چیکار کرد؟
بهتر نیس که شماره پیگیری رو تو شرط بگذاریم؟
البته مستلزم تغییراتی هست
سلام. وقت بخیر.
همه مواردی که نیاز دارید داخل آرایه $arrres هست. شما داخل این شرط در اولین خطش این متغییر رو var_dump و exit کنید ببینید چه مواردی از سمت بانک برگشت داده میشه.
بله شما باید شماره تراکنش یا همان سفارش رو در همان ابتدای ارسال درخواست پرداخت به سمت بانک دریافت و داخل دیتابیس ذخیره کنید و در این مرحله ای که گفتید باید بررسیش کنید.
ذخیره سازی کد تراکنش باید در فایل pay.php قبل از ریدایرکت کردن کاربر به بانک انجام بشه و بعد برگشت هم باید همانند مورد بالا بررسیش کنید.
موفق باشید.
ممنون
من میخوام سایت فروش فالور بزنم
زیرساخت ها اماده هس
مثل هاست- دامنه- سرور اختصاصی – پنل فالور- وب سرویس و…
ولی اصلا یاد ندارم چ جوری درگاه متصل کنم ب سایت یا یادندارم وب سرویس متصل کنم ب سایت
لطفا میشه کمک کنید
هزینه اش هم میدم
ممنون
سلام. اگر تمام موارد مورد نیاز برای یک وبسایت آماده و آنلاین است و فقط نیاز به بخش پرداخت دارید می توانید از بخش تماس با ما اطلاعات تکمیلی ارسال کنید تا بعد بررسی اجمالی سایت, هزینه خدمت شما اعلام شود.
من دقیقا همین مراحل ذکر شده رو رفتم با پیغام
اطلاعات SignData ارسالی اشتباه است
مواجه شدم !
لطفا کمی راهنمایی کنید.
خب مطمینا اطلاعاتی مثل ترمینال آی دی و غیره اشتباه است و برای همین به مشکل برخوردید لطفا با پشتیبانی درگاه بانک در تماس باشید تا سریعتر مشکل شما رفع بشه
$key چیست؟ دقیقا از کجا قابل دسترسی هست؟
مرسی
هنگام ثبت نام درگاه بانک برای شما ارسال میکنه.
موفق باشید.
ایا صفحه ی Verify.php صفحه ی تایید پرداخت هستش ؟؟ یا اینکه باید بزاریم verify کارش رو انجام بده و ما اون ته بنویسیم به صفحه ی تکمیل پرداخت ریدارکت بشه ؟
سلام. بله verify.php صفحه تایید پرداخت است و بعد برگشت از بانک باید به این صفحه کاربر هدایت بشه (callback)
موفق باشید.
میشه یه توضیح در مورد $ResCode== بدید من نمیفهمم گفتید با چی مساوی باشه ؟
سلام . حتما به این مورد توجه کنید
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
بنابراین به اینصورت میشه : if($arrres->ResCode==0)
موفق باشید.
اینکار و هم کردم ولی باز هم به صفحه درگاه نمیره و خطایی هم نمیده!!
از ورژن ۵٫۶ استفاده کنید تا اوکی بشه . بعضی از هاستینگ ها این آپشن رو داخل خود کنترل پنل هاست قرار دادند که میتونید تغییر بدید و یا اینکه تیکت بزنید تا براتون تغییر بدند.
موفق باشید
سلام .
نسخه هماهنگ با php ورژن ۷ به بالا اضافه شد.
موفق باشید
سلام من دقیقا همین کدها رو از بانک گرفتم ولی قسمت SignData=encrypt_pkcs7 اجرا نمیشه به بانک هم گفتیم ولی نتونستن کمک کنن و فکر کنم ایت تابع در PHP 7 سرور هاست من اجرا نمیشه ؟میتونید کمک کنید؟نیاز فوریه
سلام . بله توابع mcrypt تو نسخه php 7.1 منسوخ اعلام شده و خطا میده و تو نسخه های ۷٫۱ به بعد هم کاملا حذف شده . میتونید از php نسخه ۷٫۰ و یا قبل تر استفاده کنید
موفق باشد.
سلام امکانش نیست چراکه نسخه هاست سایت PHP version: 7.0.26 است و نمی دونم چکار کنم؟
سلام .
توابع مربوط به mcrypt تو نسخه جدید php کاملا حذف شدند و دیگر پشتیبانی نمیشه برای همین باید از ssl_encrypt برای اینکار استفاده بشه و نسخه هماهنگ با php ورژن ۷ به بالا اضافه شد. که می توانید از باکس دانلود دریافت کنید.
موفق باشید.
با سلام و خسته نباشید مجدد ماژول درگاه بانک ملی واسه opencart 2.0.3 هم موجود هست ؟
سلام ممنون . متاسفانه خیر ماژول این نسخه رو نداریم.
موفق باشید.