PDA

View Full Version : وصل شدن به درگاه بانک پارسیان (شاپرک)



mahdi_1986
جمعه 29 آبان 1394, 23:55 عصر
با سلام
چند وقت پیش برای یک پروژه باید به درگاه بانک پارسیان وصل می‌شدم و الان اون کد رو در اختیار شما قرار میدهم:

در قسمت مدل کلاس زیر را نوشتم:



class Parsian{
const STATUS_OK = 0; const UNKNOWN_STATUS = 1; const INVALID_PIN = 20; const MERCHANT_AUTHENTICATION_FAILD = 22; const OPERATION_DID_SUCCESS = 30; const INVALID_TRANSACTION = 34;
const FAIL_STATUS = -1;

const GENERAL_ERROR = 99;
const REDIRECT_TO_GATEWAY = 200; const SUCCESS_PAYMENT_NOT_CONFIRM = 201; const SUCCESS_PAYMENT_CONFIRM = 202;

public function connect_parsian($orderId, $amount) { $authority = 0; // default authority $status = 1; // default status $params = array( 'pin' => Yii::app()->params['parsianPin'], // شماره رمز که بانک در اختیار شما قرار میدهد. 'amount' => $amount,//مبلغ 'orderId' => $orderId,//شماره یکتا که شما به بانک ارسال میکنید، من کلید جدول را انتخاب کردم 'callbackUrl' => Yii::app()->params['myCallBackURL'],//این آدرس را شما باید برای بانک ارسال نمایید تا جواب بر روی این ادرس بیاید 'authority' => $authority,//این توسط بانک پر میشود 'status' => $status//توسط بانک پر میشود ); try { Yii::log("***start payment**** parsian gateway for order id==>" . $orderId, CLogger::LEVEL_INFO, 'payment'); $client = new SoapClient(Yii::app()->params['parsianURL']);//در داکیومنت بانک موجود است $sendParams = array($params); $res = $client->__soapCall('PinPaymentRequest', $sendParams); $authority = $res->authority; $status = $res->status; if (($authority != 0) and ($status == $this::STATUS_OK)) { $parsURL = Yii::app()->params['parsianURLPayment'] . $authority;//در داکیومنت بانک موجود است Yii::log("***success payment route to gateway**** for order id ==> " . $orderId . " and ref_number ==>" . $authority, CLogger::LEVEL_INFO, 'payment'); return array( 'status' => $this::STATUS_OK, 'url' => $parsURL, 'authority' => $res->authority ); } else { Yii::log("***fail payment route to gateway**** for order id ==> " . $orderId . " and get status ==>" . $status, CLogger::LEVEL_INFO, 'payment'); return array( 'status' => $status, 'url' => null, 'authority' => 0 ); } } catch (Exception $ex) { Yii::log("***exception payment route to gateway**** for order id ==>" . $orderId . $ex, CLogger::LEVEL_ERROR, 'payment'); return array( 'status' => $this::FAIL_STATUS, 'url' => null, 'authority' => 0 ); }
}


//تایید کردن تراکنش، در صورت تایید نکردن پول به حساب برمیگردد. function check_payment_parsian($status, $authority) { $status = 1; // default status try { Yii::log("***start confirm payment**** for ref number ==> " . $authority, CLogger::LEVEL_INFO, 'payment'); $client = new SoapClient(Yii::app()->params['parsianURL']); $params = array( 'pin' => Yii::app()->params['parsianPin'], // this is our PIN NUMBER 'authority' => $authority, 'status' => $status); // to see if we can change it $sendParams = array($params); $res = $client->__soapCall('PinPaymentEnquiry', $sendParams); $status = $res->status; if ($status == $this::STATUS_OK) { Yii::log("***success confirm payment**** for ref number ==> " . $authority, CLogger::LEVEL_INFO, 'payment'); return array( 'status' => $this::STATUS_OK, 'url' => null ); } else { Yii::log("***error confirm payment**** for ref number ==> " . $authority . " get status from server is ==> " . $status, CLogger::LEVEL_INFO, 'payment'); return array( 'status' => $status, 'url' => null ); } } catch (Exception $ex) { Yii::log("***exception payment**** for ref number ==>" . $authority . $ex, CLogger::LEVEL_ERROR, 'payment'); return array( 'status' => $this::FAIL_STATUS, 'url' => null ); } }
}


,در قسمت کنترکر تنها این دو متد را فراخوانی میکنم
فراخوانی متد وصل شدن به درگاه:



