برنامه نویسی درگاه پرداخت آنلاین بانک ملت در PHP برنامه نویسی درگاه پرداخت آنلاین بانک ملت در PHP

رتبه این آیتم
برنامه نویسی درگاه پرداخت آنلاین بانک ملت در PHP
رتبه 4 در 35 رای از 1 تا 5

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

برنامه نویسی درگاه با توجه به نیاز به استفاده از توابع Soap در PHP کاری بسیار چالش برانگیز بوده، زیرا این تابع در نسخه های مختلف PHP رفتار متفاوتی را از خود نشان می دهد. شرکت پرداخت بانک ملت کد نمونه ای را جهت اتصال به سرور پرداخت آنلاین که با استفاده از کتابخانه NuSOAP ارائه نموده که در سرورهایی با نسخه PHP 5.3 به بالا به مشکل بر می خورد. در بخش زیر نحوه برنامه نویسی درگاه پرداخت آنلاین توسط تابع SoapClient که از توابع داخلی PHP بوده را برای شما بیان می نمایم. قبل از هر چیز دقت نمایید این تابع در تنظیمات PHP فعال شده باشد . در صورت عدم فعال سازی با سرور خود تماس حاصل فرمایید.

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

* دقت نمایید جهت پرداخت آنلاین از طریق بانک ملت می بایست قبل از ارسال کاربر به صفحه پرداخت درخواست خود را از طریق SOAP به سرور ارسال نموده و تایید درخواست خود را بگیرید. برای انجام این کار از کد SoapClient استفاده می نماییم:

try {
$client = @new SoapClient('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl');
} catch (Exception $e) {
die($e->getMessage());
}

پس از اتصال به سرور پرداخت آنلاین و عدم بروز خطا می بایست درخواست خود را به سرور ارسال نمایید. برای انجام این کار از کد زیر استفاده می نمایید:

// دریافت اطلاعات از کاربر

$namespace='http://interfaces.core.sw.bps.com/';
$terminalId = $_POST['TerminalId'];
$userName = $_POST['UserName'];
$userPassword = $_POST['UserPassword'];
$orderId = filter_var($_POST['PayOrderId'], FILTER_SANITIZE_NUMBER_INT);
$amount = $_POST['PayAmount'];
//$date = date("YYMMDD");
//$time = date("HHIISS");
$localDate = $_POST['PayDate'];
$localTime = $_POST['PayTime'];
$additionalData = $_POST['PayAdditionalData'];
$callBackUrl = $_POST['PayCallBackUrl'];
$payerId = $_POST['PayPayerId'];

// قرار دادن پارامترها در یک آرای
$parameters = array(
'terminalId' => $terminalId,
'userName' => $userName,
'userPassword' => $userPassword,
'orderId' => $orderId,
'amount' => $amount,
'localDate' => $localDate,
'localTime' => $localTime,
'additionalData' => $additionalData,
'callBackUrl' => $callBackUrl,
'payerId' => $payerId);


// ارسال درخواست پرداخت به سرور بانک
$result = $client->bpPayRequest($parameters, $namespace);

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

$res = @explode (',',$resultStr);
if(is_array($res)){

echo "<script>alert('Pay Response is : " . $resultStr . "');</script>";
echo "Pay Response is : " . $resultStr;

$ResCode = $res[0];

if ($ResCode == "0") {
// Update table, Save RefId
echo "<script language='javascript' type='text/javascript'>postRefId('" . $res[1] . "');</script>";
}
else {
// log error in app
// Update table, log the error
// Show proper message to user
}
}

در کد بالا ResCode بخش اول خروجی تابع bpPayRequest می باشد که در صورتی که این عدد 0 باشد به آن معناست که پرداخت قابل انجام می باشد و می بایست کاربر را به سمت سرور انتقال دهید. برای انتقال کاربر به سرور از کد جاوا اسکریپت زیر استفاده نمایید که این کد می بایست در HTML صفحه پرداخت قرار داده شود:

