PDA

View Full Version : سوال: درخواست راهنمایی در رابطه با درگاه پرداخت آنلاین بانک ملت



Ali_Sedaghat
دوشنبه 03 تیر 1392, 17:43 عصر
با سلام خدمت دوستان عزیز و محترم
من به تازگی از بانک ملت درگاه پرداخت گرفتم. (شماره ترمینال - نام کاربری و رمز عبور)
به کمک یکی از اسکریپت های بچه های فروم برنامه نویس تونستم عمل پرداخت رو با موفقیت انجام بدم. اما سوال مهم اینه که:
بانک ملت به آی پی حساسه. من از میهن وب هاست مقداری فضا گرفتم و آی پی این سرور را به بانک ملت معرفی کردم. وقتی که اسکریپت پرداخت آنلاین را در میهن وب هاست قرار میدم بدون هیچ مشکلی عملیات پرداخت رو انجام میده اما من قصد دارم تا بتونم از این درگاه پرداخت برای سایت دومم که در یک هاست خارجی هست نیز استفاده کنم.
فرض می کنیم:
سرور ایرانی: Site1
سرور خارجی: Site2
من در سرور دوم (سرور خارجی) یک صفحه برای وارد کردن مبلغ و نام کاربری دارم. فرض کنید نام این صفحه Payment2.php باشه. قصد دارم وقتی که کاربر فرم مورد نظر را پر کرد و بر روی دکمه ی Submit کلیک کرد مبلغ مورد نظر به همراه نام کاربری و شماره ی سفارش او به صفحه ای در سرور ایرانی به نام Payment1.php ارسال بشه و سریعاً (بلافاصله) این مقادیر به بانک ارجاع داده بشه و پس از پرداخت موفقیت آمیز از سوی بانک شماره ی سفارش و کد رهگیری در یک فایل متنی ذخیره شده و بدون زدن دکمه ای به صفحه ی اول یعنی Payment2.php برگرده.
لازم به توضیحه که مشخصات درگاه و کدهای لازم جهت فرستادن مقادیر لازم به بانک در صفحه ی Payment1.php قرار داره که این صفحه در سرور ایرانی یا همون Site1 قرار دارد.
نمی دونم تونستم منظورم رو برسونم یا نه.
ممنون میشم اگه راهنمایی های لازم را بفرمایید.
با تقدیم احترام
صداقت

H:Shojaei
دوشنبه 03 تیر 1392, 18:11 عصر
سلام


بر روی دکمه ی Submit کلیک کرد مبلغ مورد نظر به همراه نام کاربری و شماره ی سفارش او به صفحه ای در سرور ایرانی به نام Payment1.php ارسال بشه و سریعاً (بلافاصله) این مقادیر به بانک ارجاع داده بشه و پس از پرداخت موفقیت آمیز از سوی بانک شماره ی سفارش و کد رهگیری در یک فایل متنی ذخیره شده و بدون زدن دکمه ای به صفحه ی اول یعنی Payment2.php برگرده.

خب شما كه جواب رو خودتون دادين ديگه فقط بايد عملي شه مشكل كجاست؟
من از اين چيزي كه شما گفتيد فكر كنم فهميدم بايد چطور انجام بشه بعد خودتون سوال ميكنيد!

Ali_Sedaghat
دوشنبه 03 تیر 1392, 18:54 عصر
سلام

خب شما كه جواب رو خودتون دادين ديگه فقط بايد عملي شه مشكل كجاست؟
من از اين چيزي كه شما گفتيد فكر كنم فهميدم بايد چطور انجام بشه بعد خودتون سوال ميكنيد!

