PDA

View Full Version : سوال: درخواست اشکال یابی اسکریپت پرداخت ملت



ahmad4u
یک شنبه 13 اسفند 1391, 02:00 صبح
اسکریپتی برای درگاه ملت وجود دارد که هنگام وارد کردن مشخصات درگاه با پیام خطای زیر مواجه میشویم
"در اتصال به درگاه بانک مشکلی پیش آمده است! (1:69) "

فایل را پیوست نمودم
دوستان لطف کنن و راهنمایی نمایند مشکل از کجاست

codedme
یک شنبه 13 اسفند 1391, 02:08 صبح
سعی کنید به جای اینکه این ارور ها رو توی فایل echo کنید بیرون خود مقدار های $client->fault و $err رو echo کنین تا بشه بهتر دیباگ کرد. اما من حدس می زنم که اشکال از کتابخانه nusoap باشه که شما دارین استفاده می کنین. یادمه یه اشکالی داشتن اینا که چند تا فانکشن رو رینیم کردم تا درست شد. حالا شما یه echo از اینایی که گفتم بگیرین ببینیم داستانش چیه

ahmad4u
یک شنبه 13 اسفند 1391, 02:20 صبح
ممنون از پاسخگویی شما
فایل دوم که ضمیمه شده علت پیغام خطا را مشخص کرده

من بجای

$client = new nusoap_client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
از

$client = new NuSOAP_Client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl', 'wsdl');
استفاده کردم و بازهم پیغام خطا وجود دارد!!

ahmad4u
یک شنبه 13 اسفند 1391, 12:56 عصر
دوستان لطفا فایل را بررسی نمایید

rezaonline.net
یک شنبه 13 اسفند 1391, 15:10 عصر
دوست عزیز تست کردن این فایل نیاز به داشتن درگاه از بانک ملت داره ، پس قبول کنید که نمیشه بررسی کرد .
شما لطف کنید سورس کد رو اینجا بذارید تا بشه روش نظر داد .
اینکه چه لاینی مشکل داره و چه خطایی ایجاد میشه به نظرم بهتره .

بین خودمون بمونه ، یکی از سخترین کارهای یک برنامه نویس خوندن کدهای دیگرونه ، پس شما باید جوری مساله رو بیان کنید که وقتی کسی خواست بررسی کنه ، با بی حوصلگی تاپیک رو نبنده و بیخیال نشه .
شما باید به سادترین و سریعترین روش ، مشکل اسکریپتتون رو بیان کنید .
منتظرم

ahmad4u
یک شنبه 13 اسفند 1391, 16:12 عصر
ممنون رضا جان
کدها بصورت کامل در تاپیک بصورت فایل پیوست قرار داده شده و پیغام خطای داده شده مربوط به خط 58 میشود
که این بخش هستش

