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

در اين بخش مي‌توانيد در مباحث مربوط به برنامه نويسي تحت وب به بحث بپردازيد

مدیران انجمن: athlon64x2, abbas.m.k, شوراي نظارت, athlon64x2, abbas.m.k, شوراي نظارت

ارسال پست
New Member
پست: 3
تاریخ عضویت: یک شنبه 15 تیر 1393, 4:58 pm
سپاس‌های دریافتی: 7 بار
تماس:

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

پست توسط maryamsitedar » یک شنبه 5 مرداد 1393, 10:43 am

[FONT=Tahoma, Geneva, sans-serif]  [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]     [FONT=Tahoma, Geneva, sans-serif]برنامه نویسی درگاه با توجه به نیاز به استفاده از توابع Soap در PHP کاری بسیار چالش برانگیز بوده، زیرا این تابع در نسخه های مختلف PHP رفتار متفاوتی را از خود نشان می دهد. شرکت پرداخت بانک ملت کد نمونه ای را جهت اتصال به سرور پرداخت آنلاین که با استفاده از کتابخانه [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] ارائه نموده که در سرورهایی با نسخه PHP 5.3 به بالا به مشکل بر می خورد. در بخش زیر نحوه برنامه نویسی درگاه پرداخت آنلاین توسط تابع [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] که از توابع داخلی PHP بوده را برای شما بیان می نمایم. قبل از هر چیز دقت نمایید این تابع در تنظیمات PHP فعال شده باشد . در صورت عدم فعال سازی با سرور خود تماس حاصل فرمایید. 
[FONT=Tahoma, Geneva, sans-serif]برای ارسال درخواست خود فرم پرداخت آنلاین را که شامل فیلدهای موجود در بخش دریافت اطلاعات از کاربر در کد زیرین می باشد ایجاد نمایید. 
[FONT=Tahoma, Geneva, sans-serif]* دقت نمایید جهت پرداخت آنلاین از طریق بانک ملت می بایست قبل از ارسال کاربر به صفحه پرداخت درخواست خود را از طریق SOAP به سرور ارسال نموده و تایید درخواست خود را بگیرید. برای انجام این کار از کد SoapClient استفاده می نماییم: 
[FONT=Tahoma, Geneva, sans-serif][LEFT !IMPORTANT][HIGHLIGHT=#f3f3f3]try {
$client = @new SoapClient('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl');
} catch (Exception $e) {
die($e->getMessage());
} [/LEFT !IMPORTANT] [FONT=Tahoma, Geneva, sans-serif]پس از اتصال به سرور پرداخت آنلاین و عدم بروز خطا می بایست درخواست خود را به سرور ارسال نمایید. برای انجام این کار از کد زیر استفاده می نمایید: 
[FONT=Tahoma, Geneva, sans-serif][LEFT !IMPORTANT][HIGHLIGHT=#f3f3f3]// دریافت اطلاعات از کاربر
$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);
 [/LEFT !IMPORTANT] [FONT=Tahoma, Geneva, sans-serif]تابع bpPayRequest کار ارسال درخواست پرداخت به سرور را انجام می دهد که در صورتی که برگشتی این تابع 0 باشد به آن معنی می باشد که پرداخت قابل انجام می باشد و در صورت برگشتی هر عددی به جز 0 به آن معنا بوده که خطایی در انجام پرداخت وجود دارد. برای چک نمودن مقدار برگشتی تابع bpPayRequest از کد زیر استفاده نمایید: 
[FONT=Tahoma, Geneva, sans-serif][LEFT !IMPORTANT][HIGHLIGHT=#f3f3f3]$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
}
}
 [/LEFT !IMPORTANT] [FONT=Tahoma, Geneva, sans-serif]در کد بالا ResCode بخش اول خروجی تابع bpPayRequest می باشد که در صورتی که این عدد 0 باشد به آن معناست که پرداخت قابل انجام می باشد و می بایست کاربر را به سمت سرور انتقال دهید. برای انتقال کاربر به سرور از کد جاوا اسکریپت زیر استفاده نمایید که این کد می بایست در HTML صفحه پرداخت قرار داده شود: 
