PDA

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



shahedprimary
دوشنبه 05 بهمن 1388, 21:07 عصر
سلام
من یک اسریپت فروشگاه گرفتم وقتی می زنم در خط 44 این کد می نویسد خطا دارد

<?php
// This Script Publish In pps-co.ir
// Copyright 2010-2011 PPS-Co Group
// Countact US 0936 416 67 72 & info@pps-co.ir

class ControllerPaymentPEC extends Controller {
protected function index() {


$this->data['button_confirm'] = $this->language->get('button_confirm');
$this->data['button_back'] = $this->language->get('button_back');


$this->load->model('checkout/order');

$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);

$this->load->library('encryption');

$encryption = new Encryption($this->config->get('config_encryption'));

if($this->currency->getCode()!='RLS') {
$this->currency->set("RLS");
echo('<html><head><meta http-equiv="refresh" CONTENT="1; url=index.php?route=checkout/confirm"></head><body><table border="0" width="100%"><tr><td>&nbsp;</td><td style="border: 1px solid gray; font-family: tahoma; font-size: 14px; direction: rtl; text-align: right;">تنظیم ارز به ریال...<br /><br /><a href="index.php?route=checkout/cart"><b>بازگشت به فروشگاه</b></a></td><td>&nbsp;</td></tr></table></body></html>');
die();
}

$this->data['Amount'] = @$this->currency->format($order_info['total'], $order_info['currency'], $order_info['value'], FALSE);
$this->data['PIN']=$this->config->get('pec_PIN');
$this->data['RedirectURL'] = $this->url->https('payment/pec/callback&order_id=' . $encryption->encrypt($this->session->data['order_id']));
$this->data['ResNum'] = $this->session->data['order_id'];

$this->data['return'] = $this->url->https('checkout/success');
$this->data['cancel_return'] = $this->url->https('checkout/payment');

$this->data['back'] = $this->url->https('checkout/payment');

//

// require_once(HTTP_SERVER.'system/library/nusoap.php');

// @$soapclient2 = new soapclient2('https://www.pec24.com/pecpaymentgateway/eshopservice.asmx?wsdl','wsdl');
$client = new SoapClient("https://www.pec24.com/pecpaymentgateway/eshopservice.asmx?wsdl");

if((!$client))
die( "Can not connect to parsian.<br>" );

// $soapProxy = $client->getProxy() ;

$amount = intval($this->data['Amount']); // here is the posted amount
$authority = 0 ; // default authority
$status = 1 ; // default status
$callbackUrl = $this->url->https('payment/pec/callback&order_id=' . $encryption->encrypt($this->session->data['order_id']));

/* $params = array(
'pin' => $this->data['PIN'] ,
'amount' => $amount,
'orderId' => $order_info['order_id'],
'callbackUrl' => $callbackUrl,
'authority' => $authority,
'status' => $status
);

$sendParams=array($params) ;*/
$res=$client->PinPaymentRequest($this->data['PIN'] , $amount, $order_info['order_id'], $callbackUrl, $authority, $status);

$authority=$res->authority;
$status=$res->status;


if(($authority) and ($status==0)){

$this->data['action'] = "https://www.pec24.com/pecpaymentgateway/?au=".$authority;

} else {

$this->CheckState($status);
die();
}

//

$this->id = 'payment';
$this->template = $this->config->get('config_template') . 'payment/pec.tpl';

$this->render();
}

private function CheckState($status) {

switch($status){

case '0' :
break;

case '20' :
case '22' :
echo("پين فروشنده درست نميباشد.");
break;

case '30' :
echo("عمليات قبلا با موفقيت انجام شده است.");
break;

case '34' :
echo("شماره تراکنش فروشنده درست نميباشد.");
break;

default :
echo("خطای نامشخص");
break;
}

return true;
}

function verify_payment($authority){

require_once(HTTP_SERVER.'system/library/nusoap.php');


if($authority){

// $soapclient2 = new soapclient2('https://www.pec24.com/pecpaymentgateway/eshopservice.asmx?wsdl','wsdl');
$client = new SoapClient("https://www.pec24.com/pecpaymentgateway/eshopservice.asmx?wsdl");

if ((!$client))
{echo "Error: can not connect to parsian.<br>";return false;}

else {

$status = 1 ; // default status

/* $params = array(
'pin' => $this->data['PIN'] ,
'authority' => $authority,
'status' => $status
); // to see if we can change it

$sendParams = array($params); */
$res = $client->PinPaymentEnquiry($this->data['PIN'] , $authority, $status);
$status = $res->status;

$this->CheckState($status);

if($status==0)
return true;

else {
return false;
}

}
}

else {
return false;
}


return false;
}