ممنون از پاسخ تون
همان طور که قبلاً عرض کردم کاربر در سایت دوم که روی سرور خارجی هست اقدام به پر کردن فرم و اطلاعات لازم و فشردن کلید Submit می کنه. این رو هم می دونم که باید متود مورد استفاده Post و آدرس مقصد همون آدرس مورد نظر باشه. اما نکته ی مهم اینه که: اگه ما بیاییم در تگ فرم آدرس بانک ملت رو بدیم مطمئناً داده ها به بانک ارجاع داده نمیشن یا اگه ارسال بشن عملیات پرداخت انجام نمیشه چون آی پی که من به بانک معرفی کردم آی پی سرور ایرانی هست نه سرور خارج از ایران. من قصد دارم برای دو سایتم از این درگاه استفاده کنم. سایت اولم در سرور ایران و سایت دوم در سرور خارج از ایران.
من با سایتی که روی سرور ایران دارم اصلاً مشکلی در پرداخت ندارم. مشکل من پرداخت در سایتی است که روی سرور خارج از ایران هست.
کاری که من باید انجام بدم اینه که بیام یه صفحه ی واسط در سرور ایران ایجاد کنم. به عبارت بهتر داده هایی نظیر نام کاربری و مبلغ و شماره ی سفارش از سرور خارجی به این صفحه ی واسط ارسال بشن و سپس از این صفحه به صفحه ی اصلی درگاه پرداخت ارسال شده و بعد از اتمام عملیات پرداخت شماره ی سفارش نمایش داده بشه.
من قصد ندارم در صفحه ی واسط از تگ فرم استفاده کنم. می خوام ببینم روشی هست که بشه بدون استفاده از تگ فرم اقدام به ارسال داده ها کرد. (همون داده هایی که از سایت روی سرور خارجی به صفحه ی واسط ارسال شدند)
و نکته ی بعدی این که: وقتی که عملیات پرداخت انجام شد به طور اتوماتیک به همون صفحه ی اول که روی سرور خارج از ایران هست ارجاع داده بشه. یعنی صفحه ی اول لود بشه.
امیدوارم که منظورم رو دیگه خوب متوجه شده باشید.
با تقدیم احترام
صداقت

MMSHFE
دوشنبه 03 تیر 1392, 19:57 عصر
راهی که بنظرم میرسه، استفاده از وب سرویس برای ارتباط بین سرور خارجی و ایرانی هست، به نحوی که سایت خارجی با کمک وب سرویس، به سایت داخلی وصل بشه و اطلاعات رو به درگاه بانک بفرسته و کاربر رو به صفحه بانک هدایت کنه و صفحه مقصد هم که روی سرور داخلی هست، دوباره با وب سرویس نتیجه پرداخت رو به سایت خارجی ارسال و کاربر رو به سایت خارجی هدایت کنه.

rezaonline.net
سه شنبه 04 تیر 1392, 03:13 صبح
راهی که بنظرم میرسه، استفاده از وب سرویس برای ارتباط بین سرور خارجی و ایرانی هست، به نحوی که سایت خارجی با کمک وب سرویس، به سایت داخلی وصل بشه و اطلاعات رو به درگاه بانک بفرسته و کاربر رو به صفحه بانک هدایت کنه و صفحه مقصد هم که روی سرور داخلی هست، دوباره با وب سرویس نتیجه پرداخت رو به سایت خارجی ارسال و کاربر رو به سایت خارجی هدایت کنه.
سلام چنین وبسرویسی رو من پیاده کردم ، اکثر بانکهارو هم براش نوشتم .
demo2.rezaworkshop.ir
u : admin
p : demopaymentws

توضیحات بیشتر
http://rezaworkshop.ir/post/7/webservice

Ali_Sedaghat
سه شنبه 04 تیر 1392, 08:17 صبح
راهی که بنظرم میرسه، استفاده از وب سرویس برای ارتباط بین سرور خارجی و ایرانی هست، به نحوی که سایت خارجی با کمک وب سرویس، به سایت داخلی وصل بشه و اطلاعات رو به درگاه بانک بفرسته و کاربر رو به صفحه بانک هدایت کنه و صفحه مقصد هم که روی سرور داخلی هست، دوباره با وب سرویس نتیجه پرداخت رو به سایت خارجی ارسال و کاربر رو به سایت خارجی هدایت کنه.

جناب آقاي شهركي ممنون از پاسخ تون
ميشه كدهاي مربوط به راه اندازي وب سرويس در سايت داخلي و نحوه ي استفاده از وب سرويس رو در سايت خارجي برام توضيح دهيد.
با تقديم احترام
صداقت

