PDA

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



sahar_ah
یک شنبه 16 اردیبهشت 1386, 22:31 عصر
با سلام به همه دوستان
من میخواستم بدونم از دوستان کسی در رابطه با نحوه خرید آنلاین از بانک پارسیان اطلاعاتی داره؟
من کدی رو که برای استفاده و قراردادن در سایت دادند میزارم اما نمیدونم چطور باید ازش استفاده کنم.
اگه کسی اطلاعاتی داره لطفا کمک کنه
ممنونم



<?php


// this function is to get proper authority key from Parsian
function gotoParsian () {

include("nusoap/nusoap.php");

$soapclient = new soapclient('https://www.pec24.com/pecpaymentgateway/eshopservice.asmx?wsdl','wsdl');
if (!$err = $soapclient->getError())
$soapProxy = $soapclient->getProxy() ;

if ( (!$soapclient) OR ($err = $soapclient->getError()) ) {
$error .= $err . "<br />" ;
echo $error ;
} else {
$amount = intval($_POST['Amount']) ; // here is the posted amount
$orderId = getResNum( .... ) ; // this function is internal which will get order id
$authority = 0 ; // default authority
$status = 1 ; // default status
$callbackUrl = "payment/paid_parsian/" ; // site call back Url

$params = array(
'pin' => ... , // this is our PIN NUMBER
'amount' => $amount,
'orderId' => $orderId,
'callbackUrl' => $callbackUrl,
'authority' => $authority,
'status' => $status
);
$sendParams = array($params) ;
$res = $soapclient->call('PinPaymentRequest', $sendParams);

$authority = $res['authority'];
$status = $res['status'];

if ( ($authority) and ($status==0) ) {
// this is a succcessfull connection
...
...
...

$parsURL = "https://www.pec24.com/pecpaymentgateway/?au=" . $authority ;
redirectToURL ($parsURL) ;

exit() ;
die() ;
return;

} else {
// this is unsucccessfull connection
echo "<p dir=LTR>";
if ($err=$soapclient->getError()) {
echo "ERROR = $err <br /> " ;
}
echo "$authority <br />" ;
echo "$status <br />" ;
echo "$orderId <br />" ;
echo "Couldn't get proper authority key from Parsian" ;
echo "</p>";

}

}
.... // SHOW HTML PART

}

// this function is to Validate Payment
function check_Payment_Parsian () {

include("nusoap/nusoap.php");

$authority = $_REQUEST['au'];
$status = $_REQUEST['rs'];

if ($authority) {
// here we update our database
...
}

if ( ($status==0) and (checkDataBase(...)) ) {
$soapclient = new soapclient('https://www.pec24.com/pecpaymentgateway/eshopservice.asmx?wsdl','wsdl');

if ( (!$soapclient) OR ($err = $soapclient->getError()) ) {
// this is unsucccessfull connection
echo $err . "<br />" ;

} else {
$status = 1 ; // default status
$params = array(
'pin' => ... , // this is our PIN NUMBER
'authority' => $authority,
'status' => $status ) ; // to see if we can change it
$sendParams = array($params) ;
$res = $soapclient->call('PinPaymentEnquiry', $sendParams);
$status = $res['status'];

if ($status==0) {
// this is a succcessfull payment
// we update our DataBase

} else {

// this is a UNsucccessfull payment
// we update our DataBase

echo "Couldn't Validate Payment with Parsian " ;

}

}


} else {
// this is a UNsucccessfull payment

}

.... // SHOW HTML PART

}


?>



راهنمای اتصال به سرویس دروازه پرداخت: (نسخه1.2 )

 نکات عمومی
• در هر عملیات بانکی از سوی فروشنده، یک کد unique (واحد برای همان فروشنده) تحت نام OrderId، میبایست به دروازه پرداخت ارسال گردد، جزئیات ارسال آن در توضیحات هر تراکنش بیان خواهد شد.
• پین (pin) فروشنده، شناساگر و نیز کد رمز وی بوده و فروشنده آنلاین ملزم به نگهداری امن این کد میباشد، این کد برای اجرای هر عملیات لازم است.
• پس از اجرای هر عملیات یک کد وضعیت (status) به معنی وضعیت فراخوانی آن متد، به eShop برگردانده میشود، که بسته به آن کد فرایند های خاص آن باید صورت گیرد. کد صفر به معنی موفقیت آمیز بودن عملیات است، سایر کدها برای هر متد در توضیحات متد آمده است.

 پرداخت مشتری (Sale)