public function callback() {
$this->load->library('encryption');

$encryption = new Encryption($this->config->get('config_encryption'));
$au = @$this->request->get['au'];
$ResNum=@$this->request->get['order_id'];
$MerchantID=$this->config->get('pec_PIN');
$debugmod=false;

$this->load->model('checkout/order');

if((verify_payment($au)) or ($debugmod==true)) {

$order_info = $this->model_checkout_order->getOrder($ResNum);

if ($order_info) { //verify here

$Amount = @$this->currency->format($order_info['total'], $order_info['currency'], $order_info['value'], FALSE);
$order_id=$order_info['order_id'];

$this->model_checkout_order->confirm($order_id, $this->config->get('pec_order_status_id'),'ماره رسيد ديجيتالي بانک سامان Authority: '.$au);



$this->response->setOutput('<html><head><meta http-equiv="refresh" CONTENT="2; url=index.php?route=checkout/success"></head><body><table border="0" width="100%"><tr><td>&nbsp;</td><td style="border: 1px solid gray; font-family: tahoma; font-size: 14px; direction: rtl; text-align: right;">با تشکر پرداخت تکمیل شد. لطفا چند لحظه صبر کنید و یا <a href="index.php?route=checkout/success"><b>اینجا کلیک نمایید</b></a></td><td>&nbsp;</td></tr></table></body></html>');






}

} else {

$this->response->setOutput('<html><body><table border="0" width="100%"><tr><td>&nbsp;</td><td style="border: 1px solid gray; font-family: tahoma; font-size: 14px; direction: rtl; text-align: right;">خطا در پرداخت.<br /><br /><a href="index.php?route=checkout/cart"><b>بازگشت به فروشگاه</b></a></td><td>&nbsp;</td></tr></table></body></html>');

}
}
}
?>اصلاً در این اسکریپت nusoap.php وجود ندارد می شه کمک کنید این کد را راه بندازم یا اینکه بخش نیاز به soap حذف شود
بخش مربوط به بانک سامان بدون هیچ اشکال کار می کنه اینم کد بانک سامان

<?php
// This Script Publish In pps-co.ir
// Copyright 2010-2011 PPS-Co Group
// Countact US 0936 416 67 72 & info@pps-co.ir

class ControllerPaymentSB24 extends Controller {
protected function index() {


$this->data['button_confirm'] = $this->language->get('button_confirm');
$this->data['button_back'] = $this->language->get('button_back');

$this->data['action'] = 'https://acquirer.sb24.com/CardServices/controller';

$this->load->model('checkout/order');

$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);

$this->load->library('encryption');

$encryption = new Encryption($this->config->get('config_encryption'));

if($this->currency->getCode()!='RLS') {
$this->currency->set("RLS");
echo('<html><head><meta http-equiv="refresh" CONTENT="1; url=index.php?route=checkout/confirm"></head><body><table border="0" width="100%"><tr><td>&nbsp;</td><td style="border: 1px solid gray; font-family: tahoma; font-size: 14px; direction: rtl; text-align: right;">تنظیم ارز به ریال...<br /><br /><a href="index.php?route=checkout/cart"><b>بازگشت به فروشگاه</b></a></td><td>&nbsp;</td></tr></table></body></html>');
die();
}

$this->data['Amount'] = @$this->currency->format($order_info['total'], $order_info['currency'], $order_info['value'], FALSE);
$this->data['MID']=$this->config->get('sb24_MID');
$this->data['RedirectURL'] = $this->url->https('payment/sb24/callback&order_id=' . $encryption->encrypt($this->session->data['order_id']));
$this->data['ResNum'] = $this->session->data['order_id'];

$this->data['return'] = $this->url->https('checkout/success');
$this->data['cancel_return'] = $this->url->https('checkout/payment');

$this->data['back'] = $this->url->https('checkout/payment');

$this->id = 'payment';
$this->template = $this->config->get('config_template') . 'payment/sb24.tpl';

$this->render();
}