MMSHFE
سه شنبه 04 تیر 1392, 08:22 صبح
فایلهای ضمیمه رو دانلود و بررسی کنید.

Ali_Sedaghat
سه شنبه 04 تیر 1392, 10:17 صبح
فایلهای ضمیمه رو دانلود و بررسی کنید.

تست كردم.
فايل دوم هيچ چيزي رو از بانك اطلاعات بر نمي گردونه و اين پيغام را ميده.


bool(false)
bool(false)

MMSHFE
سه شنبه 04 تیر 1392, 10:20 صبح
کد رو با دیتابیس چک کنید. ببینید دقیقاً همون IDهایی که توی دیتابیس هست رو مورد دستیابی قرار میدین یا نه. بهرحال، بیشتر روی کد تمرکز کنید تا نحوه نوشتن وب سرویس رو یاد بگیرین.

Ali_Sedaghat
سه شنبه 04 تیر 1392, 20:17 عصر
سلام جناب آقای شهرکی و سایر دوستان
من سه فایل را دانلود کردم و به کدهاش هم نگاهی انداختم. با چند سوال مواجه شدم. لطفاً به این کدها نگاهی بیندازید.

فایل index.php


<!doctype html>
<html>
<head>
<title>NuSOAP Array Service DEMO</title>
<meta charset="utf-8"/>
<script src="jqmin.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#send").click(function() {
$.ajax({
type: "post",
url: "call.php",
data: "uid="+$("#uid").val(),
success: function(result) {
$("#result").html(result);
}
});
});
});
</script>
</head>
<body>
ID : <input id="uid" name="uid" type="text"/><input id="send" type="button" value="Show"/><br/>
<div id="result">&nbsp;</div>
</body>
</html>


فایل mywsdl.php


<?php
require_once 'nusoap/nusoap.php';
$ns = 'http://localhost/dargah/ajaxws';
$server = new NuSOAP_Server();
$server->debug_flag = false;
$server->soap_defencoding = 'utf-8';
$server->decode_utf8 = false;
$server->configureWSDL('MyWSDL', $ns);
$server->wsdl->schemaTargetNamespace = $ns;
$server->wsdl->addComplexType(
'UserInfo', // Complex Type Name
'complexType', // Complex or Simple ?
'struct', // Struct (associative) or Array (numerical indexed)
'all',
'',
array(
'Id' => array(
'name' => 'id',
'type' => 'xsd:int'
),
'User' => array(
'name' => 'User',
'type' => 'xsd:string'
),
'Pass' => array(
'name' => 'Pass',
'type' => 'xsd:string'
)
)
);
$server->register(
'GetUserInfo', // Method Name
array('UserId' => 'xsd:int'), // Input Parameters
array('return' => 'tns:UserInfo'), // Output Parameters
$ns, // Namespace
$ns . '#GetUserInfo', // SOAPAction
'rpc', // Style
'encoded', // Use
'Get specific user info' // Documentation
);

function GetUserInfo($userId) {
$result = array(
'Id' => null,
'User' => null,
'Pass' => null
);
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('ws') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
$id = mysql_real_escape_string($userId);
$user = mysql_query("SELECT * FROM `users` WHERE (`id`='{$id}')");
if($user && mysql_num_rows($user) > 0) {
$user = mysql_fetch_assoc($user);
}
mysql_close();
$result['Id'] = $user['id'];
$result['User'] = $user['user'];
$result['Pass'] = $user['pass'];
return $result;
}

$HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
$server->service($HTTP_RAW_POST_DATA);
exit();
?>


فایل call.php


<?php
if(!isset($_POST['uid']) || trim($_POST['uid']) === '') {
die('User ID not defined!');
}
require_once 'nusoap/nusoap.php';
$client = new NuSOAP_Client('http://localhost/dargah/ajaxws/mywsdl.php?wsdl', 'wsdl');
$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false;
$parameters = array($_POST['uid']);
echo '<pre>' . print_r($client->call('GetUserInfo', $parameters), true) . '</pre>' . PHP_EOL;
$Temp_Array = $client->call('GetUserInfo', $parameters);
echo count($Temp_Array) .'<br>';
echo $Temp_Array['Id'] .' - ' .$Temp_Array['User'] .'<br>';
echo $Temp_Array['0'] .' - ' .$Temp_Array['1'] .'<br>';
?>