با انجام این تراکنش پول از حساب مشتری کم شده و پس از عملیات تسویه حساب به حساب فروشنده واریز میشود. انجام کامل این تراکنش مستلزم طی کامل چرخه پرداخت بوده و چنانچه این روند به آخرین وضعیت (موفقیت و پایان عملیات) منجر نشود، کل عملیات Rollback خواهد شد.
مراحل پرداخت مشتری:
1- پس از پایان فاز انتخاب کالا، مشتری آمادگی خود را برای پرداخت پول از طریق حساب بانک پارسیان اعلام میکند، در این زمان eShop متد زیر را از وب سرویس دروازه پرداخت صدا میزند:

PinPaymentRequest(pin,amount,orderId,callbackUrl,r ef authority,ref status)
Pin (string): پین فروشنده
Amount (integer): رقم پرداخت
OrderId (integer): کد عملیات
CallbackUrl (string): صفحه بازگشت مشتری، پس از انجام عمل پرداخت
Authority (long integer): کد عملیاتی دروازه پرداخت که یک کد تصادفی و واحد برای تمامی عملیات آنلاین با
سایتها میباشد، فروشگاه آنلاین ملزم به ثبت و نگهداری این کد میباشد.
Status (byte): کد وضعیت
0: موفق
20, 22: پین فروشنده درست نمیباشد
30: عملیات قبلا با موفقیت انجام شده است
34: شماره تراکنش فروشنده درست نمیباشد
2- در صورت موفقیت آمیز بودن متد فوق، eShop کاربر را به سایت دروازه پرداخت redirect میکند، authority بعنوان پارامتر Query String با نام au، باید در انتهای URL سایت دروازه پرداخت قرار گیرد، بعنوان مثال:
https://www.pec24.com/pecpaymentgate...u=791684761124

از زمان ارسال کاربر به سایت پرداخت، زمان محدودی (حدود 10 دقیقه) مشتری مهلت دارد که عملیات پرداخت خود را در سایت پرداخت بانک، انجام دهد، در غیر اینصورت authority کد expire میشود و در صورت درخواست مجدد، eShop مجددا برای وی درخواست authority کد میکند.

3- پس از انجام عملیات و یا انصراف، کاربر توسط دروازه پرداخت به سایت فروشگاه آنلاین بازمیگردد و کد authority و status عملیات بعنوان Query String به eShop ارسال میشود. در صورتی که status صفر باشد، eShop میبایست مجددا از سرور دروازه پرداخت صحت انجام عملیات را سئوال نماید.

PinPaymentEnquiry(pin, authority, ref status)

چنانچه تا قبل از فراخوانی این متد ارتباط اینترنتی کاربر قطع شود، دروازه پرداخت بصورت اتوماتیک پرداخت وی را ابطال میکند.


 ابطال عملیات (Void)
فروشنده (merchant) میتواند عملیات پرداخت را تا قبل از تسویه حساب ابطال کند، بدون آنکه هیچگونه بار مالی برای مشتری داشته باشد.
PinVoidPayment(pin, orderId, orderToVoid, ref status)


 برگشت عملیات (Reversal)
در صورت بروز اتفاقات ناخواسته، که عمدتا ناشی از نقایص فنی و یا قطع ارتباط کاربر با فروشگاه آنلاین، میباشد، فروشنده ملزم به برگشت عملیات خواهد بود، همانطور که در عملیات Sale توضیح داده شد، در آخرین مرحله eShop از دروازه پرداخت استعلام عملیات خواهد کرد؛ از این لحظه به بعد چنانچه فروشنده متوجه شود به هر دلیلی مشتریش نتیجه عملیات پرداخت خود را مشاهده نکرده، فروشنده عملیات برگشت را انجام میدهد.

PinReversal(pin, orderId, orderToReversal, ref status)

 برگرداندن تمام یا بخشی از مبلغ عملیات (Refund)
فروشنده (merchant) میتواند در صورت نیاز تمام یا بخشی از مبلغ عملیات انجام شده را به حتی بعد از تسویه حساب به مشتری برگرداند، به همین دلیل فروشنده باید دقت مضاعفی به این مساله داشته باشد.

PinRefundPayment(pin, orderId, orderToRefund, amount, ref status)

 تسویه حساب (Settlement)
تسویه حساب به صورت اتوماتیک و روزانه انجام می گیرد. و صورتحساب از طریق بخش مالی و طبق قرارداد به فروشگاه تحویل می گردد.

sahar_ah
دوشنبه 17 اردیبهشت 1386, 19:23 عصر
کسی نیست منو کمک کنه؟