public function getState($State) {


switch($State){

case 'Canceled By User' :
return("تراکنش توسط خريدار کنسل شده است.");
break;
case 'Invalid Amount' :
return("مبلغ سند برگشتی، از مبلغ تراکنش اصلی بيشتر است.");
break;
case 'Invalid Transaction' :
return("درخواست برگشت يک تراکنش رسيده است، در حالی که تراکنش اصلی پيدا نمی شود.");
break;
case 'Invalid Card Number' :
return("شماره کارت اشتباه است.");
break;
case 'No Such Issuer' :
return("چنين صادر کننده کارتی وجود ندارد.");
break;
case 'Expired Card Pick Up' :
return("از تاريخ انقضای کارت گذشته است و کارت ديگر معتبر نيست.");
break;
case 'Allowable PIN Tries Exceeded Pick Up' :
return("رمز کارت (PIN) 3 مرتبه اشتباه وارد شده است در نتيجه کارت غير فعال خواهد شد.");
break;
case 'Incorrect PIN' :
return("خريدار رمز کارت (PIN) را اشتباه وارد کرده است.");
break;
case 'Exceeds Withdrawal Amount Limit' :
return("مبلغ بيش از سقف برداشت می باشد.");
break;
case 'Transaction Cannot Be Completed' :
return("تراکنش Authorize شده است ( شماره PIN و PAN درست هستند) ولی امکان سند خوردن وجود ندارد.");
break;
case 'Response Received Too Late' :
return("تراکنش در شبکه بانکی Timeout خورده است.");
break;
case 'Suspected Fraud Pick Up' :
return("خريدار يا فيلد CVV2 و يا فيلد ExpDate را اشتباه زده است. ( يا اصلا وارد نکرده است)");
break;
case 'No Sufficient Funds' :
return("موجودی به اندازی کافی در حساب وجود ندارد.");
break;
case 'Issuer Down Slm' :
return("سيستم کارت بانک صادر کننده در وضعيت عملياتی نيست.");
break;
case 'TME Error' :
return("خطا ايجاد شده قابل شناسايى نيست. لطفا با مديريت سايت تماس بگيريد");
break;
}

return("پرداخت صورت نگرفت");
}

public function callback() {
$this->load->library('encryption');

$encryption = new Encryption($this->config->get('config_encryption'));
$State = @$this->request->post['State'];
$RefNum = @$this->request->post['RefNum'];
$ResNum = @$this->request->post['ResNum'];
$MerchantID=$this->config->get('sb24_MID');
$debugmod=false;

$this->load->model('checkout/order');

if(($State=='OK') or ($debugmod==true)) {

$order_info = $this->model_checkout_order->getOrder($ResNum);

if ($order_info) { //verify here

$Amount = @$this->currency->format($order_info['total'], $order_info['currency'], $order_info['value'], FALSE);
$order_id=$order_info['order_id'];

if($debugmod==false) {
$client = new SoapClient("https://acquirer.sb24.com/ref-payment/ws/ReferencePayment?WSDL");
$result = @$client->VerifyTransaction($RefNum, $MerchantID);
} else { $result=$Amount; $RefNum='debug_test'; }

if ( ($result > 0) and ($result==$Amount) ) {
$this->model_checkout_order->confirm($order_id, $this->config->get('sb24_order_status_id'),'ماره رسيد ديجيتالي بانک سامان Refer Number: '.$RefNum);



$this->response->setOutput('<html><head><meta http-equiv="refresh" CONTENT="2; url=index.php?route=checkout/success"></head><body><table border="0" width="100%"><tr><td>&nbsp;</td><td style="border: 1px solid gray; font-family: tahoma; font-size: 14px; direction: rtl; text-align: right;">با تشکر پرداخت تکمیل شد. لطفا چند لحظه صبر کنید و یا <a href="index.php?route=checkout/success"><b>اینجا کلیک نمایید</b></a></td><td>&nbsp;</td></tr></table></body></html>');


} else {

$error = $this->getState($State).($debugmod==true? 'err1<br>state:'.$State.'<br>ref:'.$RefNum.'<br>res:'.$ResNum.'<br>mid:'.$MerchantID : '');
$this->response->setOutput('<html><body><table border="0" width="100%"><tr><td>&nbsp;</td><td style="border: 1px solid gray; font-family: tahoma; font-size: 14px; direction: rtl; text-align: right;">'.$error.'<br /><br /><a href="index.php?route=checkout/cart"><b>بازگشت به فروشگاه</b></a></td><td>&nbsp;</td></tr></table></body></html>');

}


}

} else {

$error = $this->getState($State).($debugmod==true? 'err2<br>state:'.$State.'<br>ref:'.$RefNum.'<br>res:'.$ResNum.'<br>mid:'.$MerchantID : '');
$this->response->setOutput('<html><body><table border="0" width="100%"><tr><td>&nbsp;</td><td style="border: 1px solid gray; font-family: tahoma; font-size: 14px; direction: rtl; text-align: right;">'.$error.'<br /><br /><a href="index.php?route=checkout/cart"><b>بازگشت به فروشگاه</b></a></td><td>&nbsp;</td></tr></table></body></html>');

}
}
}
?>

mskbarnamenevis
سه شنبه 06 بهمن 1388, 13:40 عصر
شما در فایل nusoap.php که بانک بهتون داده در هنگام تعریف تابع و کلاس عبارت soapclient رو به nusoap_client تغییر بدین.
در فایلی که توابع reverse و verify صدا زده شده نیز همین کار رو انجام بدین و عبارت جلوی reverse رو از https به http تغییر بدین قطعا مشکلتون حل میشه