<script language="javascript" type="text/javascript">
function postRefId (refIdValue) {
var form = document.createElement("form");
form.setAttribute("method", "POST");
form.setAttribute("action", "https://bpm.shaparak.ir/pgwchannel/startpay.mellat");
form.setAttribute("target", "_self");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("name", "RefId");
hiddenField.setAttribute("value", refIdValue);
form.appendChild(hiddenField);

document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
</script>

تابع جاوا اسکریپت بالا کاربر را به صفحه پرداخت بانک ملت هدایت می نماید. پس از اینکه کاربر در صفحه پرداخت بانک ملت عملیات پرداخت را انجام نمود دوباره به سایت شما بازگشت داده خواهد شد. کاربر به صفحه ای بازگشت داده خواهد شد که شما در متغیر callBackUrl در مرحله قبل به سرور اعلام نموده اید. درگاه پرداخت بانک ملت 4 پارامتر را به صورت POST به آدرس callBackUrl وب سایت شما ارسال می نماید که این چهار متغیر شامل موارد زیر می باشند.

$RefId = $_POST['RefId'];
$ResCode = $_POST['ResCode'];
$saleOrderId = $_POST['SaleOrderId'];
$SaleReferenceId = $_POST['SaleReferenceId'];

در صورتی که مقدار متغیر ResCode عددی جز 0 باشد به این معناست که خطایی در پرداخت رخ داده و می توانید کار را ادامه ندهید. در صورتی که مقدار ResCode برابر با 0 باشد می بایست پرداخت را تایید نمایید.

if($ResCode==0){

try {
$client = @new SoapClient('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl');
} catch (Exception $e) {
die($e->getMessage());
}

$namespace='http://interfaces.core.sw.bps.com/';

$terminalId = terminalid;
$userName = "username";
$userPassword = "password";


$parameters = array(
'terminalId' => $terminalId,
'userName' => $userName,
'userPassword' => $userPassword,
'orderId' => $saleOrderId,
'saleOrderId' => $saleOrderId,
'saleReferenceId' => $SaleReferenceId);
$result = $client->bpVerifyRequest($parameters, $namespace);

$resultStr = $result->return;
$res = @explode (',',$resultStr);
if(is_array($res)){

echo "<script>alert('Pay Response is : " . $resultStr . "');</script>";
//echo "Pay Response is : " . $resultStr;

$ResCode = $res[0];

if ($ResCode == "0") {
// Update table, Save RefId
$resultsettle = $client->bpSettleRequest($parameters, $namespace);
$resultStrsettle = $resultsettle->return;
$ressettle = @explode (',',$resultStrsettle);
$ResCodesettle = $ressettle[0];
if ($ResCodesettle == "0") {
$paymentdone="done";
}
}
else {
// log error in app
// Update table, log the error
// Show proper message to user
}
}

در کد بالا تابع bpVerifyRequest عملیات تایید پرداخت را انجام می دهد و در صورتی که خروجی آن نیز 0 باشد می توانید وجه را از حساب کاربر با دستور bpSettleRequest به حساب خود منتقل نمایید. متغیر paymentdone زمانی برابر با done قرار داده می شود که پرداخت به درستی انجام شده باشد و واریز وجه به حساب شما انجام شده باشد. دقت نمایید ممکن است عملیات واریز وجه به حساب شما چندین ساعت طول بکشد. در بخش پایین همچنین آموزشی شرکت به پرداخت ملت را برای شما ضمیمه کردم تا بتوانید توضیحات بیشتر را مطالعه نمایید. در صورت وجود مشکل و یا سوال لطفا موارد را در بخش نظرات اعلام نمایید.

24-خرداد-1397

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

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

به اشتراک گذاری مطلب در

به اشتراک گذاری در فیس بوک به اشتراک گذاری در توئیتر به اشتراک گذاری در لینکدین

25 نظر

  • حسین کلهری دوشنبه, 27 فروردين 1397 10:01 پست شده توسط حسین کلهری

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

  • آموزش برنامه نویسی شنبه, 27 آبان 1396 08:09 پست شده توسط آموزش برنامه نویسی

    من رشتم کامپوتر نیست از کجا شروع کنم

  • سعید پنج شنبه, 27 مهر 1396 05:27 پست شده توسط سعید

    داداش قسمت اولش درسته ... اما با جاوااسکریپت نمیشه وصل شد ... ما که هر کاری کردیم نشد ... ممکنه یه فایل تست و نمونه بزارید ممنون

  • حسینی یکشنبه, 19 شهریور 1396 12:29 پست شده توسط حسینی

    سلام تو و open cart کدوم قسمت باید بریم برای وارد کردن این کدها باتشکر

  • بهجوش یکشنبه, 19 دی 1395 11:10 پست شده توسط بهجوش

    سلام عالی بود ممنون

  • آرش پنج شنبه, 18 شهریور 1395 19:54 پست شده توسط آرش

    کلا جواب هیشکیو نمیدی دمت گرم :-)))

  • هادی دوشنبه, 25 مرداد 1395 14:55 پست شده توسط هادی

    سلام مطلب عالی و بسیار مفید می باشد. یک سوال از خدمتتون داشتم بعد از اجرای دستور bpPayRequest ، عدد 31 را بر می گرداند که در جدول ارورها به معنی "پاسخ نامعتبر است" می باشد. میشه لطفا راهنمایی بفرمائید این ارور به چه چیزی اشاره دارد تا مشکل را برطرف کنم. ممنون از شما همکار گرامی

  • نوشین یکشنبه, 09 خرداد 1395 13:50 پست شده توسط نوشین

    سلام..من برای سایتم میخوام اینطوری باشه: باید بشه یه دکمه بزنه بره به صورت حساب بعد از اون یه دکمه بزنه بره به درگاه پرداخت(فرقی نمیکنه چه بانکی .ارزونتر بهتر) پرداخت کنه و بعد با یه دکمه برگرده به سایت و یه پیام هم به شکله پنهان که کاربر نبینه فقط ما بتونیم ازش استفاده کنیم بیاد که پرداخت انجام شده حالا این پیام میتونه 0 و 1 هم باشه مهم نیس بعد از برگشت بگه پرداخت شد یا نه برا ایمیلم بفرستین بی زحمت..هزینه شم بگید .مرسی از سایت خوبتون هرکسی تونست کمک کنه بگه لطفا ،عجله دارم

  • http://puyeshgaran.com/ پنج شنبه, 16 ارديبهشت 1395 15:39 پست شده توسط http://puyeshgaran.com/

    سلام خیلی ممنون از توضیحاتتون ولی کاش نسخه نهایی رو هم قرار می دادید باتشکر

  • اولی پنج شنبه, 02 ارديبهشت 1395 11:31 پست شده توسط اولی

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

  • تلگرام چهارشنبه, 11 فروردين 1395 10:49 پست شده توسط تلگرام

    سلام اینا با سیستم شاپرک هم کار میکنه ؟

  • امیرمحمد دوشنبه, 19 بهمن 1394 11:35 پست شده توسط امیرمحمد

    درود . مهندس با این حساب کد back که شما قرار دادین خودش ستل هم میزنه دیگه ؟ نیازی نیست که ما ستل کنیم ؟

  • محمد محمد دوشنبه, 13 بهمن 1393 12:51 پست شده توسط محمد محمد

    با سلام خدمت برادر عزیزم. من با مسئول انفورماتیک درگاه بانک ملت صحبت کردم گفت اصلا ستل اتوماتیک غیرغانونیه و فقط برای هواپیمایی ها و شرکتهایی از این دست قابل استفاده است. گفتند که فقط از یه طریق میشه ستل رو اجرا کرد اون هم از طریق پیاده سازی تابع ستل در فایل کانفیگ هستش. لطفا راهنمایی بفرمایید که چطور باید این تابع رو نوشت و در کدوم فایل سایت باید تغییرات لازم رو اعمال کرد. اگر خودتون می تونید این کار رو انجام بدید لطفا پاسخ این پیام رو برای من ایمیل کنید و منو از نحوه انجام کار و هزینه ای که باید تقدیم کنم آگاه بفرمایید. بسیار ممنونم ------------------------ با سلام، من منظور شما رو از ستل اتوماتیک متوجه نمیشم

  • Mr.azargoon یکشنبه, 21 دی 1393 18:18 پست شده توسط Mr.azargoon

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

  • زهرا احمدی پنج شنبه, 04 دی 1393 20:03 پست شده توسط زهرا احمدی

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

  • رضا سید احمدپور یکشنبه, 25 آبان 1393 11:30 پست شده توسط رضا سید احمدپور

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

  • esmail پنج شنبه, 15 آبان 1393 14:00 پست شده توسط esmail

    ممنون از شما

  • esi یکشنبه, 11 آبان 1393 16:15 پست شده توسط esi

    با سلام هزینه ساخت یک درگاه بانک ملت برای یک فروشگاه چقدر است؟ ---------------------------------- با سلام، 500 هزار تومان هزینه اتصال فروشگاه اینترنتی به درگاه پرداخت آنلاین می باشد

  • lمهدی جمعه, 02 آبان 1393 02:50 پست شده توسط lمهدی

    سلام، من برای فروشگاهم یه درگاه پرداخت بانک ملت می خوام ! شما میتونید بسازید برام ؟! هزینشم میدم ! لطفا با ایمیلم در تماس باشید ------------------------------- به ایمیل شما ارسال شد

  • mahdipar2012 یکشنبه, 30 شهریور 1393 21:55 پست شده توسط mahdipar2012

    با سلام متغیر $namespace چیکار میکنه اجباریه یا اختباری حتماً با همین مقداری که شما set کردین باید set بشه ممنون لطفا جواب رو به ایمیلم سند کنید

  • star سه شنبه, 18 شهریور 1393 03:05 پست شده توسط star

    سلام، می شه یک Sample از این آموزشتون جهت دانلود قرار دهید. آموزش فوق العاده ای هست.

  • جابرانصاری چهارشنبه, 05 شهریور 1393 15:48 پست شده توسط جابرانصاری

    سلام من اولین بارم هست که دارم فروشگاه اینترنتی راه اندازی می کنم. میشه لطفا من را راهنمایی کنید که هر یک از این کدها را باید در کجای وب سایتم قرار دهم؟ وقتی مشتری دکمه پرداخت را می زند باید action آن صفحه ای باشد که تمام این کدها در آن صفحه قرار گرفته باشد؟ با تشکر ----------------------- برنامه نویسی درگاه پرداخت بسیار پیچیده می باشد و پیاده سازی آن برای مبتدیان امکان پذیر نیست

  • خسرو پنج شنبه, 02 مرداد 1393 22:30 پست شده توسط خسرو

    پس از دریافت refid , hash code برنامه به صورت اتومات به صفحه پرداخت نمی رود بااینکه refid =0 است چه تغییری در برنامه صفحه deafault.php لازم است؟ اگر ایمیل کنید ممنون می شوم iranexpo@yahoo.com

  • محمدجفر سه شنبه, 10 تیر 1393 19:30 پست شده توسط محمدجفر

    بسیار بسیار ممنونم از آموزش فوقالعادتون لطفا برای سایر بانک ها هم آموزش ها رو تهیه بفرمایید. فقط یه مورد و اون اینکه فکر میکنم توی اون اسکریپتی که نوشتید واسه ارسال RefId یه بار بعدش باید تابعش رو اجرا کنیم تا اسکریپت انجام شه،درسته؟ -------------------------------------- RefId وقتی داده می شود که اسکریپت اجرا گردد

  • م شهبالی سه شنبه, 10 تیر 1393 15:53 پست شده توسط م شهبالی

    سلام عالی بود ممنون فقط اینکه پس از فراخوانی تابع bpPayRequest متغییر $resultStr رو جا انداختید. همچنین اگر فرصت داشتید در مورد حالت های خطا هم نمونه کد بنویسید. ممنون

يک نظر بدهيد

موارد ستاره دار الزامی هستند

طراحی سایت دارکوب | هاست دارکوب | دارکوب نام و علامت تجاری ثبت شده این مجموعه می باشد.
دارای مجوز از (سازمان نظام صنفی رایانه ای استان تهران) ، (رتبه 4 شورای عالی انفورماتیک کشور) ، (وزارت فرهنگ و ارشاد اسلامی)
آموزشگاه طراحی سایت و سئو با مجوز رسمی از سازمان فنی و حرفه ای کشور افتتاح شد
دارکوب به عنوان شرکت خلاق توسط معاونت علمی و فناوری ریاست جمهوری برگزیده شد