[FONT=Tahoma, Geneva, sans-serif] 
[FONT=Tahoma, Geneva, sans-serif][LEFT !IMPORTANT][HIGHLIGHT=#f3f3f3]<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>
 [/LEFT !IMPORTANT] [FONT=Tahoma, Geneva, sans-serif]تابع جاوا اسکریپت بالا کاربر را به صفحه پرداخت بانک ملت هدایت می نماید. پس از اینکه کاربر در صفحه پرداخت بانک ملت عملیات پرداخت را انجام نمود دوباره به سایت شما بازگشت داده خواهد شد. کاربر به صفحه ای بازگشت داده خواهد شد که شما در متغیر callBackUrl در مرحله قبل به سرور اعلام نموده اید. درگاه پرداخت بانک ملت 4 پارامتر را به صورت POST به آدرس callBackUrl وب سایت شما ارسال می نماید که این چهار متغیر شامل موارد زیر می باشند. 
[FONT=Tahoma, Geneva, sans-serif] 
[FONT=Tahoma, Geneva, sans-serif][LEFT !IMPORTANT][HIGHLIGHT=#f3f3f3]$RefId = $_POST['RefId'];
$ResCode = $_POST['ResCode'];
$saleOrderId = $_POST['SaleOrderId'];
$SaleReferenceId = $_POST['SaleReferenceId']; [/LEFT !IMPORTANT] [FONT=Tahoma, Geneva, sans-serif]در صورتی که مقدار متغیر [LEFT !IMPORTANT][HIGHLIGHT=#f3f3f3] [/LEFT !IMPORTANT] عددی جز 0 باشد به این معناست که خطایی در پرداخت رخ داده و می توانید کار را ادامه ندهید. در صورتی که مقدار [LEFT !IMPORTANT][HIGHLIGHT=#f3f3f3] [/LEFT !IMPORTANT] برابر با 0 باشد می بایست پرداخت را تایید نمایید. 
[FONT=Tahoma, Geneva, sans-serif] 
[FONT=Tahoma, Geneva, sans-serif][LEFT !IMPORTANT][HIGHLIGHT=#f3f3f3]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
}
}

 [/LEFT !IMPORTANT] [FONT=Tahoma, Geneva, sans-serif]در کد بالا تابع bpVerifyRequest عملیات تایید پرداخت را انجام می دهد و در صورتی که خروجی آن نیز 0 باشد می توانید وجه را از حساب کاربر با دستور bpSettleRequest به حساب خود منتقل نمایید. متغیر paymentdone زمانی برابر با done قرار داده می شود که پرداخت به درستی انجام شده باشد و واریز وجه به حساب شما انجام شده باشد. دقت نمایید ممکن است عملیات واریز وجه به حساب شما چندین ساعت طول بکشد. در بخش پایین همچنین آموزشی شرکت [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] را برای شما ضمیمه کردم تا بتوانید توضیحات بیشتر را مطالعه نمایید. در صورت وجود مشکل و یا سوال لطفا موارد را در بخش نظرات اعلام نمایید. 
[FONT=Tahoma, Geneva, sans-serif]آدرس: 

[FONT=Tahoma, Geneva, sans-serif][لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]   
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

Captain
Captain
پست: 2755
تاریخ عضویت: چهار شنبه 18 بهمن 1385, 12:46 pm
محل اقامت: شیراز
سپاس‌های ارسالی: 22364 بار
سپاس‌های دریافتی: 5559 بار

Re: طراحی وب و برنامه نویسی درگاه پرداخت آنلاین بانک ملت در

پست توسط Present » سه شنبه 7 مرداد 1393, 8:50 am

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

گــــــــــــــــاهی تــــــــــــــاوان شیــــــــــر بودن قـــفس اســـت ...
امــــــــا شـــــغال هــــا در شـــــهــــر آزاد مـــــیگـــــــردنــــــــــد ... !

به زودی تعمیرکار لب تاپ می شم :-)

ارسال پست

بازگشت به “Web Programming”