$parsian = new Parsian(); $val = $parsian->connect_parsian($request->id, $request->amount); if ($val['status'] == Parsian::STATUS_OK) { $request = $this->loadModel($request->id); $request->status = Parsian::REDIRECT_TO_GATEWAY; $request->ref_number = $val['authority']; $request->save(false); $this->redirect($val['url']);// exit; } else { $request = $this->loadModel($request->id); $request->status = $val['status']; if (strlen($val['authority']) > 0) { $request->ref_number = $val['authority']; } $request->save(false); throw new CHttpException(500, 'error in connect gateWay' . ' : ' . $val['status']); }

برای تایید



public function actionConfirm() { if (isset($_GET['au']) && isset($_GET['rs'])) { $status = $_GET['rs']; $authority = $_GET['au']; try { if ($status != Parsian::STATUS_OK) { $request = $this->loadModel($authority); $request->status = $status; $request->save(false); $this->render('failPayment', array( 'model' => $request, )); } else { $request = $this->loadModel($authority); $parsian = new Parsian();
//خروجی متد یک آرایه است $val = $parsian->check_payment_parsian($status, $authority); if ($val['status'] == Parsian::STATUS_OK) { $request->status = Parsian::STATUS_OK; if($request->save()){ $this->redirect(array('successPAyment', 'id' => $request->id)); } } else { $request->status = $val['status']; $request->save(false); throw new CHttpException(500, 'error in connect gateWay'); } } } catch (exception $ex) { throw new CHttpException(500, 'bad request'); }
} else { throw new CHttpException(400, 'bad request'); } }

اگر بد نوشتم لطفا شما تکمیل کنید تا بهتر شود و در اختیار دیگران قرار دهید.
با سپاس

SeyedMoosavi
شنبه 24 بهمن 1394, 13:57 عصر
با سلام
بابت به اشتراک گذاشتن کدتون واقعا ممنونم
من فعلا نیازی به این کدی که نوشتین ندارم ولی خیلی خوبه که من و دیگر برنامه نویس ها این اخلاق خوب شما رو یاد بگیریم و کدهایی که مینویسیم رو به اشتراک بزاریم
بازم ممنون

j_naroogha@yahoo.com
یک شنبه 25 بهمن 1394, 05:32 صبح
<?php


class ParsianGateway
{

private $pin;
function __construct($_pin)
{
$this->pin=$_pin;
}
function PinPaymentRequest($_amount,$_orderId,$_callbackUrl )
{
date_default_timezone_set("Asia/tehran");
$soapclient = new nusoap_client('https://pec.shaparak.ir/pecpaymentgateway/eshopservice.asmx?wsdl','wsdl');
$err = $soapclient->getError();
if (!$err)
$soapProxy = $soapclient->getProxy();
if ((!$soapclient) OR $err )
{
$error = $err . "<br />" ;
echo $error;
return false;
}
else
{
$amount = $_amount ; // here is the posted amount
$orderId = $_orderId ; // this function is internal which will get order id
$authority = 0 ; // default authority
$status = 1 ; // default status
$callbackUrl = $_callbackUrl ; // site call back Url
$params = array(
'pin'=> $this->pin,
'amount' => $amount,
'orderId' => $orderId,
'callbackUrl' => $callbackUrl,
'authority' => $authority,
'status' => $status
);
$send=array($params);
$res = $soapclient->call('PinPaymentRequest',$send);
$authority = $res['authority'];
$status = $res['status'];
return array(
'status'=>$status,
'authority'=>$authority,
);
}
}

function Redirect_GateWay($_au,$_status)
{
$parsURL = "https://pec.shaparak.ir/pecpaymentgateway?au=" . $_au ;
$this->redirectToURL($parsURL) ;
}
function PinPaymentEnquiry($_authority)
{
$soapclient = new soapclient('https://pec.shaparak.ir/pecpaymentgateway/eshopservice.asmx?wsdl','wsdl');
if ((!$soapclient) OR ($err = $soapclient->getError()) )
{
echo $err . "<br />" ;
return FALSE;


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


}

}
function redirectToURL($parsURL)
{
echo '<script>window.location ="'.$parsURL.'";</script>';
}
function PaymentEnquiry($au,$rs)
{
$soapclient = new nusoap_client('https://pec.shaparak.ir/pecpaymentgateway/eshopservice.asmx?wsdl','wsdl');
$err = $soapclient->getError();
if (!$err)
$soapProxy = $soapclient->getError();
if ((!$soapclient) OR $err )
{
$error = $err . "<br />" ;
echo $error;
return false;
}
else
{
$params = array(
'pin' => $this->pin ,
'authority' => $au,
'status' => $rs ) ; // to see if we can change it
$sendParams = array($params) ;
$res = $soapclient->call('PinPaymentEnquiry', $sendParams);
//var_dump($res);
$status = $res['status'];
if($status===0)
return true;
else
return false;

}

}

}

farazsh
شنبه 19 تیر 1395, 03:43 صبح
درگاه اسکریپت : ارائه دهنده اسکریپت درگاه واسط

فروش اسکریپت درگاه پرداخت با قیمت بسیار عالی


زبان برنامه نویسی اسکریپت : asp.net

نوشته شده در ویژوال C#‎‎‎‎‎ 2015

پایگاه داده استفاده شده : sql server

قابل اجرا بر روی : هاست ویندوز اختصاصی یا غیر اختصاصی

قیمت اسکریپت : توافقی ==== با ما در تلگرام در ارتباط باشید.

نمونه فروخته شده اسکریپت :

http://mellatpal.com
(http://mellatpal.com)
دموی کنترل پنل مدیریت را در کانال اسکریپت درگاه پرداخت مشاهده کنید :

dargahcs@
(https://telegram.me/dargahsc)
https://telegram.me/dargahsc

شماره تلگرامی ما :

001-701-354-1046

جهت مشاوره رایگان با ما در تلگرام در ارتباط باشید.