PDA

View Full Version : مشکل: درگاه بانک ملت با nusoap و دریافت خطا



Cyletech
پنج شنبه 10 اسفند 1391, 23:38 عصر
سلام،

من برای اولین بار درگاه بانکی (الآن ملت) رو نوشتم. از soap و nusoap هم استفاده نکرده بودم پیش از این. موقع اجرا خطای زیر رو دریافت میکنم.

Function ("getError") is not a valid method for this service
حتی با کامنت کردن اون خط، به خط‌های دیگه گیر میده و مشابه خطای بالا رو میده. من خطوط مرتبط رو براتون میذارم ممنون بررسی کنید. سپاسگذارم.


$client = new soapclient('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
$namespace = 'http://interfaces.core.sw.bps.com/';

if ($err = $client->getError()) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
exit;
}

if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
exit;
}
elseif($client->getError()){
echo '<h2>Error</h2><pre>' . $err . '</pre>';
exit;
}
else {
return $client->call('bpPayRequest',$parameters,$namespace);
}

ak1_2004
پنج شنبه 10 اسفند 1391, 23:41 عصر
جست و جو کنی پیدا می کنی !
اما معمولا این مشکل به خاطر عدم نصب soap client روی سرور هست !

Cyletech
جمعه 11 اسفند 1391, 10:14 صبح
جست و جو کنی پیدا می کنی !
اما معمولا این مشکل به خاطر عدم نصب soap client روی سرور هست !

ممنونم. من قبل از اینکه این تاپیک رو بزنم بسیار جستجو کردم اما به نتیجه‌ی مطلوبی نرسیدم. پس نظر شما اینه که soalclient نصب نیست. من اینکلود کردم فایلش رو (همونی که توی فایل نمونه که بانک داده اینکلود شده، nusoap.php)

MMSHFE
جمعه 11 اسفند 1391, 10:43 صبح
اگه nusoap رو include کردین، کلاینت رو بصورت زیر بسازین:

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

Cyletech
جمعه 11 اسفند 1391, 11:09 صبح
اگه nusoap رو include کردین، کلاینت رو بصورت زیر بسازین:

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

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


Array
(
[faultcode] => soap:Client
[faultstring] => Unexpected wrapper element bpPayRequest found. Expected {http://interfaces.core.sw.bps.com/}bpPayRequest.
)

MMSHFE
جمعه 11 اسفند 1391, 12:24 عصر
کد کاملتون رو بگذارین تا ببینیم مشکل چیه

Cyletech
جمعه 11 اسفند 1391, 13:33 عصر
کد کاملتون رو بگذارین تا ببینیم مشکل چیه

سپاسگذارم.


$parameters = array(
'terminalId'=>'terminal_id', #terminal id ke az bank daryaft kardid
'userName' => 'username', #username ke az band daryaft kardid
'userPassword' => 'password', #password ke az bank daryaft kardid
'orderId' => rand(),
'amount' => $amount,
'localDate' => date('Ymd'),
'localTime' => date('H:i:s'),
'additionalData' => '',
'callBackUrl' => 'http://'.$_SERVER['SERVER_NAME'].'users/member/payment/pay/callback/id:'.$this->Auth->user('id'),
'payerId' => '0'
);

//$client = new soapclient('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
$client = new NuSOAP_Client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl', 'wsdl');
$namespace = 'http://interfaces.core.sw.bps.com/';

if ($err = $client->getError()) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
exit;
}

if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
exit;
}
elseif($client->getError()){
echo '<h2>Error</h2><pre>' . $err . '</pre>';
exit;
}
else {
return $client->call('bpPayRequest',$parameters,$namespace);
}

MMSHFE
جمعه 11 اسفند 1391, 13:50 عصر
ظاهراً کدتون نباید مشکلی داشته باشه و مشکل توی وب سرویسه. اما با اینحال این کد رو تست کنید:


$parameters = array(
'terminalId' => 'terminal_id', #terminal id ke az bank daryaft kardid
'userName' => 'username', #username ke az band daryaft kardid
'userPassword' => 'password', #password ke az bank daryaft kardid
'orderId' => rand(),
'amount' => $amount,
'localDate' => date('Ymd'),
'localTime' => date('H:i:s'),
'additionalData' => '',
'callBackUrl' => 'http://'.$_SERVER['SERVER_NAME'].'users/member/payment/pay/callback/id:' . $this->Auth->user('id'),
'payerId' => '0'
);

$client = new NuSOAP_Client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl', 'wsdl');
$namespace = 'http://interfaces.core.sw.bps.com/';
if ($err = $client->getError()) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
exit;
}
elseif ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
exit;
}
else {
return($client->call('bpPayRequest', $parameters, $namespace));
}