if ($client->fault) {
echo '
<html>
<head><title>خطای سیستم</title><meta charset="utf-8"></head><body><strong style="color: red;">در اتصال به درگاه بانک مشکلی پیش آمده است! (1:69)</strong></body>
</html>
';

rezaonline.net
یک شنبه 13 اسفند 1391, 23:31 عصر
$time = date('Gis'); رو بکن

$time = date('His');

اینجا هم یه نگا بنداز توضیح دادم .
http://barnamenevis.org/showthread.php?386668-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1%DA%AF%D8%A7%D9%87-%D8%A8%D8%A7%D9%86%DA%A9-%D9%85%D9%84%D8%AA-%D8%A8%D8%A7-nusoap-%D9%88-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D8%AE%D8%B7%D8%A7&p=1714340#post1714340

ahmad4u
یک شنبه 13 اسفند 1391, 23:57 عصر
ممنون آقا رضا اما مشکل حل نشد
کد کامل را قرار دادم
مشکل از هاست و ... نیست چون اسکریپت simple که خود به پرداخت داده براحتی به درگاه متصل میشود


<?php
@session_start();
require('nusoap.php');

function mt_add_gateway ($gateways) {
$gateways['mellat'] = array('admin_label' => 'بانک ملت' , 'checkout_label' => 'پرداخت بانک ملت');
return $gateways;
}
add_filter( 'edd_payment_gateways', 'mt_add_gateway' );

function mt_cc_form () {
do_action( 'mt_cc_form_action' );
}
add_filter( 'edd_mellat_cc_form', 'mt_cc_form' );

function mt_process_payment ($purchase_data) {
global $edd_options;

$payment_data = array(
'price' => $purchase_data['price'],
'date' => $purchase_data['date'],
'user_email' => $purchase_data['post_data']['edd_email'],
'purchase_key' => $purchase_data['purchase_key'],
'currency' => $edd_options['currency'],
'downloads' => $purchase_data['downloads'],
'cart_details' => $purchase_data['cart_details'],
'user_info' => $purchase_data['user_info'],
'status' => 'pending'
);
$payment = edd_insert_payment($payment_data);

if ($payment) {
$_SESSION['mellat_payment'] = $payment;
$return = urlencode(add_query_arg('order', 'mellat', get_permalink($edd_options['success_page'])));
$price = $payment_data['price'] * 1000;
$date = date('Ymd');
$time = date('His');
$order = $purchase_data['purchase_key'];
$terminal = $edd_options['mellat_terminal'];
$username = $edd_options['mellat_username'];
$password = $edd_options['mellat_password'];
$params = array (
'terminalId' => $terminal,
'userName' => $username,
'userPassword' => $password,
'orderId' => $order,
'amount' => $price,
'localDate' => $date,
'localTime' => $time,
'additionalData' => '',
'callBackUrl' => $return,
'payerId' => 0
);
$client = new nusoap_client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
$namespace = 'http://interfaces.core.sw.bps.com/';
$result = $client->call('bpPayRequest', $params, $namespace);

if ($client->fault) {
echo '
<html>
<head><title>خطای سیستم</title><meta charset="utf-8"></head><body><strong style="color: red;">در اتصال به درگاه بانک مشکلی پیش آمده است! (1:69)</strong></body>
</html>
';
exit;
} else {
$err = $client->getError();
if ($err) {
echo '
<html>
<head><title>خطای سیستم</title><meta charset="utf-8"></head><body><strong style="color: red;">در اتصال به درگاه بانک مشکلی پیش آمده است! (2:78)</strong></body>
</html>
';
exit;
} else {
$res = explode(',', $result);
$resCode = $res[0];
if ($resCode == "0") {
echo '
<html><body onload="form_submit();"><form name="mellatpay" action="https://pgw.bpm.bankmellat.ir/pgwchannel/startpay.mellat" method="post"><input type="hidden" id="RefId" name="RefId" value="'.$res[1].'"></form></body></html>';
exit;
} else {
echo '
<html>
<head><title>خطای سیستم</title><meta charset="utf-8"></head><body><strong style="color: red;">در اتصال به درگاه بانک مشکلی پیش آمده است! (3:92)</strong></body>
</html>
';
exit;
}
}
}
}
}
add_action('edd_gateway_mellat', 'mt_process_payment');

function mt_verify() {
global $edd_options;
if (isset($_GET['order']) and $_GET['order'] == 'mellat' and isset($_POST['ResCode'])) { if ($_POST['ResCode'] == 0) {
$payment = $_SESSION['mellat_payment'];
$client = new nusoap_client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
$namespace = 'http://interfaces.core.sw.bps.com/';
$terminal = $edd_options['mellat_terminal'];
$username = $edd_options['mellat_username'];
$password = $edd_options['mellat_password'];

$err = $client->getError();
if ($err) {
$output['status'] = 0;
$output['reversal'] = 1;
$output['message'] = $err;
} else {
$order = $_POST['SaleOrderId'];
$vsorder = $_POST['SaleOrderId'];
$vsref = $_POST['SaleReferenceId'];

$params = array (
'terminalId' => $terminal,
'userName' => $username,
'userPassword' => $password,
'orderId' => $order,
'saleOrderId' => $vsorder,
'saleReferenceId' => $vsref
);
$result = $client->call('bpVerifyRequest', $params, $namespace);
if ($client->fault) {
$output['status'] = 0;
$output['reversal'] = 1;
foreach ($result as $error) { $output['message'] .= $error; }
} else {
$err = $client->getError();
if ($err) {
$output['status'] = 0;
$output['reversal'] = 1;
$output['message'] = $err;
} else {
if ($result == 0) {
$inquirySaleOrderId = $_POST['SaleOrderId'];
$inquirySaleReferenceId = $_POST['SaleReferenceId'];

$err = $client->getError();
if ($err) {
$output['status'] = 0;
$output['reversal'] = 1;
$output['message'] = $err;
} else {
$params = array(
'terminalId' => $terminal,
'userName' => $username,
'userPassword' => $password,
'orderId' => $order,
'saleOrderId' => $inquirySaleOrderId,
'saleReferenceId' => $inquirySaleReferenceId
);
$result = $client->call('bpInquiryRequest', $params, $namespace);
if ($result == 0) {
if ($client->fault) {
$output['status'] = 0;
$output['reversal'] = 1;
foreach($result as $error) $output['message'] .= $error;
} else {
$err = $client->getError();
if ($err) {
$output['status'] = 0;
$output['reversal'] = 1;
$output['message'] = $err;
} else {
$output['status'] = 1;
}
}
} else {
$output['status'] = 0;
$output['reversal'] = 0;
$output['message'] = $result;
}
}
}
}
}
}
} else {
$output['status'] = 0;
$output['reversal'] = 0;
$output['message'] = 'شما از انجام تراکنش منصرف شدید.';
$cancel = 1;
}
///////////////
if ($output['status'] == 1) {
$sorder = $_POST['SaleOrderId'];
$sref = $_POST['SaleReferenceId'];

$err = $client->getError();
if ($err) {
$output['status'] = 0;
$output['message'] = $err;
} else {
$params = array(
'terminalId' => $terminal,
'userName' => $username,
'userPassword' => $password,
'orderId' => $order,
'saleOrderId' => $sorder,
'saleReferenceId' => $sref
);
$result = $client->call('bpSettleRequest', $params, $namespace);

if ($result == 0) {
if ($client->fault) {
$output['status'] = 0;
foreach ($result as $error) $output['message'] .= $error;
} else {
$err = $client->getError();
if ($err) {
$output['reversal'] = 1;
$output['status'] = 0;
} else {
edd_update_payment_status($payment, 'publish');
}
}
} else {
$output['status'] = 0;
$output['reversal'] = 1;
}
}
}
if ($output['reversal'] == 1) {
$order = $_POST['SaleOrderId'];
$rorder = $order;
$rref = $_POST['SaleReferenceId'];

$err = $client->getError();
if ($err) {
$output['status'] = 0;
} else {
$params = array(
'terminalId' => $terminal,
'userName' => $username,
'userPassword' => $password,
'order' => $order,
'saleOrderId' => $rorder,
'saleReferenceId' => $rref
);
$result = $client->call('bpReversalRequest', $params, $namespace);
if ($client->fault) {
$output['status'] = 0;
} else {
$err = $client->getError();
if ($err) {
$output['status'] = 0;
} else {
if ($result == 0) {
die('<span style="font: 13px tahoma; direction: rtl; font-weight: bold; color: red">در پرداخت مشکلی پیش آمد. پول پرداختی به حساب شما بازگشت.</span>');
} else {
die('<span style="font: 13px tahoma; direction: rtl; font-weight: bold; color: red">در پرداخت مشکلی پیش آمد.</span>');
}
}
}
}
}
}
}
add_action('init', 'mt_verify');

function mt_add_settings ($settings) {
$mellat_settings = array (
array (
'id' => 'mellat_settings',
'name' => '<strong>پیکربندی پرداحت آنلاین بانک ملت</strong>',
'desc' => 'پیکربندی پرداخت آنلاین بانک ملت با تنظیمات فروشگاه',
'type' => 'header'
),
array (
'id' => 'mellat_terminal',
'name' => 'شماره پذیرنده پایانه',
'type' => 'text',
'size' => 'regular'
),
array (
'id' => 'mellat_username',
'name' => 'نام کاربری پذیرنده',
'type' => 'text',
'size' => 'regular'
),
array (
'id' => 'mellat_password',
'name' => 'رمزعبور پذیرنده',
'type' => 'password',
'size' => 'regular'
)
);
return array_merge( $settings, $mellat_settings );
}
add_filter('edd_settings_gateways', 'mt_add_settings');

codedme
دوشنبه 14 اسفند 1391, 13:47 عصر
خوب من هنوز متوجه نشدم که خطا چی هست، اگر ممکن هست یک var_dump از اون جایی که خطا میده بگیرید و اینجا بگذارید

فکر میکنم بین خط ۵۸ و ۵۹ کد بالا این رو اضافه کنید خطا رو دامپ کنه

echo "<pre>"; var_dump($client->fault); die('forced to die');

ahmad4u
دوشنبه 14 اسفند 1391, 15:16 عصر
خوب من هنوز متوجه نشدم که خطا چی هست، اگر ممکن هست یک var_dump از اون جایی که خطا میده بگیرید و اینجا بگذارید

فکر میکنم بین خط ۵۸ و ۵۹ کد بالا این رو اضافه کنید خطا رو دامپ کنه

echo "<pre>"; var_dump($client->fault); die('forced to die');

این خطا رو میده


bool(true) forced to die

رضا قربانی
سه شنبه 15 اسفند 1391, 10:44 صبح
اینجا قبلا نوشته شده و می تونید به راحتی استفاده کنید :
http://barnamenevis.org/showthread.php?106979-%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA-%D8%A7%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D 9%83-%D8%A8%D8%A7%D9%86%D9%83-%D9%85%D9%84%D8%AA&p=1485091&viewfull=1#post1485091
موفق باشید

ahmad4u
سه شنبه 15 اسفند 1391, 12:38 عصر
اینجا قبلا نوشته شده و می تونید به راحتی استفاده کنید :
http://barnamenevis.org/showthread.php?106979-%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA-%D8%A7%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A%D 9%83-%D8%A8%D8%A7%D9%86%D9%83-%D9%85%D9%84%D8%AA&p=1485091&viewfull=1#post1485091
موفق باشید

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

ahmad4u
سه شنبه 15 اسفند 1391, 23:58 عصر
از دوستان PHP کار کسی نبود به ما کمک کنه

ahmad4u
جمعه 18 اسفند 1391, 00:56 صبح
این همه برنامه نویس و php کار حرفه ای اینجا هستن اما هیچکس کمکی نمیکنه :تشویق:

rezaonline.net
جمعه 18 اسفند 1391, 01:15 صبح
راستش من دانش PHP ندارم و از برنامه نویسی PHP سر در نمیارم
پس دیگه چرا سرمون رو درد بیاریم :لبخند:

ahmad4u
جمعه 18 اسفند 1391, 11:57 صبح
پس دیگه چرا سرمون رو درد بیاریم :لبخند:

چرا سرتون رو درد بیارین :خجالت:
کدها موجود ، پیغام خطا هم موجود

rezaonline.net
جمعه 18 اسفند 1391, 19:26 عصر
احمد جان ، وقتی توی انجمن پی اچ پی مساله ای رو مطرح میکنی دوستان کمک میکنن خودت اون مشکل رو برطرف کنی ، اما وقتی دانشش رو نداری ، بهتره بدی به یکی از دوستان با هزینه کار رو برات انجام بده .
قصدم توهین نیست اما مثلا بیای برای یک دانشجوی رشته ادبیات ، انتگرال رو توضیح بدی نه اون میفهمه نه تو اعصابت میمونه .
دوستان تا حدی راهنمایی کردن
یکی دو تا تاپیک هم معرفی شد که توی اون تاپیک ها به جواب نهایی رسیده بودن.

ahmad4u
شنبه 19 اسفند 1391, 00:48 صبح
ممنون رضا جان
ابتدا خواستم شانسم رو برای اینکه دوستان بدون هزینه کمک کنند امتحان کنم
اما مثل اینکه کسی حاضر نیست رایگان کاری انجام بده
فعلا که درگاه ملت از کار افتاده (میگن بخاطر اینه که پورت 443 رو بستن بخاطر قیلترشکن ها و عجیب تر اینه که درگاه ملت هم رو پورت 443 هستش:لبخند: )
درگاه راه افتاد مزاحمتون میشم

rezaonline.net
شنبه 19 اسفند 1391, 01:30 صبح
بانک ملت سه روزه قطعه ، ربطی به پورت 443 نداره .

ahmad4u
شنبه 19 اسفند 1391, 11:31 صبح
بانک ملت سه روزه قطعه ، ربطی به پورت 443 نداره .

توجه کردین هر موقع whatsapp (http://www.pakbaz.ir/whatsapp-%d9%85%d8%b3%d9%86%d8%ac%d8%b1%db%8c-%d8%a8%d8%a7-%d8%a7%d8%b1%d8%b2%d8%b4/) و operamini و یکسری برنامه های Internet call از طرف مخابرات بلوکه میشه درگاه ملت هم از کار میوفته
در این مورد اینجا بحثش داغه
اختلال در درگاه پرداخت الکترونیک بانک ملت ...!!!؟ (http://forum.shopkeeper.ir/showthread.php?t=28648&page=8)

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

rezaonline.net
شنبه 19 اسفند 1391, 12:02 عصر
والا نمیدونم چه سریه .
من درگاه بانک ملی دارم ، تا یک هفته پیش خوب کار میکرد الان روی هاست خارج کار نمیکنه و فقط از هاست ایران میشه بهش متصل بود .
هر چی هست بصورت کلی روی تمامی بانک ها داره اعمال میشه .
بانک ملت تراکنشهاش زیاده ، این 4 روز وقفه خیلی ضرر میتونه وارد کنه .

ahmad4u
شنبه 19 اسفند 1391, 20:14 عصر
مثل اینکه بالاخره درگاه بانک ملت درست شد

2undercover
شنبه 19 اسفند 1391, 20:28 عصر
بله مشکل این بود که پورت های VPN های غیرقانونی رو مسدود کرده بودن و سازمان ها هم که از این همین ها استفاده می کردن دچار مشکل شده بودن! بعضی وقت ها اخبار نگاه کردن هم بد نیست!:دی

ahmad4u
شنبه 19 اسفند 1391, 23:29 عصر
بله مشکل این بود که پورت های VPN های غیرقانونی رو مسدود کرده بودن و سازمان ها هم که از این همین ها استفاده می کردن دچار مشکل شده بودن! بعضی وقت ها اخبار نگاه کردن هم بد نیست!:دی

خوب اینو که من قبلا (http://barnamenevis.org/showthread.php?387035-%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA-%D8%A7%D8%B4%DA%A9%D8%A7%D9%84-%DB%8C%D8%A7%D8%A8%DB%8C-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA-%D9%85%D9%84%D8%AA&p=1718606&viewfull=1#post1718606) گفته بودم لازم نبود اخبار نگاه کنی :متفکر:

HyperMan
پنج شنبه 15 فروردین 1392, 01:32 صبح
سلام دوستان.
راستش این تاپیک رو از گوگل پیدا کردم.
دیدم بهتره سوالم رو همینجا بپرسم. همه روشهای گفته شده رو تست کردم. اما نشد.
من فروشگاه دارم که با استفاده از پرستا شاپ بالا اومده و پرداخت آنلاین بانک ملتش مشکل داره و ارور زیر رو میده متاسفانه:


Fault

Array ( [faultcode] => soap:Client [faultstring] => Unmarshalling Error: For input string: "text" )

ممنون میشم راهنماییم کنید.