همان طور که در کدهای مربوط به فایل mywsdl.php مشاهده می کنید از خط 42 تا 62 تابعی به نام GetUserInfo تعریف شده که یک آرگومان می گیره به نام $userId. قاعدتاً این متغیر همون شماره ی کاربر هست.
اتصال به بانک انجام شده و پس از جستجوی id در جدول users رکورد مورد نظر در متغیری به نام $result ذخیره شده و این مقدار برگشت داده می شود.

حالا سوال من اینه که:
سوال اول:
من در خط 11 فایل call.php متغیری به نام $Temp_Array تعریف کردم که قراره پس از فراخوانی تابع GetUserInfo محتویات رکورد پیدا شده در متغیر جدیدم ذخیره کنم.
وقتی که خط 12 اجرا میشه عدد 3 را نمایش میده نه عدد یک. چرا؟
آیا منظورش آرایه ای با سه ردیف 3 ستونه است یا آرایه ای با یک ردیف 3 ستونه؟

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


1 - Ali


من خط 13 و 14 را که اضافه کردم هیچی نمایش نمیده به جاش اینو نمایش میده:


Array
(
[Id] => 1
[User] => ali
[Pass] => 1234
)

ممنون میشم اگه راهنمایی کنید.
با تقدیم احترام
صداقت

abolfazl-z
سه شنبه 04 تیر 1392, 20:28 عصر
سلام دوستان

با اجازه آقای شهرکی

دوستان شما چرا از ساییت های واسطه استفاده نمی کنید ؟

http://payline.ir/

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

Ali_Sedaghat
سه شنبه 04 تیر 1392, 22:34 عصر
سلام دوست عزیز
استفاده کردن از سایت های واسطه باعث راحتی کار می شه اما من خاطره ی خوشی از سایت های واسطه ندارم.
من در یکی از این سایت ها عضو بودم و از درگاه اون سایت عملیات پرداخت وجه انجام می شد. به خاطر یک سری مسائل و مشکلات به وجود آمده سایت مذکور درگاه من را مسدود کرده و حسابم را مسدود کرد. چند سری با مدیر سایت صحبت کردم ولی بی فایده بود.
از طرفی این قبیل سایت ها برای واریز کردن وجه به حساب مشتریان شون حداقل مبلغی را قائل می شن که این اصلاً به درد بخور نیست.
به نظر من اگه کسی درگاه پرداخت آنلاین رو بتونه مستقیماً از بانک بگیره خیلی بهتره. هم مطمئنه و هم پول به حساب بانکی خود شخص واریز میشه نه موسسه یا اشخاص دیگه.
من عقیده دارم ما باید راه و روش رو یاد بگیریم نه این که از هر چیزی که آماده است استفاده کنیم.
البته این ها نظرات شخصی من هست و به عقیده ی همه ی افراد احترام می گذارم.
باز هم ممنون از پاسخ تون.
حالا اگه کسی راجع به تاپیکی که زدم و نمونه فایل هایی که قرار دادم نظری و یا راهنمایی داره ازش ممنون میشم این لطف رو در حق من انجام بده.
با تقدیم احترام
صداقت

rezaonline.net
چهارشنبه 05 تیر 1392, 03:06 صبح
میتونید یک فایل واسط هم بسازید و با curl بصورت post مقادیر رو بهش ارسال کنید و باقی فرآیند رو انجام بدید .

Ali_Sedaghat
چهارشنبه 05 تیر 1392, 07:59 صبح
میتونید یک فایل واسط هم بسازید و با curl بصورت post مقادیر رو بهش ارسال کنید و باقی فرآیند رو انجام بدید .

سلام آقا رضا
ممنون از پاسخ تون
ولي متأسفانه من تا به حال با Curl كار نكرده ام. آيا مطالب آموزشي در اين زمينه رو در دسترس داريد. ممنون ميشم اگه اين لطف رو انجام بديد.
با تقديم احترام
صداقت