اگه جواب نداد، خط آخر بجای return از var_dump استفاده کنید ببینیم چی چاپ میشه.

rezaonline.net
جمعه 11 اسفند 1391, 15:00 عصر
این متد رکوئستی که من برای میهن پال استفاده میکنم ، یه کمی تغییرش بده امیداوارم کارت رو راه بندازه

public function request($price = NULL , $order_id = NULL , $callback = NULL)
{
$parameters = array(
'terminalId' => self::terminalID ,
'userName' => self::username ,
'userPassword' => self::password ,
'orderId' => $order_id+5400 ,
'amount' => $price * 10 ,
'localDate' => date("Ymd") ,
'localTime' => date("His") ,
'additionalData' => '' ,
'callBackUrl' => $callback ,
'payerId' => '0' ,
);
$client = new nusoap_client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
$err = $client->getError();
if($err)
return -6;;


$result = $client->call('bpPayRequest', $parameters, 'http://interfaces.core.sw.bps.com/');
//print_r($result);
$res = explode (',', $result);
if( ! isset($res[0]) or $res[0] != "0" or ! isset($res[1]))
return -6;

else
{
return strip_tags($res[1]);
}


return -6;
}

Cyletech
جمعه 11 اسفند 1391, 18:04 عصر
اگه جواب نداد، خط آخر بجای return از var_dump استفاده کنید ببینیم چی چاپ میشه.
متاسفانه جواب نداد و این خروجی همونطور که خواسته بودید.


array(2) {
["faultcode"]=>
string(11) "soap:Client"
["faultstring"]=>
string(107) "Unexpected wrapper element bpPayRequest found. Expected {http://interfaces.core.sw.bps.com/}bpPayRequest."
}
متاسفانه پارامتر دوم رو برای کلاس soap_client میفرستم خطای بالا رو میده. وقتی پارامتر دوم رو حذف کنم عمل میکنه و خروجی هم میگیرم همونطور که باید باشه ولی مسئله اینجاست اصلا به سایت بانک مراجعه نمیکنه و _POST به صفحه‌ی من ارسال نمیشه که به متغیر SaleReferenceId خطا میگیره و میگه وجود نداره. بنظر شما چرا به صفحه‌ی پرداخت هدایت نمیکنه؟ سپاسگذارم.

rezaonline.net جان کد‌های تقریبا این قسمتش مشابه هست. فقط تابع اولی که نوشته بودم (توی مثال‌های خود بانک بود) جواب نمیداد. از کد شما فهمیدم که تاریخ local اشتباست و اصلاحش کردم. دستت درد نکنه

rezaonline.net
جمعه 11 اسفند 1391, 21:20 عصر
متد برگشت هم برات مینویسم امیدوارم به دردت بخوره .

public function verify($price = NULL ,$order_id = NULL , $au = NULL)
{
//print_r($_POST);
$RefId = @$_POST['RefId']; // notNeed
$ResCode = @$_POST['ResCode'];
$SaleOrderId = (int) @$_POST['SaleOrderId'];
$SaleReferenceId = @$_POST['SaleReferenceId'];
//Logs::model()->add('SaleReferenceId',$SaleReferenceId .'-'.$RefId);

$this->SaleReferenceId = $SaleReferenceId;
/**/
//check
if($SaleOrderId != $order_id+5400 or $RefId!=$au or ! isset($_POST['ResCode']))
{
Logs::model()->add('برگشت بانک ملت','خطا : ورودی نامعتبر است !');
return false;
}

if($ResCode !=0)
{
return false;
#Logs::model()->add('برگشت بانک ملت','خطا : پرداخت انجام نشد .');
}

$client = new nusoap_client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
$err = $client->getError();
if ($err)
{
Logs::model()->add('برگشت بانک ملت',"_خطا : " . strip_tags($err) );
return false;
}


$parameters = array(
'terminalId' => self::terminalID ,
'userName' => self::username ,
'userPassword' => self::password ,
'orderId' => $SaleOrderId ,
'saleOrderId' => $SaleOrderId ,
'saleReferenceId' => $SaleReferenceId
);

// Call the SOAP method
unset($result);
$result = $client->call('bpVerifyRequest', $parameters,'http://interfaces.core.sw.bps.com/');

// Check for a fault
//if ($client->fault)
//Logs::model()->add('برگشت بانک ملت','_خطا در اتصال به بانک .');


$err = $client->getError();
if ($err)
{
Logs::model()->add('برگشت بانک ملت',"__خطا : " . strip_tags($err) );
return false;
}


if(isset($result) and $result==0)
{
//settel
unset($result);
$result = $client->call('bpSettleRequest', $parameters,'http://interfaces.core.sw.bps.com/');
if ($client->fault)
{
Logs::model()->add('برگشت بانک ملت','خطا در اتصال به بانک .');
return false;
}


$err = $client->getError();
if ($err)
{
Logs::model()->add('برگشت بانک ملت',"خطا : " . strip_tags($err) );
return false;
}


if(isset($result) and $result==0)
{
return true;
}
}
return false;
}

