طبق اعلام خود بانک، سیستم به پرداخت گویا موقتاً قطعه. بخاطر اختلالاتی که اخیراً توی سیستم SSL در ایران پیش اومده.
Printable View
طبق اعلام خود بانک، سیستم به پرداخت گویا موقتاً قطعه. بخاطر اختلالاتی که اخیراً توی سیستم SSL در ایران پیش اومده.
هرچند که کدتور رو قرار ندادین ولی احتمالا باید این:
https://pgws.bpm.bankmellat.ir:443/pgwchannel/services/pgw?wsdl
رو به این تبدیل کنید:
https://pgwsf.bpm.bankmellat.ir:443/pgwchannel/services/pgw?wsdl
ولی پرداخت های ما مشکلی ندارند.نقل قول:
طبق اعلام خود بانک، سیستم به پرداخت گویا موقتاً قطعه. بخاطر اختلالاتی که اخیراً توی سیستم SSL در ایران پیش اومده.
این هم کد :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
date_default_timezone_set('Asia/Tehran');
?>
<html>
<head>
<meta http-equiv="Content-Language" content="fa">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>.: آسان پرداخت :.</title>
<link href="Css/Style.css" rel="stylesheet" type="text/css" />
<script language="javascript" type="text/javascript">
function postRefId (refIdValue) {
var form = document.createElement("form");
form.setAttribute("method", "POST");
form.setAttribute("action", "https://pgw.bpm.bankmellat.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>
</head>
<body>
<form name="form1" method="post" preservedata="true">
<div style="text-align:center; direction:ltr; font:bold 14px/28px tahoma; direction:rtl">
مبلغ تراکنش (به ريال):<br>
<input type="text" name="PayAmount" style="width:300px; padding:6px 5px; font:bold 28px Tahoma; color:#ad0000; direction:ltr; border:1px solid #ad0000">
<br>
<input type="submit" CssClass="PublicButton" name="PayRequestButton" value="ارسال" style="padding:6px 30px; font:bold 20px Tahoma; color:#fff; background:#ad0000"/>
</div>
</form>
</body>
<?php
require_once("lib/nusoap.php");
//curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
//$page = curl_exec ($ch);
$client = new nusoap_client('https://pgws.bpm.bankmellat.ir:443/pgwchannel/services/pgw?wsdl');
$namespace='http://interfaces.core.sw.bps.com/';
///////////////// PAY REQUEST
if (isset($_POST['PayRequestButton']))
{
$terminalId = '؟؟؟؟؟؟؟';
$userName = '؟؟؟؟؟؟';
$userPassword = '؟؟؟؟؟؟؟';
$orderId = rand();
$amount = $_POST['PayAmount'];
$localDate = date("Ymd");
$localTime = date("His");
$additionalData = '';
$callBackUrl = 'http://pay.manahost.ir/Bank/callback.php';
$payerId = 0;
// Check for an error
$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
die();
}
$parameters = array(
'terminalId' => $terminalId,
'userName' => $userName,
'userPassword' => $userPassword,
'orderId' => $orderId,
'amount' => $amount,
'localDate' => $localDate,
'localTime' => $localTime,
'additionalData' => $additionalData,
'callBackUrl' => $callBackUrl,
'payerId' => $payerId);
// Call the SOAP method
$result = $client->call('bpPayRequest', $parameters, $namespace);
// Check for a fault
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
die();
}
else {
// Check for errors
$resultStr = $result;
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Error</h2><pre>' . $err . '</pre>';
die();
}
else {
// Display the result
$res = explode (',',$resultStr);
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
}
}// end Display the result
}// end Check for errors
}
?>
</html>
خب حتما آی پی که به شرکت به پرداخت دادین با آی پی فعلی سرورتون یکی نیست. چک کنید.نقل قول:
این کار رو انجام دادم میگه ای پی معتبر نیست .
پاسخ دریافت شده از بانک ملت اینه که آی پی مشکل داره. پس شما باید با خود بانک صحبت کنید کسی نمیتونه کمکی کنه چونکه مربوط به پاسخ دریافت شده از بانک هست.نقل قول:
آی پی رو مطمئنم درست دادم ...
الان این ارور رو میده : با کدی که شما دادین
HTTP Error: cURL ERROR: 28: SSL connection timeout
url: https://pgwsf.bpm.bankmellat.ir:443/pgwchannel/services/pgw
content_type:
http_code: 0
header_size: 0
request_size: 0
filetime: -1
ssl_verify_result: 0
redirect_count: 0
total_time: 1.721738
namelookup_time: 0.464276
connect_time: 1.721799
pretransfer_time: 0
size_upload: 0
size_download: 0
speed_download: 0
speed_upload: 0
download_content_length: -1
upload_content_length: -1
starttransfer_time: 0
redirect_time: 0
certinfo: Array
redirect_url:
به به پرداخت ایمیل زدم ببینم چی میگن ... حالا تا شنبه باید صبر کنم ببینم چی میشه .
ممنون بایت اینکه پاسخ سوالاتمو دادین .
با تشکر
با تشکر ...
مشکل از آی پی بود که حل شد ...
چند سوال کلی و عمومی دارم ...
1- امکان تعریف چند IP برای یک درگاه وجود دارد ؟
2- امکان درخواست چند درگاه برای یک حساب چطور ؟
دو تا سایت دارم که نیاز به درگاه بانک دارم ... که بطور مستقل کار میکنن ... جواب تلفن رو که به پرداخت نمیده ... گفتم از تجربیات دوستان استفاده کنم و بپرسم .
ممنون
سلام
خطای 418 رو چطور می تونم برطرف کنم ،
اشكال در تعريف اطلاعات مشتري 418
از اسکریپت نمونه خود بانک استفاده می کنم .
ممنون دوستان
دوستان ممنون میشم خطای 418 و21 را توضیح بدین..؟
من قبلا در چندین سایت از پرداخت الکترونیک به روش soap استفاده کردم
نموه زیر یکی از اونهاست.
<?php
include 'class/modelslist.php';
$MerchantID = 'secret';
$Password = 'secret';
if (isset($_REQUEST['openpay']))
{
$ReturnPath = 'http://kaniaw.ir/verify.html?openpay';
}
else { $ReturnPath = 'http://kaniaw.ir/verify.html'; }
$ResNumber = $_REQUEST['orderid'];// Order Id In Your System
$Price = $_REQUEST['price']; //Price As Toman
$Description = $_REQUEST['discrib'];
$Paymenter = $_REQUEST['name'];
$Email = $_REQUEST['email'];
$Mobile = $_REQUEST['phone'];
$client = new SoapClient('http://merchant.parspal.com/WebService.asmx?wsdl');
$res = $client->RequestPayment(array("MerchantID" => $MerchantID , "Password" =>$Password , "Price" =>$Price, "ReturnPath" =>$ReturnPath, "ResNumber" =>$ResNumber, "Description" =>$Description, "Paymenter" =>$Paymenter, "Email" =>$Email, "Mobile" =>$Mobile));
$PayPath = $res->RequestPaymentResult->PaymentPath;
$Status = $res->RequestPaymentResult->ResultStatus;
if($Status == 'Succeed')
{
if (isset($_REQUEST['openpay']))
{
$temp=new temppayment();
$temp->datamembers=array(
oid=>$ResNumber,
price=>$Price
);
$temp->save();
}
echo "<html><head><title>Connecting ....</title><meta charset='utf-8'><head><body onload=\"javascript:window.location='$PayPath'\" style=\"font-family:tahoma; text-align:center;font-waight:bold;direction:rtl\">درحال اتصال به درگاه پرداخت پارس پال ...</body></html>";
}
else
{
echo "<p>خطای زیر روی داده است.</p></br>".$Status;
}
?>
منم تازه دارم درگاه بانک ملت رو نصب می کنم. توی فایل راهنماشون چند بار از saleOrderId , SaleReferenceId و orderId استفاده کردن که کمی مبهم هست.
برای ارسال درخواست باید orderId یکتا برای بانک بفرستیم که احتمالا با استفاده از تابع rand این کار رو می شه انجام داد
موقع برگشت از بانک saleOrderId برگردونده می شه
موقع تایید پرداخت به orderId و saleOrderId نیاز هست
پس از تایید و برای درخواست واریز باید دوباره orderId و saleOrderId رو برای بانک بفرستید.
سوالم اینه که:
1- در مرحله تایید پرداخت orderId و saleOrderId رو چطور ایجاد کنم و برای بانک بفرستم؟
2- در مرحله درخواست واریز orderId و saleOrderId رو چطور ایجاد کنم و برای بانک بفرستم؟
3- عدد saleReferenceId که بغیر از مرحله اول در بقیه مراحل وجود داره آیا یکسانه یا تغییر می کنه؟
این عدد نباید به هیچ وجه رندوم باشه و باید به صورت یکتا در سیستم برنامه شما ایجاد بشه و برای بانک ارسال بشه. شما قبل از راه اندازی به صورت واقعی برای مشتری باید برای بانک درخواست تست ارسال کنید حتی در این مرحله هم باید اعداد واقعی بفرستید یعنی وقتی بانک اجازه راه اندازی به صورت نهایی به شما داد باید اعدادی که می فرستید اعداد زمان تست نباشه
این عدد برای هر درخواستی که شما به سمت بانک ارسال می کنید باید یکتا باشه برای همین نباید رندوم باشه
برای بقیه سوال هاتون هم به بانک زنگ بزنید از همه بهتر راهنماییتون می کنند. برای هر قرارداد یک کارمند مخصوص داره که حتی دو ساعت هم لازم باشه با تلفن جوابگو هست چو در آن واحد تعداد محدودی پرونده در دست داره
به هرحال باید عدد تصادفی باشه، می شه از تابع time هم استفاده کردنقل قول:
این عدد نباید به هیچ وجه رندوم باشه و باید به صورت یکتا در سیستم برنامه شما ایجاد بشه و برای بانک ارسال بشه. شما قبل از راه اندازی به صورت واقعی برای مشتری باید برای بانک درخواست تست ارسال کنید حتی در این مرحله هم باید اعداد واقعی بفرستید یعنی وقتی بانک اجازه راه اندازی به صورت نهایی به شما داد باید اعدادی که می فرستید اعداد زمان تست نباشه
فکر کنم الان داری بازی فوتبال تماشا می کنن:چشمک:نقل قول:
برای بقیه سوال هاتون هم به بانک زنگ بزنید از همه بهتر راهنماییتون می کنند. برای هر قرارداد یک کارمند مخصوص داره که حتی دو ساعت هم لازم باشه با تلفن جوابگو هست چو در آن واحد تعداد محدودی پرونده در دست داره
توی درگاه بانک ملت ظاهرا باید 3 بار این عدد یکتا رو ایجاد کنیم (موقع درخواست تراکنش، موقع تایید و موقع درخواست واریز)، ایا این کار لازمه یا فقط باید از همون عددی که برای درخواست انجام تراکنش استفاده شده مجددا استفاده کرد؟
عدد تصادفی یکبار تولید میشه (درخواست تراکنش) و در مراحل تأیید و درخواست واریز باید همون عدد قبلی رو بدین.
1. بله شما میتونید آی پی ها رو با دامنه به ایمیل به پرداخت که فک کنم این sales@behpardakht.ir هست ارسال کنید و درخواست خودتون رو مطرح کنید!
2. خیر برای هر حساب یه درگاه تخصیص میدن!
شما میتونید هر دوسایت رو به یه درگاه وصل کنید و هیچ مشکلی هم نداره من الان دارم چندین سایت رو با یه درگاه راه میبرم!
یا علی
سلام دوستان یه سوال در این اسکریپت به جای نمایش خطا یا نتیجه به صورت عدد چهجوری پیغام نمایش بدیم؟
مثلا پرداخت موفق بود 0 نشون نده . بزنه موفق بوده .
یا پرداخت کنسل شده 17 نزنه بزنه کنسل شده .
ممنون میشم راهنمایی کنید
دوستان کسی با زبان asp سمپل داره ? Php سمپل خیلی زیاده ولی asp هیچی نیست بانکم نداره
خواهشا اگه کسی میتونه کمک کنه
ممنون
بهتره توی تالار ASP.NET این سؤال رو مطرح کنید. اینجا همه PHP کار هستن. البته معمولاً خود بانک نمونه کد ASPX رو همراه با مستندات، بهتون ارائه میکنه.
خدا خیرت بده.
دمت گرم
سلام آقا رضا
اسکریپتتون عالیه
فقط مشکل اینه که وقتی صفحه اجرا می شه کل سشن های سایت رو پاک می کنه.
پس از این اسکریپت فقط می شه تو صفحات بیرونی سایت استفاده کرد و نه صفحات پنل هر یوزر
لطفا مشکا رو حل بفرمایید
با سپاس
سلام
بعد از اجرای متد درخواست تراکنش پرداخت بعد اینکه گزینه پرداخا میزنیم نتیجه همراه با پارامتر ها به سایت پذیرنده با متد پست ارسال میشن که طبق گفته داکیومنت به پرداخت باید اینها باشن
RefId
ResCode
saleOrderId
SaleReferenceId
الان مشکل من اینجاست که همه موارد فوق درست ارسال میکنه به غیر از saleOrderId که مقدارش null هست ! و به خاطر همین نمیتونم متد تایید تراکنش اجرا کنم چون به این پارامتر نیاز داره
از دوستان کسی تا حالا همچین مشکلی داشته ؟ ممنون میشم راهنماییم کنید
متشکرم
سلام . شما باید کدsaleOrderId رو به همراه RefId توی دیتابیست ذخیره کرده باشی و برای وریفای کردن ازش استفاده کنی. کافیه یک تابع بنویسی که کد saleOrderId رو از طریق RefId بدست بیاری. مثلا:
function GetOrderIDByRefId($RID){ $sql = "SELECT * FROM orders where au = '".secure($RID)."' limit 1"; $q = mysql_query($sql); while ($record = mysql_fetch_assoc($q)) { return($record["ORDERID"]); }}
سلام دوستان
در سایت موردنظر من، ابتدا کاربر یکسری اطلاعات را پر می کنه سپس بایستی مبلغی پرداخت کنه و در صورت تایید پرداخت از سمت بانک، اطلاعات کاربر در پایگاه داده ذخیره بشه. آیا چنین چیزی امکان پذیر هست؟ لطفا راهنمایی کنید.
بله. در فرایند پرداخت سایت شما باید در بانک اطلاعات خود یک کد سفارش یکتا تولید کرده و نگهداری می کند. درخواستی با پارامتر هایی مثل: اطلاعات احراز هویت (نام کاربری و کلمه عبور و شماره ترمینال) ، آدرس درخواست و بازگشت از سایت ، مبلغ ، زمان و ... از طریق پروتکل SOAP به سایت بانک ارسال میکنید. اگر همه ی پارامتر های ارسالی مشکلی نبود بانک یک کد RefId برای آن سفارش تولید می کند و کاربر را به سمت صفحه ی پرداخت هدایت می کند و پس از انجام تراکنش کاربر به سایت شما بازگشت داده خواهد شد و شما باید کد یکتایی که در بانک خود ذخیره کرده اید را با کدی که بانک به شما می دهد مقایسه کنید و نسبت به کدی بازگشتی که به کاربر داده است برای آن پیغامی چاپ می کنید.
این توضیحات کلی و فقط جهت آشنایی شما با روال کار بود . اگر درگاهی درخواست بدهید بانک موظف است مستنداتی که اطلاعات آن به صورت کامل است را در اختیار شما قرار دهد.
امید وارم که مفید واقع شود
سلام من از این کد میخوام استفاده کنم البته برای یک افزونه vip
تا اینجا پیش رفتم که وقتی کاربر میخواد خرید کنه و دکمه خرید رو میزنه Pay Response is : 0,A2E6D5281EDA5712 این کد نمایش داده میشه البته بگم که من کدها رو از فایل اینکسی که توی انجمن بود خارج کردم و در قسمتی از افزونه که مربوط به پرداخت هست قرار دادم و اطلاعات بانکی و مبلغ رو از افزونه مورد نظر میگیره اما بعد از گرفتن کدPay Response is : 0,A2E6D5281EDA5712 به سمت دروازه پرداخت نمیره و احتمال میدم که کد جاوا اسکریپش کار نکنه چون اونو اجباری داخل $html='';قرار بدم تا برنامه از کد نویسی php خطا نگیره کسی میتونه کمک کنه
آخرش من نفهمیدم یه ماژول بانک ملت برای غیر حرفه ای ها هست برای این کار یا نه ؟؟ ؟ ؟ ؟
.
.
.
.
شارژ ارزان های شارژ
دوستان بعد از این همه کامنت یک سوال بپرسم؟
اقا این قرارداد با بانک رو کجا میبندن؟ انلاین یا کاغذی و ....
اخه ما از هر شعبه ای از بانک ملت پرسیدیم طرف بز نمی فهمید
دوست عزیز شما تسط یک شعبه درخواست یک درگاه بده بعد خودشون یک فرم قرارداد برات ایمیل میکنن اون رو تو دونسخه چاپ میکنی بعد امضا میکنی بعد به آدرس تهران فکر کنم ضلغ شرقی پارک ارغوان باشه پست میکنی خودشون آدرس برات میفرسن بعد اونا یک نسخه از قرارداد رو مهر میکنن و امضا برات پست میکنن به آدرس خونت
درضمن تمام شعب بانک ها هیچ اطلاعی از رون انجام و خدمات درگاه اینترنتی ندارد باید از سایت به پرداخت ملت کسب اطلاع کنی
توی درگاه به پرداخت ملت چند تا نکته هست که بعضی هاش قبلا هم گفته شده.ولی برای تمرکز بیشتر مطالب میگم.
احتمالا به درد شما هم میخوره:
- الان(از دی ماه 1392) باید به وسیله شاپرک به درگاه ملت وصل شد و به جای آدرس
https://pgwtest.bpm.bankmellat.ir/pgwchannel/startpay.mellat
به نشانی زیر وصل بشید:
https://bpm.shaparak.ir/pgwchannel/startp
ay.mellat
توضیحات بیشتر
-در کدی که با PHP 4 کار میکنه یک خط بصورت روبرو نوشته شده
$client = new soapclient('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
در PHP 5.3 و بالاتر کد فوق باید به کد زیر تغییر پیدا کنه
$client = new nusoap_client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
- نکته خیلی مهم توی آدرس صفحه callback یا هر صفحه ای که وقت بازگشت از سایت بانک ملت توی کدتون به بانک میدید، اینه که www توی نتیجه متغیر هایی که پاس داده میشن تاثیر داره.
توی مثال بانک www داره ولی توی یه سایت خاص برای من تا www رو برنداشتم درست نشد.
تقدیم به همه برنامه نویسان عزیز
https://github.com/nasservb/mellat_payment
با سلام مهندسین عزیز برای درگاه پرداخت اینترنتی ملت سایتم ی مشکل هست که میگه
شماره درخواست تکراری است کسی می تونه کمک کنه