بروزرسانی در ۳ بهمن ۱۳۹۷ : افزودن لیست خطاهای درگاه بانک ملت
بروزرسانی در ۲۷ شهریور ۱۳۹۷ : افزودن کلاس PHP جدا و پکیج لاراول درگاه بانک ملت
درگاه مستقیم و بی دردسر بانک ملت مزایای بسیاری مثل تسویه حساب سریع ، انتقال مستقیم وجه به حساب ملت شما ، نداشتن درصد کارمزد بانکی و .. خیلی موارد دیگر را دارد .در این مقاله آموزشی قصد داریم نحوه دریافت درگاه بانک ملت و آموزش اتصال به درگاه بانک ملت php را به شما عزیزان نشان بدیم.
دریافت درگاه بانک ملت
برای دریافت درگاه بانک ملت به سایت به پرداخت تحت مجموعه خود بانک ملت به آدرس زیر مراجعه کنید
بسته به نوع کسب و کار خود نوع حقوقی و یا حقیقی را انتخاب کنید
در مرحله بعد از شما یک سری اطلاعات از شخص شما یا شرکت درخواست می شود که باید با دقت وارد و ثبت کنید
بعد از ثبت درخواست از شما مدارکی به شرح زیر اخذ می شود .
مدارک مورد نیاز دریافت درگاه بانک ملت
- مشتریان حقیقی :
اصل و کپی شناسنامه و کارت ملی مالک سایت
دارا بودن اسناد تملیکی و استیجاری مرتبط با محل فعالیت
امکان ارائه مجوزهای رسمی از مراجع ذیصلاح جهت کسب و کار اینترنتی
دارا بودن آدرس اینترنتی (دامنه) با پسوندهای مجاز نظیر
.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
نکته خیلی مهم : اطلاعات مربوط به آدرس سایت خود و آی پی فروشگاه اینترنتی خود را وارد نمایید(برای به دست آوردن آی پی راه های متفاوتی وجود داره که بهترین راه تیکت زدن و پرسیدن اون آی پی از مسئول سرورتون که هاست ازش خریدین ، هستش) دقت داشته باشین IP بسیار مهم هست و برای اتصال درگاه به سایت شما نقش اساسی دارد پس IP درست را وارد نمایید.
خیلی از کاربران در این قسمت تصور می کردند آی پی سایتشون همان آیپی مربوط به درگاه هستش که بعد از وارد کردن هنگامی که درگاه را دریافت کردند با مشکل روبرو شدند چون درگاه ها بر اساس IP سرویس دهنده شما منتقل میشه و تبادل اطلاعات میکند برای همین اکیدا توصیه میشه که آی پی درگاه را از پشتیبانی هاست دریافت کنید که بعدا به مشکلی برنخورید
پس از تایید و ارسال فرم یک ایمیل راهنمایی برای شما ارسال می شود که از شما مدارکی را می خواهند که باید بصورت عکس های تکی به ایمیل ضمیمه کنید.بعد از بررسی های نداشتن مطالبات معوق و چک برگشتی در سیستم بانکی کشور و خوش حساب بودن شما پس از طی مراحل اداری حدودا از ۴ روز تا ۱ هفته شایدم بیشتر اطلاعات درگاه براتون ایمیل میشه که شامل شماره ترمینال یوزرنیم و پسورد هستش که در مراحل بعد در کد نویسی آموزش اتصال به درگاه بانک ملت php استفاده خواهیم کرد.
اتصال به درگاه بانک ملت php
برنامه نویسی درگاه با توجه به نیاز به استفاده از توابع Soap در PHP کاری بسیار چالش برانگیز بوده، زیرا این تابع در نسخه های مختلف PHP رفتار متفاوتی را از خود نشان می دهد.
به منظور استفاده هرچه راحتر یک نمونه کد ” اتصال به درگاه بانک ملت php ” برای ارسال تراکنش به بانک و یک نمونه کد برسی تراکنش بعد از برگشت از بانک نوشتم که کار شما رو تا حد زیادی راحت میکنه
در آخر پروژه فایل nusoap برای اتصال به بانک را برای دانلود قرار دادیم
index.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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<?php include_once('lib/nusoap.php'); $terminalId = "0000000"; // Terminal ID $userName = "xxxxxxx"; // Username $userPassword = "0000000"; // Password $orderId = time(); // Order ID $amount = "1000"; // Price / Rial $localDate = date('Ymd'); // Date $localTime = date('Gis'); // Time $additionalData = ''; $callBackUrl = "http://name.ir/verify.php"; // Callback URL $payerId = 0; //-- تبدیل اطلاعات به آرایه برای ارسال به بانک $parameters = array( 'terminalId' => $terminalId, 'userName' => $userName, 'userPassword' => $userPassword, 'orderId' => $orderId, 'amount' => $amount, 'localDate' => $localDate, 'localTime' => $localTime, 'additionalData' => $additionalData, 'callBackUrl' => $callBackUrl, 'payerId' => $payerId); $client = new nusoap_client('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl'); $namespace='http://interfaces.core.sw.bps.com/'; $result = $client->call('bpPayRequest', $parameters, $namespace); //-- بررسی وجود خطا if ($client->fault) { //-- نمایش خطا echo "There was a problem connecting to Bank"; exit; } else { $err = $client->getError(); if ($err) { //-- نمایش خطا echo "Error : ". $err; exit; } else { $res = explode (',',$result); $ResCode = $res[0]; if ($ResCode == "0") { //-- انتقال به درگاه پرداخت echo '<form name="myform" action="https://bpm.shaparak.ir/pgwchannel/startpay.mellat" method="POST"> <input type="hidden" id="RefId" name="RefId" value="'. $res[1] .'"> </form> <script type="text/javascript">window.onload = formSubmit; function formSubmit() { document.forms[0].submit(); }</script>'; exit; } else { //-- نمایش خطا echo "Error : ". $result; exit; } } } ?> |
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<?php if ($_POST['ResCode'] == '0') { //--پرداخت در بانک باموفقیت بوده include_once('lib/nusoap.php'); $client = new nusoap_client('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl'); $namespace='http://interfaces.core.sw.bps.com/'; $terminalId = "0000000"; // Terminal ID $userName = "xxxxxxx"; // Username $userPassword = "0000000"; // Password $orderId = $_POST['SaleOrderId']; // Order ID $verifySaleOrderId = $_POST['SaleOrderId']; $verifySaleReferenceId = $_POST['SaleReferenceId']; $parameters = array( 'terminalId' => $terminalId, 'userName' => $userName, 'userPassword' => $userPassword, 'orderId' => $orderId, 'saleOrderId' => $verifySaleOrderId, 'saleReferenceId' => $verifySaleReferenceId); // Call the SOAP method $result = $client->call('bpVerifyRequest', $parameters, $namespace); if($result == '0') { //-- وریفای به درستی انجام شد٬ درخواست واریز وجه // Call the SOAP method $result = $client->call('bpSettleRequest', $parameters, $namespace); if($result == '0') { //-- تمام مراحل پرداخت به درستی انجام شد. //-- آماده کردن خروجی echo 'The transaction was successful'; } else { //-- در درخواست واریز وجه مشکل به وجود آمد. درخواست بازگشت وجه داده شود. $client->call('bpReversalRequest', $parameters, $namespace); echo 'Error : '. $result; } } else { //-- وریفای به مشکل خورد٬ نمایش پیغام خطا و بازگشت زدن مبلغ $client->call('bpReversalRequest', $parameters, $namespace); echo 'Error : '. $result; } } else { //-- پرداخت با خطا همراه بوده echo 'Error : '. $_POST['ResCode']; } ?> |
لیست ارورهای درگاه بانک ملت
Error | پیغام |
---|---|
۰ | تراکنش با موفقیت انجام شد |
۱۱ | شماره کارت نامعتبر است |
۱۲ | موجودی کافی نیست |
۱۳ | رمز نادرست است |
۱۴ | تعداد دفعات وارد کردن رمز بیش از حد مجاز است |
۱۵ | کارت نامعتبر است |
۱۶ | دفعات برداشت وجه بیش از حد مجاز است |
۱۷ | کاربر از انجام تراکنش منصرف شده است |
۱۸ | تاریخ انقضای کارت گذشته است |
۱۹ | مبلغ برداشت وجه بیش از حد مجاز است |
۲۱ | پذیرنده نامعتبر است |
۲۳ | خطای امنیتی رخ داده است |
۲۴ | اطلاعات کاربری پذیرنده نامعتبر است |
۲۵ | مبلغ نامعتبر است |
۳۱ | پاسخ نامعتبر است |
۳۲ | فرمت اطلاعات وارد شده صحیح نمی باشد |
۳۳ | حساب نامعتبر است |
۳۴ | خطای سیستمی |
۳۵ | تاریخ نامعتبر است |
۴۱ | شماره درخواست تکراری است |
۴۲ | یافت نشد Sale تراکنش |
۴۳ | قبلا درخواست Verify داده شده است |
۴۴ | درخواست Verfiy یافت نشد |
Error | پیغام |
---|---|
۴۵ | تراکنش Settle (تسویه) شده است |
۴۶ | تراکنش Settle (تسویه)نشده است |
۴۷ | تراکنش Settle یافت نشد |
۴۸ | تراکنش Reverse شده است |
۴۹ | تراکنش Refund یافت نشد |
۵۱ | تراکنش تکراری است |
۵۴ | تراکنش مرجع موجود نیست |
۵۵ | تراکنش نامعتبر است |
۶۱ | خطا در واریز |
۱۱۱ | صادر کننده کارت نامعتبر است |
۱۱۲ | خطای سوییچ صادر کننده کارت |
۱۱۳ | پاسخی از صادر کننده کارت دریافت نشد |
۱۱۴ | دارنده کارت مجاز به انجام این تراکنش نیست |
۴۱۲ | شناسه قبض نادرست است |
۴۱۳ | شناسه پرداخت نادرست است |
۴۱۴ | سازمان صادر کننده قبض نامعتبر است |
۴۱۵ | زمان جلسه کاری به پایان رسیده است |
۴۱۶ | خطا در ثبت اطلاعات |
۴۱۷ | شناسه پرداخت کننده نامعتبر است |
۴۱۸ | اشکال در تعریف اطلاعات مشتری |
۴۱۹ | تعداد دفعات ورود اطلاعات از حد مجاز گذشته است |
۴۲۱ | IP نامعتبر است |
محتوای فایل ZIP :
- دو نسخه هماهنگ با PHP ورژن های ۵٫۶ به پایین و ۷ به بالا در فولدر
/purePHP
وجود دارد. - کلاس آماده درگاه بانک ملت نیز در فولدر
/phpClass
قرار دارد که می تواند آن را در همه جای پروژه فقط با ساختن شی استفاده کنید (نحوه استفاده از این کلاس و یک فایل نمونه از آن همراه سورس کد قرار داده شده است). - نسخه مخصوص اتصال به درگاه بانک ملت برای فریموک لاراول نیز در فولدر
/Laravel
قرار دارد.
سلام دوست عزیز ممنون از پستی که ارسال کردید
ما یه مشکل خیلی بزرگ داریم و هفته هاس که حل نمیشه
ما از هر ۵ درخواست بانک ملت، ۴ تاشون توی مرحله بعد وارد کردن کارت بانکی، پیام زیر رو میده
خطای منتظره:
متاسفانه دسترسی شما به این صفحه امکان پذیر نمی باشد.
در صورت تمایل به پرداخت، از طریق یکی از فروشگاه های اینترنتی طرف قرارداد شرکت PSP اقدام نمائید.
واقعا نمیدونیم مشکل چیه
یکی در میون به مشکل میخوره و همینطور سشن رو هم از بین میبره کلا عشقی شده
ممنون میشم راهنمایی کنید
سلام خطا در مرحله وارد کردن شماره کارت در درگاه ملت یا شاپرک بوجود میاد؟ اگر بله که این باید به خود پشتیبانی ملت بگید چک کنن
سلام. منظور از ref id چی هست؟ ref مخففه چیه؟
سلام. reference یعنی کدی که با ان تراکنش پیگیری میشه
درود و عرض ادب
ببخشید من تمام پارامترها رو درست برای درگاه بانک ارسال می کنم، متأسفانه به جای اینکه وارد درگاه بشه که شماره کارت و … را وارد کنیم این ارور رو میده “شماره ارجاع ارسال نشده. با پذیرنده فروشگاه اینترنتی تماس بگیرید” در صورتی که من refId هم به درستی دارم ارسال می کنم. مشکل از چی می تونه باشه؟ ممنون
سلام. دقیقا از همین اسکریپت جداگانه استفاده کنید ببینید جواب میده بعد روی سورس خودتون تغییرات رو اعمال کنید
سلام استاد شرمنده هنوزم این درگاه کار می کند.
سلام. بله کار میکنه و مشکلی نیست
سلام و خسته نباشید
من با لاراول به مشکل برخوردم لطفا یه مثال ساده و کامل بدید ممنون میشم
سلام. ممنون
میتونید این پکیج رو برای لاراول نصب کنید
https://packagist.org/packages/tohidplus/mellat
سلام جناب شفیعی ممنون که راهنمایی میکنی
من از این پکیج استفاده کردم به بانک فرستادن مشکلی ندارم ولی نمیدونم روت paypalverify رو چطور تنظیم میکنم که بازگشتی این خطا رو میده:
The POST method is not supported for route paypalverify. Supported methods: GET, HEAD.
روتی که تنظیم کردم اینه:
Route::get(‘/paypalverify’, [SuddenlyController::class, ‘paypalverify ‘])->name(‘paypalverify’);
و کنترلی که نوشتم:
to(‘/paypalverify’));
Mellat::set(10000);
return Mellat::redirect(function($message){
// خطا هنگام ارجاع کاربر به درگاه بانکی
//dd($message);
});
}
public function paypalverify(Request $request)
{
return Mellat::verify(
function ($log){
// تراکنش موفق
//dd($log);
return ;
},function ($log){
// تراکنش ناموفق
//dd($log);
});
}
}
روت شما get هست و اشتباهه باید post باشه
Route::post(‘/paypalverify’, [SuddenlyController::class, ‘paypalverify ‘])->name(‘paypalverify’)
درخواست درگاه ملت
درخواست رو باید به خود سایت بانک ملت بدید نه اینجا
دریافت آی پی هاست
سلام. به هاستینگ خود اطلاع بدید
سلام. لینک برام ارسال نشد !!
سلام من همین توابع رو برای درگاه به پرداخت به کار بردم اما زمانی که پرداخت انجام میشه و به صفحه verify برمیگرده خطا ۵۰۰ میده میشه لطفا راهنمایی کنید؟
سلام. خطاهای ۵۰۰ مربوط به هاست شماست این کدها قبلا تست شدند و جوابشون رو پس دادند هرگونه ناسازگاری مربوط به هاسته
سلام-عالی بود کد ها
فقط مهندس جان
موقع پرداخت انجام شد و قتی که پیام داد
The transaction was successful
۲ مورد بسیار مهم کم داره
که بتونیم با اون دیتابیس اپدیت کنیم
۱-شماره ارجاع/پیگیری چه جوری نشون بدیم؟(چه کدی در صفحه ورفای بزاریم؟)
۲- شماره orderId و payerid از صفحه قبل چجوری تو این صفحه نشون بدیم(چه کدی در صفحه ورفای بزاریم؟)
سلام.
متغییر $verifySaleReferenceId کد پیگیری هستند که میتونید echo کنید و متغییر $orderId همان شماره سفارشی هست که هنگام ارجاع کاربر به درگاه باید با mt_rand ایجاد و در دیتابیس ذخیره می کردید که باز می تونید این متغییر رو echo کنید.
BankMellatpayment.php و BankMellatpaymentServiceProvider.php در کدام پوشه ها باید قرار گیرد؟
سلام
برای لاراول چطور باید استفاده بشه؟
پوشه رو دانلود کردم اما توضیحی نداره.
ممنون میشم راهنمایی کنید.
سلام. فایل README.md رو بخونید و همچنین از composer,json مقدار رو به فایل خود اضافه کنید و src هم کاملا مشخصه که به پکیج هاتون باید اضافه کنید
سلام وقت بخیر
ممنون از اموزش
یه سوال درگاه وقتی پرداخت رو میزنیم خوب کار میکنه !!
فقط یه مشکلی داریم اونم اینکه فاکتور ایجاد شده رو که بعدا میخوایم پرداخت کنیم خطای شماره درخواست تکراري است رو میده !! دلیلش از چی میتونه باشه ؟!
سلام. ممنون. خوشحالیم که مفید واقع شده.
احتمالا به خاطر شماره فاکتوری که در کد میزنید هست.
سلام. من درگاه گرفتم ولی خطای آی پی نامعتبر است میده. با به پرداخت تماس گرفتم، میگه order id رو بده. از کجا میتونم order id رو بیارم؟ سایت رو با قالب آماده درست کردم.
سلام. orderid که بصورت یکتا با تابع time ساخته میشه و مشکلی نداره. اگر آیپی نامعتبر میزنه پس حتما آیپی سرور رو درست بهشون معرفی نکردید.
از هاستینگ آیپی سرور برای درگاه رو درخواست کنید و بعد به پشتیبان به پرداخت بدید تا آپدیت کنند.
سلام ممنون از راهنمایی شما. ممکنه بگید ترمینال آیدی و Payer آیدی چی هستند اینجا؟
سلام. خواهش می کنم.
ترمینال آیدی از سمت بانک ارایه می شود و payerid هم میتونید صفر بزارید یا اگر کاربر لاگین شده هست میتونید آیدی کاربر در دیتابیس را اینجا قرار بدید.
موفق باشید.