Cyletech
شنبه 12 اسفند 1391, 12:21 عصر
متد برگشت هم برات مینویسم امیدوارم به دردت بخوره .حتما حتما بکارم میاد. دستت درد نکنه. من هر دو نمونه‌ای که بهم دادی رو نگه میدارم. ممنونم ازت. ولی فعلا توی همون رفتش هم من مشکل دارم؛ ایشاالله با کمک شما دوستان بتونم حلش کنم.

Cyletech
یک شنبه 13 اسفند 1391, 12:00 عصر
دوستان کسی اطلاعی از راه حل مشکلی که گفتم داره؟ ممنون میشم بهم کمک کنید

rezaonline.net
یک شنبه 13 اسفند 1391, 14:42 عصر
اول اینکه توی nu_soap پارامتر دوم رو ست نکن ، طبق چیزی که نوشتم (اینی که نوشتم الان کار میکنه روی میهن پال) .
مساله دوم order_id باید یکتا فرستاده بشه به بانک ، یا مثل من حساب کن یا از time() استفاده کن .
حالا متد bpPayRequest رو درخواست کن و نتیجه شو بذار اینجا .
باید دو قسمتی باشه ، که قسمت اولش صفر میشه اگر صحیح باشه .

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

کدهایی رو هم که نوشتی بذار اینجا بررسی کنیم .

Cyletech
یک شنبه 13 اسفند 1391, 21:54 عصر
چقدر داغونه؛ من از آخرین نسخه‌ی PHP استفاده می‌کنم. قبل از این، اون کد دو قسمتی رو بدست میاوردم ولی به صفحه‌ی پرداخت نمیرفت! بعد حالا نمیدونم چی شده وقتی از محتویات /lib در پوشه‌ی نمونه‌ی خود بانک هست استفاده می‌کنم خطای زیر رو میده:

Warning (2): Creating default object from empty value
تصمیم گرفتم آخرین نسخه‌ی nusoap رو نصب کنم که خطا برطرف شد اما حالا خروجی درخواست، false هست.
بابت اطلاعات هم ممنونم. اون order_id رو اصلاح کردم. ممنونم ازت.


$parameters = array(
'terminalId'=>'terminal_id', #terminal id ke az bank daryaft kardid
'userName' => 'username', #username ke az band daryaft kardid
'userPassword' => 'password', #password ke az bank daryaft kardid
'orderId' => time(),
'amount' => $amount,
'localDate' => date('Ymd'),
'localTime' => date('His'),
'additionalData' => '',
'callBackUrl' => 'http://'.$_SERVER['SERVER_NAME'].'/users/member/payment/pay/callback/id:'.$this->Auth->user('id'),
'payerId' => '0'
);

$client = new nusoap_client('https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw?wsdl');
$namespace = 'http://interfaces.core.sw.bps.com/';

if ($err = $client->getError()) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
exit;
}

if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
exit;
}
elseif($client->getError()){
echo '<h2>Error</h2><pre>' . $err . '</pre>';
exit;
}
else {
return $client->call('bpPayRequest',$parameters,$namespace);
}


آی پی رو به بانک اعلام کردی ؟من فقط برنامه‌نویس پروژه‌ای هستم و اطلاعی از این‌ها ندارم. اما میپرسم بهتون اطلاع میدم.

rezaonline.net
یک شنبه 13 اسفند 1391, 23:35 عصر
الان این هیچ مشکلی نداره .
ترمینال و یوزر نیم و پسورد رو درست بزنی حله .

Cyletech
دوشنبه 14 اسفند 1391, 12:51 عصر
درسته، احتمالا مشکل اینجا بود که من روی لوکال سعی میکردم جواب بگیرم. روی سرور درست عمل میکنه و خروجی همون کد دو بخشی هست. حالا بذارید یه تست کامل کنم نتیجه‌شو بهتون اعلام میکنم. بسیار بسیار بسیار ممنونم :قلب:

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

متاسفانه، اطلاعات ارسال شده نامعتبر است و شما مجاز به انجام تراكنش نمي باشيد