shahedprimary
سه شنبه 06 بهمن 1388, 21:13 عصر
من در تیتر موضوع بجای پارسیان نوشتم سامان
من در کد پارسیان اشکال دارم
اصلاً فایل nusoap.php وجود ندارد

mskbarnamenevis
سه شنبه 06 بهمن 1388, 21:37 عصر
شما هر بانکی که بخواین از ماژولش استفاده بکنین فرقی نمی کنه چه سامان باشه و چه پارسیان و ملت و ... باید از این فایل استفاده کنین چون این فایل در حقیقت ارتباط دهنده بین شما و بانک هست.

shahedprimary
سه شنبه 06 بهمن 1388, 23:53 عصر
از کجا بیارم
چگونه فعالش کنم

mskbarnamenevis
چهارشنبه 07 بهمن 1388, 19:46 عصر
من فایل nusoap.php رو با تغییراتی که باید در اون برای soapclient صورت میگرفت انجام دادم فقط شما هر زمان خواستید توابع reverse و verify رو به کار ببرین به جای soapclient باید از nusoap_client استفاده کنین

shahedprimary
چهارشنبه 07 بهمن 1388, 20:49 عصر
فقط شما هر زمان خواستید توابع reverse و verify رو به کار ببرین به جای soapclient باید از nusoap_client استفاده کنین
من باید این تغییر در کد بالایی بدم لطف کنید دقیقتر بگید من تازه php را شروع کردم
ممنون می شم

mskbarnamenevis
چهارشنبه 07 بهمن 1388, 22:06 عصر
مشکل شما مشخصه قسمتی که باید از فایل nosoap.php استفاده بشه کامنت شده.
شما همه موارد مهم رو کامنت کردین و به جای اینکه از new nusoap_client استفاده کنین از new SoapClinet استفاده کردین و چون خود بانک داره دقیقا این شکل کد رو به کار میبره خطا می گیره.

shahedprimary
پنج شنبه 08 بهمن 1388, 06:42 صبح
این خطا را می دهد
Fatal error: Class 'nusoap_client' not found in D:\Program Files\EasyPHP 2.0b1\www\ShopSaz\catalog\controller\payment\pec.p hp on line 43
من اسکریپت را بصورت زیر نصب کردم
http://localhost/shopsaz
و در کد بانک پارسیان نوشته
// require_once(HTTP_SERVER.'system/library/nusoap.php');
این دو فولدر system/library در اسکریپت قرار دارد آیا من فقط باید nusoap.php را در فولدر library کپی کنم نیاز نیست آدرس بالا تغییری کند

mehrdad_andami
دوشنبه 08 شهریور 1389, 07:15 صبح
این خطا را می دهد
Fatal error: Class 'nusoap_client' not found in D:\Program Files\EasyPHP 2.0b1\www\ShopSaz\catalog\controller\payment\pec.p hp on line 43
من اسکریپت را بصورت زیر نصب کردم
http://localhost/shopsaz
و در کد بانک پارسیان نوشته
// require_once(HTTP_SERVER.'system/library/nusoap.php');
این دو فولدر system/library در اسکریپت قرار دارد آیا من فقط باید nusoap.php را در فولدر library کپی کنم نیاز نیست آدرس بالا تغییری کند


سلام دوست عزيز من هم مشكلي همانند شما دارم ممكن كمك كنيد...!!!؟؟؟
مشكل شما حل شده يا نه..؟؟؟
اگه حل شده راه حل رو بگيد ممنون ميشم.

alijani2010
یک شنبه 28 شهریور 1389, 16:05 عصر
سلام.
کسی از دوستان هست که تونسته باشه پرداخت با بانک سامان رو به طور کامل با Asp.Net
#C نوشته باشه و رسید تراکنش رو از بانک دریافت کنه و اطلاعات مربوطه رو توی بانک اطلاعاتی خودش ذخیره کنه ؟؟؟؟؟
ممنون میشم !

popcorn
سه شنبه 30 شهریور 1389, 22:01 عصر
شما در فایل nusoap.php که بانک بهتون داده در هنگام تعریف تابع و کلاس عبارت soapclient رو به nusoap_client تغییر بدین.
در فایلی که توابع reverse و verify صدا زده شده نیز همین کار رو انجام بدین و عبارت جلوی reverse رو از https به http تغییر بدین قطعا مشکلتون حل میشه

خیلی ممنون کارمون رو راه انداختی.
راستش من هم همین مشکل رو با بانک ملت داشتم که حل شد.
البته soapclinet رو بعضی هاست ها کار می کنه.