greenway
دوشنبه 17 اردیبهشت 1386, 20:55 عصر
اینجا رو هم ببینید.
http://barnamenevis.org/forum/showthread.php?t=58978
چون سرویس این بانکها IP درخواست کننده رو با IP که در فرم تقاضا درخواست شده مقایسه می کنند باید برنامه رو روی سرور تست کنید. متاسفانه PHP نمیتونم کمکی بکنم.

NimaZomorrodi
پنج شنبه 20 اردیبهشت 1386, 16:43 عصر
سلام
شما باید اول سایت تون رو کامل طراحی کنید با بانک پارسیان تماس بگیرید IP سایت شما رو میگیرند و اکتیو می کنند بعد وارد مراحل برنامه های فوق میشین

sahar_ah
پنج شنبه 20 اردیبهشت 1386, 20:51 عصر
سلام
من این کارها رو کردم و یه پین کد هم دریافت کردم اما نمیدونم چطور باید از این کد استفاده کنم
من در سبد خرید یه متغیر بنام $total دارم که بصورت سیشن در صفحات ذخیره میشه و در هر صفحه ای که بخوام دستذسی بهش دارم . پس متغیر Amount کد بالا رو دارم
برای تولید یه کد تصادفی برای هر کاربر هم از تابع srand استفاده میکنم
اما نمیدونم چطور باید از توابع بالا استفاده کنم و کاربر رو به صفحه بانک پارسیان هدایت کنم
اگه راهنماییم کنید ممنون میشم

NimaZomorrodi
پنج شنبه 20 اردیبهشت 1386, 22:39 عصر
ببینید
شما باید برای هر خرید یک رکورد توی database داشته باشید
که شامل مبلغ ، کل خرید ، شماره فاکتور و ... هست روی session به درد نمی خوره

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

در واقع اگر توضیح دقیق و مثال میخواین خو بانک با هر زبونی که بخواین بنویسین بهتون نمونه کد و کلاسهای لازم رو میده در ضمن داکیومنت هم میده .

hossin_assadi
سه شنبه 13 اسفند 1387, 19:09 عصر
البته کی از دوستان برای من برنامه نویس کردند باز هم با مشکل برخورد کردم
گاهی وقتها کار می کند و کاهی وقتها هم کار نمی کند نمی دونم مشکل از کجا است
اگر ممکنه کمک کنید
می توانید از اینجا ببینیدhttp://www.elcshop.ir/forum/assadi/pec24

amini_drm@yahoo.com
یک شنبه 26 اردیبهشت 1389, 11:10 صبح
من اسکریپت پرداخت بانک پارسیان رو نصب کردم ولی زمانیکه از صفحه بانک به سایتم بر می گردم متغیر $rs در ادرس بار من =1 هست و پیغام خطای نامشخص می ده. لطفا راهنمایی کنید که خیلی فوریست.ممنون

mehrdad_andami
چهارشنبه 30 تیر 1389, 20:32 عصر
سلام و عرض خسته نباشيد به دوستان.
من يك فروشگاه با ماركت ساز طلايي درست كردم در پرداخت پارسيان مشكل دارم.
اين ماركت ساز طلايي در كد هاش خيلي مشكل داره چند جا خودم ديدم كه اشتباه هاي خنده داري داره به عنوان مثال در يكي از فايلهاي PHP مربوط به پرداخت پارسيان قبل از اينكه PHP شروع كنه <? زده بود كه ارور ميداد و......
مشكل من اينه كه وقتي PIN بانك پارسيان رو در قسمت مديريت وارد ميكنم و ميرم تو فروشگاه براي خريد پرداخت پارسيان رو ميزنم ميگه : "خطاي نامشخص"
اين خطا يعني "خطاي نامشخص" از فايل pec.php در مسير

catalog\controller\payment\pec.php
در خط 90 تا 113 وقتي در شرط switch گير مي افته و برابر مقدار default قرار ميگيره در خط 111 لود ميشه...!!!
حالا با بررسي اين شرط و تريس كردن كد من رسيدم به متغيير

$res
در خط 66 كه احتمال ميدم مشكل از پرامترهايي كه پاس ميده آب ميخوره...!!!

$res=$client->PinPaymentRequest($this->data['PIN'] , $amount, $order_info['order_id'], $callbackUrl, $authority, $status);
خواهش ميكنم اگه كسي بلد هست كمك كنه اين مشكل براي من خيلي مهم هستش...!!!:ناراحت:
اين هم تمام كد اين فايل

<?php

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>');

}
}
}
?>