rezaonline.net
دوشنبه 14 اسفند 1391, 22:21 عصر
باید اون refID رو با متد post بفرستی .
اون قسمت کدی که میفرستیش به بانک بذار اینجا .

imanitc
سه شنبه 15 اسفند 1391, 08:29 صبح
دوستان من خودم براي بانک ملت از اين کدها استفاده کردم خيلي راحت خوب بود. شما هم استفاده کنيد

Cyletech
سه شنبه 15 اسفند 1391, 12:25 عصر
دوستان خوبم، از همتون سپاسگذارم. اون خطا رو بانک همینطوری میده. گاهی درست میشه و گاهی این خطا رو میده. (دلیلش رو نمیدونم!) . بهرحال از همتون ممنونم.
فقط یک سوالی دارم، من مبلغی که کاربر واریز میکنه رو بخوام دریافت کنم در callback چطوری دریافت کنم؟ این الآن آخرین مشکلیه که دارم. ممنونم

Cyletech
سه شنبه 15 اسفند 1391, 12:27 عصر
دوستان من خودم براي بانک ملت از اين کدها استفاده کردم خيلي راحت خوب بود. شما هم استفاده کنيد عزیزم اطلاعات درگاه رو از توی فایل بردار. برای ایمنی درگاهت میگم

MMSHFE
سه شنبه 15 اسفند 1391, 12:32 عصر
دوستان خوبم، از همتون سپاسگذارم. اون خطا رو بانک همینطوری میده. گاهی درست میشه و گاهی این خطا رو میده. (دلیلش رو نمیدونم!) . بهرحال از همتون ممنونم.
فقط یک سوالی دارم، من مبلغی که کاربر واریز میکنه رو بخوام دریافت کنم در callback چطوری دریافت کنم؟ این الآن آخرین مشکلیه که دارم. ممنونم
شما معمولاً باید موقع سفارش اطلاعات خرید رو (مبلغ و شماره ref و... که تولید کردین) توی دیتابیس در یک جدول ذخیره کنید و وقتی خرید OK شد، شماره ref که بانک میده رو توی جدول جستجو کنید و مبلغ رو پیدا و Verify کنید.

Cyletech
سه شنبه 15 اسفند 1391, 21:54 عصر
آقایون من از همه‌تون کمال تشکر رو دارم. به لطف همه‌ی شما تونستم درگاه رو درست بنویسم و همه‌چی درست هست. خیلی خیلی ممنونم از همه‌تون

Cyletech
چهارشنبه 16 اسفند 1391, 22:52 عصر
ببخشید دوستان، همیشه این اتفاق میوفته؟! که یه شب درگاه درست باز بشه و پرداخت انجام بشه و شب بعد اصلا call مقدار برگشتیش FALSE هست! آیا این درسته؟ گاهی هم که صفحه درگاه باز میشد و می‌گفت ورودی‌ها اشتباهه. 15 دقیقه بعد درست می‌شد. این‌ها طبیعیه؟ من دیشب کد رو امتحان کردم و درست بود. اما حالا خود nusoap هم اررور میده، خطای زیر:

Notice (8): Undefined index: [APP/Vendor/nusoap/nusoap.php, line 6636]
و ورودی هم که از call میگیرم FALSE هست.

ممنون میشم باز مثل همیشه در این رابطه هم کمکم کنید. من واقعا گیج شدم.

rezaonline.net
چهارشنبه 16 اسفند 1391, 23:04 عصر
بانک ملت از دیشب قطع شده و قطعی تا کنون ادامه داره .
امیدوارم فردا درست کنند .

hamed_n911
دوشنبه 21 اسفند 1391, 12:15 عصر
با سلام به همه دوستان
من تازه کد های sample رو از بانک دریافت کردم از مراحلی قبلی که بیان کردین هم استفاده کردم تا به این خطا رسیدم

لطفا راهنمایی کنید، من از sample code خود بانک دارم استفاده میکنم.





$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];





خطایی که به من میده اینه :
Fault

Array ( [faultcode] => soap:Client [faultstring] => Unexpected wrapper element bpPayRequest found. Expected {http://interfaces.core.sw.bps.com/}bpPayRequest. )

Cyletech
سه شنبه 22 اسفند 1391, 17:11 عصر
دوستان من یه مشکلی دارم که واقعا بدون کمک شما نمیتونم حلش کنم. کاربر به صفحه‌ی درگاه متصل میشه و تراکنش انجام میشه و برمیگرده و من نوشتم که بگه باموفقیت انجام شد اونم نشون میده ولی پولی که درخواست کرده بود به حساب ما نمیاد و برمیگرده به حساب کاربر. به عبارتی تراکنش به درستی انجام نمیشه. من براتون هرچیزی که نوشتم رو ضمیمه کردم. خیلی خیلی ممنون میشم بهش نگاه کنید و ایراداتش رو بواسطه تجربیاتتون بهم بگین تا درست کنم. خیلی سپاسگذارم. خیلی. :قلب:
اون فایل جاوا اسکریپت هم درسته و سر جاش گذاشتم ولی توی فایل‌های ضمیمه نگذاشتم دیگه.

aliphp1
سه شنبه 22 اسفند 1391, 18:13 عصر
سلام
این که قبل از تراکنش مبلغ رو در دیتابیس ذخیره کنیم و بعد از پرداخت از همون استفاده کنیم فکر می کنم ممکنه مشکل امنیتی ایجاد بکنه
راهی نیست که مبلغ رو مستقیم از خود بانک بگیریم یا حداقل چک کنیم که شماره تراکنش و مبلغ با هم می خونه یا نه (توی کال بک )
دوستانی که با تجربه هستن نظرشون رو بگن لطفا در این مورد

MMSHFE
چهارشنبه 23 اسفند 1391, 01:12 صبح
نه ببینید شما موقع فروش یک کد منحصربفرد تحت عنوان Reference Number تولید میکنید و به بانک میدین و همون رو باید توی دیتابیس همراه با مبلغ و... ذخیره کنید و بانک در جواب تراکنش به شما Reference Number و Result Number رو میده (refNum و resNum) که اولی برای اینه که بدونید جوابی که اومده مال کدوم تراکنش توی سایت شماست و دومی نتیجه است که فکر میکنم ملت به refNum میگه orderId و به resNum میگه ResCode که این تفاوت در اسامی زیاد مهم نیست. حالا اگه تابع خاصی رو توی وب سرویس بانک تحت عنوان Settlement (فکر کنم واسه ملت اسمش bpSettleRequest بود) صدا نزنید، خرید شما قطعی نمیشه و برگشت میخوره. پس برای بانک ملت سه مرحله کار لازمه:
1- درخواست خرید با bpPayRequest
2- بررسی صحت خرید با bpVerifyRequest
3- تأیید و قطعی سازی خرید با bpSettleRequest
البته ملت متدهای دیگری هم اضافه کرده مثل bpInquiryRequest که استعلام وجه رو انجام میده و bpReversalRequest که درخواست برگشت وجه رو میفرسته (مثلاً اگه خرید انجام شد ولی دیدین کالای موردنظر تو انبار تمام شده و خواستین پول مشتری رو برگردونید).

MMSHFE
پنج شنبه 24 اسفند 1391, 09:16 صبح
این که قبل از تراکنش مبلغ رو در دیتابیس ذخیره کنیم و بعد از پرداخت از همون استفاده کنیم فکر می کنم ممکنه مشکل امنیتی ایجاد بکنه
چه مشکل امنیتی؟ سیستم چک کردن مبلغ اینطوریه که شما مبلغ و شماره تراکنش رو به بانک اعلام میکنید و بهتون میگه که تراکنش با همون مبلغ انجام شده یا نه.

Cyletech
یک شنبه 27 اسفند 1391, 12:29 عصر
ببخشید دوستان، یک مشکلی برام پیش اومده؛ شرط زیر وقتی به صفحه‌ی callback میاد اجرا نمیشه. دلیلش چی میتونه باشه؟ ممنونم ازتون.

if (isset($_POST['‫‪saleReferenceId‬‬']) && !empty($_POST['‫‪saleReferenceId‬‬']))

rezaonline.net
یک شنبه 27 اسفند 1391, 18:09 عصر
saleReferenceId‬‬ نه SaleReferenceId‬‬

rezaonline.net
پنج شنبه 08 فروردین 1392, 22:19 عصر
<?php

// vaghti ke hanooz submit nakarde

if (!empty($this->request->data) && !isset($this->request->params['pass'][2]))
{
$resRef = $this->Mellat->request($this->request->data['quantity']);
if (!isset($resRef[1]))
{
$this->Session->setFlash(__d('member', 'mellat_has_problem') , 'Info');
return FALSE;
}

$this->Payment->save(array(
'user_id' => $this->Auth->user('id') ,
'time' => time() ,
'amount' => $this->request->data['quantity'],
'ref_id' => $resRef[1]
));
$this->set('refId', $resRef[1]);
}

// bad az inke submit kard o raft o bargasht be safheye callback

if (isset($this->request->params['pass'][2]) && $this->request->params['pass'][2] == 'callback')
{
if (isset($_POST['SaleReferenceId']) && !empty($_POST['SaleReferenceId']))
{
if ($this->Payment->find('count', array(
'conditions' => array(
'ref_id' => $_POST['RefId'],
'user_id' => $this->Auth->user('id')
)
)) > 0)
{
$this->set('callback', $_POST['SaleReferenceId']);
$pool = $this->Payment->find('first', array(
'conditions' => array(
'user_id' => $this->Auth->user('id') ,
'ref_id' => $_POST['RefId']
) ,
'fields' => 'amount'
));
$this->Payment->updateAll(array(
'sale_order_id' => $_POST['SaleOrderId'],
'sale_reference_id' => $_POST['SaleReferenceId']
) , array(
'ref_id' => $_POST['RefId'],
'user_id' => $this->Auth->user('id')
));
$amount = $pool['payments']['amount'] / 10; //vase toman kardanesh
ClassRegistry::init('members')->updateAll(array(
'credit' => "(`credit`+{$amount})"
) , array(
'id' => $this->Auth->user('id')
));
}

if ($this->Mellat->verify($_POST['SaleOrderId'], $_POST['SaleReferenceId']))
{
$this->Payment->updateAll(array(
'verified' => "'Y'",
'sale_reference_id' => $_POST['SaleReferenceId']
) , array(
'ref_id' => $_POST['RefId']
));
}
}

if (isset($_POST['ResCode']))
if (isset($_POST['ResCode']))
{
if ($_POST['ResCode'] == '0') $element = 'Errors';
else $element = 'Successes';
$this->Session->setFlash($this->Mellat->get_error($_POST['ResCode']) , $element);
}
}

roytaa
سه شنبه 03 اردیبهشت 1392, 22:38 عصر
خیلی خوشحال هستم که دیدم یکی بلاخره راجع به بانک ملت حرف زده
اقا من هیچ نمونه کدی نداشتم و چشم بسته کدمو ساختم در اصل
یه مشکل دارم تو برگشت
$_POST['SaleReferenceId']
خالی هست و همچین چیزی دریاف میکنم در کلیه POST ها
Array ( [RefId] => 26953931B1BE983C [ResCode] => 17 [SaleOrderId] => 571211 [SaleReferenceId] => [CardHolderInfo] => ) 1

vebcir
دوشنبه 09 اردیبهشت 1392, 12:56 عصر
داداش اسکریپتت کار نکرد
میشه راهنمایی کنی؟
ممنونم

vebcir
دوشنبه 09 اردیبهشت 1392, 13:07 عصر
دوستان من یه مشکلی دارم که واقعا بدون کمک شما نمیتونم حلش کنم. کاربر به صفحه‌ی درگاه متصل میشه و تراکنش انجام میشه و برمیگرده و من نوشتم که بگه باموفقیت انجام شد اونم نشون میده ولی پولی که درخواست کرده بود به حساب ما نمیاد و برمیگرده به حساب کاربر. به عبارتی تراکنش به درستی انجام نمیشه. من براتون هرچیزی که نوشتم رو ضمیمه کردم. خیلی خیلی ممنون میشم بهش نگاه کنید و ایراداتش رو بواسطه تجربیاتتون بهم بگین تا درست کنم. خیلی سپاسگذارم. خیلی. :قلب:
اون فایل جاوا اسکریپت هم درسته و سر جاش گذاشتم ولی توی فایل‌های ضمیمه نگذاشتم دیگه.

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

moh3n_lucky
جمعه 21 تیر 1392, 13:48 عصر
دوستان سلام؛
با استفاده از راهنمایی های عزیزان و استادان گرامی، موفق به نوشتن یک کلاس برای درگاه پرداخت بانک ملت شدم که خودتون میتونید بسته به کار خودتون شخصی سازی کنید.
سعی کردم در متن کدها، راهنمایی و کامنت های لازم را هم بگذارم. (SELF COMMENTED)
به امید اینکه مثمر ثمر واقع شود.

لینک دانلود :
http://s2.picofile.com/file/7842377739/mellat_epay_sample.rar.html

اگر مشکلی داشتید، در خدمت هستم.

dr.farhad
جمعه 28 تیر 1392, 12:14 عصر
سلام بر دوستان کارشناس طاعات و عبادات قبول درگاه حق،
من برنامه نویس نیستم اما در این زمینه مطالعه میکنم پزشک هستم و مشکلی برای سایت موسسه حیریه ای که مدیریت میکنم پیش آمده ، سعی میکنم مشکلات سایت را خودم رفع کنم ، خیلی گشتم تا به این تایپیک رسیدم که واقعا زحمت میکشید و مشورت میدهید، مشکل اینه که چند روزه که درگاه سایت ما به بانک ملت متصل نمیشه و این خطا رو میده:

Warning: include(nusoap/nusoap.php) [function.include (http://www.asayeshgahqom.com/payment/function.include)]: failed to open stream: No such file or directory in /home/asayes/public_html/payment/Mellat.php on line 20

Warning: include(nusoap/nusoap.php) [function.include (http://www.asayeshgahqom.com/payment/function.include)]: failed to open stream: No such file or directory in /home/asayes/public_html/payment/Mellat.php on line 20

Warning: include() [function.include (http://www.asayeshgahqom.com/payment/function.include)]: Failed opening 'nusoap/nusoap.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/asayes/public_html/payment/Mellat.php on line 20

Fatal error: Class 'soapclient' not found in /home/asayes/public_html/payment/Mellat.php on line 24

نمیدونم ربطی داره یا نه ولی این مشکل تقریبا بعد از ابن رخ داد که برای بهتر شدن وضعیت سئوی سایت پیوند یکتای سایت رو از id به عنوان مطلب تغییر دادم اما حالا اگر به حالت قبل هم برگردونم حل نمیشه
ممنون میشم اگر راهنمایی بفرمایید چون یرای چمع آوری کمکهای مردمی تبلیغات کردیم حالا درگاه کار نمیکنه
آدرس سایت: asayeshgahqom.com
ایمیل:asayeshgahqom@yahoo.com

55348812
سه شنبه 01 مرداد 1392, 12:13 عصر
با سلام
باید خدمدتتون عرض کنم که من از تمامی کدهای بالا که گفتین به شکلهای مختلف استفاده کردم اما یه مشکل خیلی پیش پا افتاده دارم اونم اینکه تو فایلی که بانک قرار فراخونی کنه و نتیجه کار رو با متد post ارسال کنه من $_POST('RefId ') و بقیه پارامترهای دیگم به هیج عنوان هیچی بر نمی گردونن با بانک هم صحبت کردم گفتن که اطلاعات داره post میشه امام من هیچی از متد post نمی تونم بخونم
ممنون میشم اگه بگید کار خاصی باید انجام بدم تا بتونم مقادیر رو بخونم از متد post یا نه؟

aminlv
دوشنبه 29 مهر 1392, 04:58 صبح
من یه مشکل برخوردم توی سایت یه نسخ پرداخت ملت پیدا کردم همه چی هم انجام میشه ولی اصلاح سند می خوره و پول بر میگرده به حساب فرستنده!

تا اونجایی که می دونم از بعد این شاپرک شدن باید حتما بعد از پرداخت متد verify و settle انجام بشه تا برنگرده به حساب طرف و ظاهرا هم هست توی callback.php

ممنون میشم اگر کسی از دوستان می تونه چک کنه ببینه چیه ماجرا.
112081

capitan-h
پنج شنبه 09 آبان 1392, 12:31 عصر
با سلام
من به خطا 24 بر می خورم یعنی (( '‫اطلاعات كاربري پذيرنده نامعتبر است‬' )) دلیل این خطا چی می تونه باشه؟
گاهی اوقات هم خطای 21 میده(('پذيرنده نامعتبر است‬')).
پسورد و نام کاربری و شماه ترمینال همگی چک کردم درسته.
ip و موارد دیگه درست هست.
تو urlcallback این آدرس رو زدم درسته؟
http://www.example.com/bankphp/callback.php

MMSHFE
پنج شنبه 09 آبان 1392, 19:28 عصر
دوست عزیز، توی Callback باید آدرس صفحه ای از سایت خودتون رو بدین که بانک باید نتیجه تراکنش رو براش پس بفرسته. example.com یک دامنه نمونه هست (Example = مثال) که توی کدها از این اسم استفاده میشه و باید بجاش دامنه خودتون رو بگذارین.

capitan-h
شنبه 11 آبان 1392, 07:56 صبح
خیلی ممنون. اما من عمدا example گذاشتم تو فروم، ولی تو کد خودم درست نوشتم.(سایت مورد نظر خودم) حالا میشه دوباره مطلب بالا رو بخونید و ببینید مشکل کجاست. ممنون

MMSHFE
شنبه 11 آبان 1392, 08:19 صبح
خوب خطا که خیلی واضحه. اطلاعات پذیرنده معتبر نیست (یا پذیرنده معتبر نیست). ببینید IP سایتتون توی بانک چی ثبت شده. بعضی بانکها هم (مثل پارسیان) اگه سایتتون روی سرورهای خارجی باشه، باید به سرور جداگانه ای وصل بشین. البته ملت اگه این خطا رو بده معمولاً نام کاربری و رمز عبور رو اشتباه وارد کردین. از پشتیبانی دوباره اطلاعات رو بگیرین. گاهی اوقات اشتباه میفرستن (چند مورد تا حالا پیش اومده).

capitan-h
شنبه 11 آبان 1392, 09:05 صبح
خیلی ممنون از پاسخ شما.
پس شاید اطلاعات اشتباه دادن چون من تمام موارد(پسورد، نام کاربری، شماره ترمینال و ip ) رو چک کردم. بعد سوال رو مطرح کردم که سوال اضافی تو فروم نگذارم. ممنون از توجه

capitan-h
یک شنبه 12 آبان 1392, 11:21 صبح
سلام
صفحه پرداخت حتما به session نیاز داره؟

abtahi16
چهارشنبه 16 بهمن 1392, 00:31 صبح
سلام دوستان!
کسی نمونه کد اتصال به درگاه رو داره که ازش جواب گرفته باشه؟
یه کد ساده میخوام بدون تم، خودم تم واسش درست می کنم. فقط اینکه کد کار کنه واسم مهمه!
ممنون میشم اگر کسی داره واسم میل کنه!
abtahi16@gmail.com

mamal72
شنبه 23 فروردین 1393, 10:14 صبح
سلام. وقت بخیر.
من توی callback پرداخت مشکل دارم. اطلاعات callback به درستی دریافت میشه و هیچ مشکلی نداره. اما وقتی متد ‫‪bpVerifyRequest‬‬ رو اجرا میکنم، نتیجه‌اش یه پیغام خطاست که خب درست درکش نمیکنم. به نظرتون مشکل کجاست؟
کد:


$params = array(
'terminalId' => 'x',
'userName' => 'y',
'userPassword' => 'z',
'orderId' => Input::get('SaleOrderId'),
'‫‪saleOrderId‬‬' => Input::get('SaleOrderId'),
'‫‪saleReferenceId‬‬' => Input::get('SaleReferenceId')
);
$result = $client->call('‫‪bpVerifyRequest‬‬', $params, $namespace);
return $result;

نتیجه:



{
"faultcode": "soap:Client",
"faultstring": "Error reading XMLStreamReader."
}

mamal72
شنبه 23 فروردین 1393, 13:28 عصر
برای استفاده از nusoap تمامی فایل‌های داخل پوشه lib لازمه؟ چون من فقط محتوای nusoap.php رو توی یه فایلی کپی کردم و از اون استفاده میکنم.

misaqkfm
پنج شنبه 25 اردیبهشت 1393, 19:38 عصر
سلام دوستان عزیز جدیدترین کلاس ها و کدهای اتصال به درگاه بانک ملت (با سیستم شاپرک) در تاپیک زیر دنبال کنید
http://barnamenevis.org/showthread.php?451879-%D8%AF%D8%B1%DA%AF%D8%A7%D9%87-%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA-%D9%85%D9%84%D8%AA&highlight=%D8%A8%D8%A7%D9%86%DA%A9+%D9%85%D9%84%D8 %AA

msfa2005
یک شنبه 23 آذر 1393, 12:13 عصر
سلام دوستان و مهندسین گرامی
من درگاه پرداخت رو برای سایتم راه انداختم اما ارور زیر رو میده کسی میتونه راهنمایی کنه
ممنون
Deprecated: Function split() is deprecated in /home/u711462261/public_html/pey/admin/php/sys.php on line 22

Deprecated: Function split() is deprecated in /home/u711462261/public_html/pey/admin/php/banks/epay.php on line 36
SendURL('','POST',{RefId:'3CFD5DA1BC63E187'});

msfa2005
دوشنبه 24 آذر 1393, 08:25 صبح
سلام دوستان من اسکریپتو دانلود کردم و نصب کردم اما این پیغام رو میده نمیدونم چکارش کنم لطفا راهنمایی کنید
این پیغامو می ده :

Deprecated: Function split() is deprecated in /home/u711462261/public_html/pey/admin/php/sys.php on line 22

Deprecated: Function split() is deprecated in /home/u711462261/public_html/pey/admin/php/banks/epay.php on line 36
SendURL('','POST',{RefId:'8CD879D0146F1C65'});
که البته یکی از دوستان گفت بجای تابع split از تابع explode استفاده کن یا غیر فعال کن split رو که بلد نیستم
از مهندسین عزیز و برنامه نویسان گرامی خواهشمندم کمک کنید مرسی