رفتن به مطلب

راهنمایی در مورد اتصال درگاه بانک رفاه به سایت


پست های پیشنهاد شده

سلام یکی از دوستان درگاه بانک رفاه سفارش داده که یه سری مستندات فرستادند ولی هیچ فایل سمپل یا نمونه نفرستادند حالا موندم چطوری باید پیاده سازی کنم اگه کسی اطلاعی در مورد این بانک داره لطفا راهنمایی کنه

فقط این فایل رو داره


<?php
include('/usr/share/pear/nusoap.php');
require_once('nusoap.php');
$soapclient = new soapclient('https://acquirer.samanepay.com/payments/referencepayment.asmx?WSDL','wsdl');
#$soapclient->debug_flag=true;
$soapProxy = $soapclient->getProxy() ;
#if( $err = $soapclient->getError() )
# echo $err ;
#echo $soapclient->debug_str;
$res= $soapProxy->VerifyTransaction("Refrence Number","MTID");#reference number and sellerid
if( $res <= 0 )
echo 'verification failed' ;
else
{
echo 'it verified';
echo $res ;
}
?>

لینک به ارسال

سلام یکی از دوستان درگاه بانک رفاه سفارش داده که یه سری مستندات فرستادند ولی هیچ فایل سمپل یا نمونه نفرستادند حالا موندم چطوری باید پیاده سازی کنم اگه کسی اطلاعی در مورد این بانک داره لطفا راهنمایی کنه

فقط این فایل رو داره


<?php
include('/usr/share/pear/nusoap.php');
require_once('nusoap.php');
$soapclient = new soapclient('https://acquirer.samanepay.com/payments/referencepayment.asmx?WSDL','wsdl');
#$soapclient->debug_flag=true;
$soapProxy = $soapclient->getProxy() ;
#if( $err = $soapclient->getError() )
# echo $err ;
#echo $soapclient->debug_str;
$res= $soapProxy->VerifyTransaction("Refrence Number","MTID");#reference number and sellerid
if( $res <= 0 )
echo 'verification failed' ;
else
{
echo 'it verified';
echo $res ;
}
?>

سلام

بانک رفاه خودش روی شبکه شاپرک PSP نداره .... :

http://shaparak.ir/content?id=290

بخاطر همین با سایر بانک ها و PSP ها قرار داد داره و هر دوره با یک یا چند تاشون قرار داد میبنده ...

این کدی که به شما فرستادن هم از بانک سامان هستش ....

شما میتونید به سادگی از ماژول ها و پلاگین های بانک سامان استفاده کنید .

موفق باشید

لینک به ارسال

سلام

بانک رفاه خودش روی شبکه شاپرک PSP نداره .... :

http://shaparak.ir/content?id=290

بخاطر همین با سایر بانک ها و PSP ها قرار داد داره و هر دوره با یک یا چند تاشون قرار داد میبنده ...

این کدی که به شما فرستادن هم از بانک سامان هستش ....

شما میتونید به سادگی از ماژول ها و پلاگین های بانک سامان استفاده کنید .

موفق باشید

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

اگه اسکریپت درگاه بانک سامان هم دارید بدید لطفا

ویرایش شده توسط M.Javad
لینک به ارسال

دوستان من این کد هارو قرار دادم و فقط وصل به درگاه بانک شد و پرداخت با موفقیت انجام شد ولی در بازگشت هیچ رسیدی دریافت نشد و فکر کنم تراکنش با موفقیت ثبت نشد

این فرم هستش


<form action='https://sep.shaparak.ir/Payment.aspx' method='POST'>
مبلغ به ريال : <input type='text' id='Amount' name='Amount' value=''> <!-- مبلغ -->
<input type='hidden' id='MID' name='MID' value='10403269'> <!-- شماره مشتري بانک سامان -->
<input type='hidden' id='ResNum' name='ResNum' value='1'> <!-- شماره فاکتور -->
<input type='hidden' id='RedirectURL' name='RedirectURL' value='http://pchamid.ir/callback.php'> <!-- آدرس بازگشت -->
<input type=submit value='پرداخت'>
</form>

و این هم کد برگشت فایل callback.php


<?php
$db = new PDO('mysql:host=localhost;dbname=test','test','test');
if( ! isset($_POST['State']) or $_POST['State']!='OK')
{
echo "پرداخت ناموفق";
die;
}
$order_id = (int) $_POST['ResNum'];

$data = $db->query("SELECT * FROM payment WHERE id={$order_id}")->row();
if(empty($data))
{
echo "چنين تراکنشي موجود نيست";
die;
}

if($data->ip != $_SERVER['REMOTE_ADDR'])
{
echo "آي پي پرداخت کننده مطابقت ندارد";
die;
}


if($data->status=='1')
{
echo "تراکنش قبلا وريفاي شده است !";
die;
}
if( ! isset($_POST['RefNum']))
{
echo "رسيد ديجيتال ست نشده است";
die;
}
$ref_num = $_POST['RefNum'];
$check = $db->query("SELECT id FROM payment WHERE ref_num=?")->row(array($ref_num));
if( ! empty($check))
{
echo "رسيد ديجيتال قبلا ثبت شده است ";
die;
}
try
{
$soapclient = new nusoap_client('https://sep.shaparak.ir/payments/referencepayment.asmx?WSDL','wsdl');
$soapProxy = $soapclient->getProxy() ;

$mid = 11111; // شماره مشتري بانک سامان
$pass = 11111 ; // پسورد بانک سامان
$result = $soapProxy->VerifyTransaction($ref_num,$mid);

}
catch(Exception $e)
{
echo "خطا در اتصال به وبسرويس ";
die;
}

if($result != ($data->amount))
{
// مغايرت مبلغ پرداختي

if($result<0)
{
echo "کد خطاي بانک سامان $result ";
die;
}

// مغايرت و برگشت دادن وجه به حساب مشتري
if($result>0)
{
echo "شما بايد مبلغ {$data->amount} ريال را پرداخت ميکرديد در صورتيکه مبلغ {$result}ريال را پرداخت کرديد ! مبلغ شما به حسابتان برگشت داده شد آخرين بارتان باشد !!!";
$soapProxy->ReverseTransaction($ref_num,$mid,$pass,$result);
}
}

if($result == ($data->amount))
{
// تراکنش موفق و ثبت شماره رسيد ديجيتال

$aff = $db->query("UPDATE payment SET ref_num=?,status=1 WHERE id=$order_id")->execute(array($ref_num));
if( ! $aff)
die('خطا در ثبت اطلاعات');

echo "تراکنش با موفقيت انجام شد ، رسيد ديجيتال $ref_num و شماره فاکتور $order_id";

}
?>

آی دی و پسورد رو 1111 گذاشتم برای امنیت ولی در فایل درست هستش در هنگام برگشت صفحه سفید میاره!!!

ویرایش شده توسط M.Javad
لینک به ارسال

احساس میکنم این کد رو هم باید یه جایی قرار بدم :P


<?php
include('/usr/share/pear/nusoap.php');
require_once('nusoap.php');
$soapclient = new soapclient('https://acquirer.samanepay.com/payments/referencepayment.asmx?WSDL','wsdl');
#$soapclient->debug_flag=true;
$soapProxy = $soapclient->getProxy() ;
#if( $err = $soapclient->getError() )
# echo $err ;
#echo $soapclient->debug_str;
$res= $soapProxy->VerifyTransaction("Refrence Number","MTID");#reference number and sellerid
if( $res <= 0 )
echo 'verification failed' ;
else
{
echo 'it verified';
echo $res ;
}
?>

لینک به ارسال

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

اگه اسکریپت درگاه بانک سامان هم دارید بدید لطفا

بله ، برای اتصال به درگاه میتونید از Merchant و Password که بانک بهتون داده توی پلاگین های بانک سامان استفاده کنید . خودمم از بانک صادرات درگاه گرفتم اون ها هم سامان بهم دادن .

یک نمونه کد برای خودم از روی فایل pdf ارسالی بانک بر مبنای SOAP نوشته بودم و تو پروژه هام ازش استفاده میکنم ، میذارم تا دوستان هم استفاده کنند .

ارسال به بانک :


<?php
$Amount = 1000; //ریال
$MID = ''; //مرچنت پذیرنده
$ResNum = time(); //شماره فاکتور یکتا و غیر تکراری
$CallbackURL = 'http://test.com/Verify.php';

echo '<form id="redirect_to_saman" style="display:none !important;" name="SamanBank" action="https://sep.shaparak.ir/Payment.aspx" method="POST">
<input type="hidden" id="MID" name="MID" value="'.$MID.'"/>
<input type="hidden" id="Amount" name="Amount" value="'.$Amount.'"/>
<input type="hidden" id="ResNum" name="ResNum" value="'.$ResNum.'"/>
<input type="hidden" id="RedirectURL" name="RedirectURL" value="'.$CallbackURL.'"/>
</form><script language="javascript">document.SamanBank.submit(); </script>';

بازگشت از بانک :


<?php
$Amount = 1000; //ریال
$MID = ''; // مرچنت پذیرنده
$Username = $MID; // نام کاربری پذیرنده که به صورت پیشفرض برابر مرچنت است .
$Password = ''; // کلمه عبور پذیرنده

$ResNum = isset($_POST['ResNum']) ? $_POST['ResNum'] : '';
$RefNum = isset($_POST['RefNum']) ? $_POST['RefNum'] : '';
$TRACENO = isset($_POST['TRACENO']) ? $_POST['TRACENO'] : '';
$State = isset($_POST['State']) ? $_POST['State'] : '';
if ( $State == 'OK' ) {
$Client = new SoapClient("https://sep.shaparak.ir/payments/referencepayment.asmx?WSDL");
$price = $Client->VerifyTransaction($RefNum, $MID);
if ( $price && is_numeric($price) && $price > 0 ){
if ( intval($price) == intval($Amount) ){
$status = 'completed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
$fault = 0;
}
else {
$status = 'failed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
if ( intval($price) > intval($Amount) )
$fault = 500;
else
$fault = 501;
$res = $Client->ReverseTransaction($RefNum,$MID,$Username,$Password);
if ( $res > 0 )
$Rev_Res = 1;// هزینه برگشت خورده است به مشتری
else
$Rev_Res = 2;// هزینه به مشتری برگشت نخورده و باید پیگیری شود ... میتواند ناشی از اشتباه بودن کلمه عبور باشد
}
}
else {
$status = 'failed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
$fault = $price;
}
}
elseif ( $State == 'Canceled By User' ) {
$status = 'cancelled';
$transaction_id = 0;
$digital_num = 0;
$fault = 0;
}
else {
$status = 'failed';
$transaction_id = 0;
$digital_num = 0;
$fault = $State;
}

if ($status == 'completed') {
echo 'تراکنش موفق بود . کد تراکنش :' . $transaction_id;
echo '<br/>رسید دیجیتال : ' . $digital_num;
}
else if ($status == 'cancelled') {
echo 'مشتری از انجام تراکنش انصراف داده است .';
}
else {
echo 'تراکنش با خطا مواجه شده است . دلیل خطا : ' . saman_error($fault);
}

function saman_error($error) {
$response = '';
switch($error){

case 'Canceled By User' :
$response = 'تراکنش توسط خريدار کنسل شده است.';
break;
case 'Invalid Amount' :
$response = 'مبلغ سند برگشتي، از مبلغ تراکنش اصلي بيشتر است.';
break;
case 'Invalid Transaction' :
$response = 'درخواست برگشت يک تراکنش رسيده است، در حالي که تراکنش اصلي پيدا نمي شود.';
break;
case 'Invalid Card Number' :
$response = 'شماره کارت اشتباه است.';
break;
case 'No Such Issuer' :
$response = 'چنين صادر کننده کارتي وجود ندارد.';
break;
case 'Expired Card Pick Up' :
$response = 'از تاريخ انقضاي کارت گذشته است و کارت ديگر معتبر نيست.';
break;
case 'Allowable PIN Tries Exceeded Pick Up' :
$response = 'رمز کارت (PIN) 3 مرتبه اشتباه وارد شده است در نتيجه کارت غير فعال خواهد شد.';
break;
case 'Incorrect PIN' :
$response = 'خريدار رمز کارت (PIN) را اشتباه وارد کرده است.';
break;
case 'Exceeds Withdrawal Amount Limit' :
$response = 'مبلغ بيش از سقف برداشت مي باشد.';
break;
case 'Transaction Cannot Be Completed' :
$response = 'تراکنش Authorize شده است ( شماره PIN و PAN درست هستند) ولي امکان سند خوردن وجود ندارد.';
break;
case 'Response Received Too Late' :
$response = 'تراکنش در شبکه بانکي Timeout خورده است.';
break;
case 'Suspected Fraud Pick Up' :
$response = 'خريدار يا فيلد CVV2 و يا فيلد ExpDate را اشتباه زده است. ( يا اصلا وارد نکرده است)';
break;
case 'No Sufficient Funds' :
$response = 'موجودي به اندازي کافي در حساب وجود ندارد.';
break;
case 'Issuer Down Slm' :
$response = 'سيستم کارت بانک صادر کننده در وضعيت عملياتي نيست.';
break;
case 'TME Error' :
$response = 'خطا ايجاد شده قابل شناسايى نيست. لطفا با مديريت سايت تماس بگيريد . ';
break;
case '-1' :
$response = 'خطای داخلی شبکه . ';
break;
case '-2' :
$response = 'سپرده ها برابر نیستند . ';
break;
case '-3' :
$response = 'ورودی ها حاوی کاراکترهای غیر مجاز میباشد . ';
break;
case '-4' :
$response = 'کلمه عبور یا کد فروشنده اشتباه است . ';
break;
case '-5' :
$response = 'خطای بانک اطلاعاتی . ';
break;
case '-6' :
$response = 'سند قبلا برگشت کامل خورده . ';
break;
case '-7' :
$response = 'رسید دیجیتالی تهی است . ';
break;
case '-8' :
$response = 'خطای طول ورودی ها بیشتر از حد مجاز است . ';
break;
case '-9' :
$response = 'وجود کارکترهای غیر مجاز در مبلغ برگشتی . ';
break;
case '-10' :
$response = 'رسید دیجیتالی حاوی کارکترهای غیر مجاز است . ';
break;
case '-11' :
$response = 'طول ورودی ها کمتر از حد مجاز است . ';
break;
case '-12' :
$response = 'مبلغ برگشتی منفی است . ';
break;
case '-13' :
$response = 'مبلغ برگشتی برای برگشت جزیی بیش از مبلغ برگشت نخورده رسید دیجیتالی است . ';
break;
case '-14' :
$response = 'چنین تراکنشی تعریف نشده است . ';
break;
case '-15' :
$response = 'مبلغ برگشتی به صورت اعشاری داده شده . ';
break;
case '-16' :
$response = 'خطای داخلی سیستم . ';
break;
case '-17' :
$response = 'برگشت زدن تراکنشی که با کارت بانکی غیر از بانک سامان انجام شده . ';
break;
case '-18' :
$response = 'فروشنده نامعتبر است IP . ';
break;
case '500' :
$response = 'مبلغ پرداختی از مبلغ مورد نظر بیشتر است . ';
break;
case '501' :
$response = 'مبلغ پرداختی کمتر از مبلغ مورد نظر است . ';
break;

}

return $response;
}

ویرایش شده توسط HANNANStd
لینک به ارسال

بله ، برای اتصال به درگاه میتونید از Merchant و Password که بانک بهتون داده توی پلاگین های بانک سامان استفاده کنید . خودمم از بانک صادرات درگاه گرفتم اون ها هم سامان بهم دادن .

یک نمونه کد برای خودم از روی فایل pdf ارسالی بانک بر مبنای SOAP نوشته بودم و تو پروژه هام ازش استفاده میکنم ، میذارم تا دوستان هم استفاده کنند .

ارسال به بانک :


<?php
$Amount = 1000; //ریال
$MID = ''; //مرچنت پذیرنده
$ResNum = time(); //شماره فاکتور یکتا و غیر تکراری
$CallbackURL = 'http://test.com/Verify.php';

echo '<form id="redirect_to_saman" style="display:none !important;" name="SamanBank" action="https://sep.shaparak.ir/Payment.aspx" method="POST">
<input type="hidden" id="MID" name="MID" value="'.$MID.'"/>
<input type="hidden" id="Amount" name="Amount" value="'.$Amount.'"/>
<input type="hidden" id="ResNum" name="ResNum" value="'.$ResNum.'"/>
<input type="hidden" id="RedirectURL" name="RedirectURL" value="'.$CallbackURL.'"/>
</form><script language="javascript">document.SamanBank.submit(); </script>';

بازگشت از بانک :


<?php
$Amount = 1000; //ریال
$MID = ''; // مرچنت پذیرنده
$Username = $MID; // نام کاربری پذیرنده که به صورت پیشفرض برابر مرچنت است .
$Password = ''; // کلمه عبور پذیرنده

$ResNum = isset($_POST['ResNum']) ? $_POST['ResNum'] : '';
$RefNum = isset($_POST['RefNum']) ? $_POST['RefNum'] : '';
$TRACENO = isset($_POST['TRACENO']) ? $_POST['TRACENO'] : '';
$State = isset($_POST['State']) ? $_POST['State'] : '';
if ( $State == 'OK' ) {
$Client = new SoapClient("https://sep.shaparak.ir/payments/referencepayment.asmx?WSDL");
$price = $Client->VerifyTransaction($RefNum, $MID);
if ( $price && is_numeric($price) && $price > 0 ){
if ( intval($price) == intval($Amount) ){
$status = 'completed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
$fault = 0;
}
else {
$status = 'failed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
if ( intval($price) > intval($Amount) )
$fault = 500;
else
$fault = 501;
$res = $Client->ReverseTransaction($RefNum,$MID,$Username,$Password);
if ( $res > 0 )
$Rev_Res = 1;// هزینه برگشت خورده است به مشتری
else
$Rev_Res = 2;// هزینه به مشتری برگشت نخورده و باید پیگیری شود ... میتواند ناشی از اشتباه بودن کلمه عبور باشد
}
}
else {
$status = 'failed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
$fault = $price;
}
}
elseif ( $State == 'Canceled By User' ) {
$status = 'cancelled';
$transaction_id = 0;
$digital_num = 0;
$fault = 0;
}
else {
$status = 'failed';
$transaction_id = 0;
$digital_num = 0;
$fault = $State;
}

if ($status == 'completed') {
echo 'تراکنش موفق بود . کد تراکنش :' . $transaction_id;
echo '<br/>رسید دیجیتال : ' . $digital_num;
}
else if ($status == 'completed') {
echo 'مشتری از انجام تراکنش انصراف داده است .';
}
else {
echo 'تراکنش با خطا مواجه شده است . دلیل خطا : ' . saman_error($fault);
}

function saman_error($error) {
$response = '';
switch($error){

case 'Canceled By User' :
$response = 'تراکنش توسط خريدار کنسل شده است.';
break;
case 'Invalid Amount' :
$response = 'مبلغ سند برگشتي، از مبلغ تراکنش اصلي بيشتر است.';
break;
case 'Invalid Transaction' :
$response = 'درخواست برگشت يک تراکنش رسيده است، در حالي که تراکنش اصلي پيدا نمي شود.';
break;
case 'Invalid Card Number' :
$response = 'شماره کارت اشتباه است.';
break;
case 'No Such Issuer' :
$response = 'چنين صادر کننده کارتي وجود ندارد.';
break;
case 'Expired Card Pick Up' :
$response = 'از تاريخ انقضاي کارت گذشته است و کارت ديگر معتبر نيست.';
break;
case 'Allowable PIN Tries Exceeded Pick Up' :
$response = 'رمز کارت (PIN) 3 مرتبه اشتباه وارد شده است در نتيجه کارت غير فعال خواهد شد.';
break;
case 'Incorrect PIN' :
$response = 'خريدار رمز کارت (PIN) را اشتباه وارد کرده است.';
break;
case 'Exceeds Withdrawal Amount Limit' :
$response = 'مبلغ بيش از سقف برداشت مي باشد.';
break;
case 'Transaction Cannot Be Completed' :
$response = 'تراکنش Authorize شده است ( شماره PIN و PAN درست هستند) ولي امکان سند خوردن وجود ندارد.';
break;
case 'Response Received Too Late' :
$response = 'تراکنش در شبکه بانکي Timeout خورده است.';
break;
case 'Suspected Fraud Pick Up' :
$response = 'خريدار يا فيلد CVV2 و يا فيلد ExpDate را اشتباه زده است. ( يا اصلا وارد نکرده است)';
break;
case 'No Sufficient Funds' :
$response = 'موجودي به اندازي کافي در حساب وجود ندارد.';
break;
case 'Issuer Down Slm' :
$response = 'سيستم کارت بانک صادر کننده در وضعيت عملياتي نيست.';
break;
case 'TME Error' :
$response = 'خطا ايجاد شده قابل شناسايى نيست. لطفا با مديريت سايت تماس بگيريد . ';
break;
case '-1' :
$response = 'خطای داخلی شبکه . ';
break;
case '-2' :
$response = 'سپرده ها برابر نیستند . ';
break;
case '-3' :
$response = 'ورودی ها حاوی کاراکترهای غیر مجاز میباشد . ';
break;
case '-4' :
$response = 'کلمه عبور یا کد فروشنده اشتباه است . ';
break;
case '-5' :
$response = 'خطای بانک اطلاعاتی . ';
break;
case '-6' :
$response = 'سند قبلا برگشت کامل خورده . ';
break;
case '-7' :
$response = 'رسید دیجیتالی تهی است . ';
break;
case '-8' :
$response = 'خطای طول ورودی ها بیشتر از حد مجاز است . ';
break;
case '-9' :
$response = 'وجود کارکترهای غیر مجاز در مبلغ برگشتی . ';
break;
case '-10' :
$response = 'رسید دیجیتالی حاوی کارکترهای غیر مجاز است . ';
break;
case '-11' :
$response = 'طول ورودی ها کمتر از حد مجاز است . ';
break;
case '-12' :
$response = 'مبلغ برگشتی منفی است . ';
break;
case '-13' :
$response = 'مبلغ برگشتی برای برگشت جزیی بیش از مبلغ برگشت نخورده رسید دیجیتالی است . ';
break;
case '-14' :
$response = 'چنین تراکنشی تعریف نشده است . ';
break;
case '-15' :
$response = 'مبلغ برگشتی به صورت اعشاری داده شده . ';
break;
case '-16' :
$response = 'خطای داخلی سیستم . ';
break;
case '-17' :
$response = 'برگشت زدن تراکنشی که با کارت بانکی غیر از بانک سامان انجام شده . ';
break;
case '-18' :
$response = 'فروشنده نامعتبر است IP . ';
break;
case '500' :
$response = 'مبلغ پرداختی از مبلغ مورد نظر بیشتر است . ';
break;
case '501' :
$response = 'مبلغ پرداختی کمتر از مبلغ مورد نظر است . ';
break;

}

return $response;
}

این کد شما فقط برای یک مبلغ ثابت هستش نمیشه برای هر مبلغی باشه؟!

لینک به ارسال

چرا میشه .

ببینید هر پلاگین یا ماژولی که میخواید بزنید حتما براش یک متغیر تعریف شده که مقدار قیمت رو بر میگردونه .

شما Amount رو مساوی با همون متغیر قرار بدید .

لینک به ارسال

بله ، برای اتصال به درگاه میتونید از Merchant و Password که بانک بهتون داده توی پلاگین های بانک سامان استفاده کنید . خودمم از بانک صادرات درگاه گرفتم اون ها هم سامان بهم دادن .

یک نمونه کد برای خودم از روی فایل pdf ارسالی بانک بر مبنای SOAP نوشته بودم و تو پروژه هام ازش استفاده میکنم ، میذارم تا دوستان هم استفاده کنند .

ارسال به بانک :


<?php
$Amount = 1000; //ریال
$MID = ''; //مرچنت پذیرنده
$ResNum = time(); //شماره فاکتور یکتا و غیر تکراری
$CallbackURL = 'http://test.com/Verify.php';

echo '<form id="redirect_to_saman" style="display:none !important;" name="SamanBank" action="https://sep.shaparak.ir/Payment.aspx" method="POST">
<input type="hidden" id="MID" name="MID" value="'.$MID.'"/>
<input type="hidden" id="Amount" name="Amount" value="'.$Amount.'"/>
<input type="hidden" id="ResNum" name="ResNum" value="'.$ResNum.'"/>
<input type="hidden" id="RedirectURL" name="RedirectURL" value="'.$CallbackURL.'"/>
</form><script language="javascript">document.SamanBank.submit(); </script>';

بازگشت از بانک :


<?php
$Amount = 1000; //ریال
$MID = ''; // مرچنت پذیرنده
$Username = $MID; // نام کاربری پذیرنده که به صورت پیشفرض برابر مرچنت است .
$Password = ''; // کلمه عبور پذیرنده

$ResNum = isset($_POST['ResNum']) ? $_POST['ResNum'] : '';
$RefNum = isset($_POST['RefNum']) ? $_POST['RefNum'] : '';
$TRACENO = isset($_POST['TRACENO']) ? $_POST['TRACENO'] : '';
$State = isset($_POST['State']) ? $_POST['State'] : '';
if ( $State == 'OK' ) {
$Client = new SoapClient("https://sep.shaparak.ir/payments/referencepayment.asmx?WSDL");
$price = $Client->VerifyTransaction($RefNum, $MID);
if ( $price && is_numeric($price) && $price > 0 ){
if ( intval($price) == intval($Amount) ){
$status = 'completed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
$fault = 0;
}
else {
$status = 'failed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
if ( intval($price) > intval($Amount) )
$fault = 500;
else
$fault = 501;
$res = $Client->ReverseTransaction($RefNum,$MID,$Username,$Password);
if ( $res > 0 )
$Rev_Res = 1;// هزینه برگشت خورده است به مشتری
else
$Rev_Res = 2;// هزینه به مشتری برگشت نخورده و باید پیگیری شود ... میتواند ناشی از اشتباه بودن کلمه عبور باشد
}
}
else {
$status = 'failed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
$fault = $price;
}
}
elseif ( $State == 'Canceled By User' ) {
$status = 'cancelled';
$transaction_id = 0;
$digital_num = 0;
$fault = 0;
}
else {
$status = 'failed';
$transaction_id = 0;
$digital_num = 0;
$fault = $State;
}

if ($status == 'completed') {
echo 'تراکنش موفق بود . کد تراکنش :' . $transaction_id;
echo '<br/>رسید دیجیتال : ' . $digital_num;
}
else if ($status == 'completed') {
echo 'مشتری از انجام تراکنش انصراف داده است .';
}
else {
echo 'تراکنش با خطا مواجه شده است . دلیل خطا : ' . saman_error($fault);
}

function saman_error($error) {
$response = '';
switch($error){

case 'Canceled By User' :
$response = 'تراکنش توسط خريدار کنسل شده است.';
break;
case 'Invalid Amount' :
$response = 'مبلغ سند برگشتي، از مبلغ تراکنش اصلي بيشتر است.';
break;
case 'Invalid Transaction' :
$response = 'درخواست برگشت يک تراکنش رسيده است، در حالي که تراکنش اصلي پيدا نمي شود.';
break;
case 'Invalid Card Number' :
$response = 'شماره کارت اشتباه است.';
break;
case 'No Such Issuer' :
$response = 'چنين صادر کننده کارتي وجود ندارد.';
break;
case 'Expired Card Pick Up' :
$response = 'از تاريخ انقضاي کارت گذشته است و کارت ديگر معتبر نيست.';
break;
case 'Allowable PIN Tries Exceeded Pick Up' :
$response = 'رمز کارت (PIN) 3 مرتبه اشتباه وارد شده است در نتيجه کارت غير فعال خواهد شد.';
break;
case 'Incorrect PIN' :
$response = 'خريدار رمز کارت (PIN) را اشتباه وارد کرده است.';
break;
case 'Exceeds Withdrawal Amount Limit' :
$response = 'مبلغ بيش از سقف برداشت مي باشد.';
break;
case 'Transaction Cannot Be Completed' :
$response = 'تراکنش Authorize شده است ( شماره PIN و PAN درست هستند) ولي امکان سند خوردن وجود ندارد.';
break;
case 'Response Received Too Late' :
$response = 'تراکنش در شبکه بانکي Timeout خورده است.';
break;
case 'Suspected Fraud Pick Up' :
$response = 'خريدار يا فيلد CVV2 و يا فيلد ExpDate را اشتباه زده است. ( يا اصلا وارد نکرده است)';
break;
case 'No Sufficient Funds' :
$response = 'موجودي به اندازي کافي در حساب وجود ندارد.';
break;
case 'Issuer Down Slm' :
$response = 'سيستم کارت بانک صادر کننده در وضعيت عملياتي نيست.';
break;
case 'TME Error' :
$response = 'خطا ايجاد شده قابل شناسايى نيست. لطفا با مديريت سايت تماس بگيريد . ';
break;
case '-1' :
$response = 'خطای داخلی شبکه . ';
break;
case '-2' :
$response = 'سپرده ها برابر نیستند . ';
break;
case '-3' :
$response = 'ورودی ها حاوی کاراکترهای غیر مجاز میباشد . ';
break;
case '-4' :
$response = 'کلمه عبور یا کد فروشنده اشتباه است . ';
break;
case '-5' :
$response = 'خطای بانک اطلاعاتی . ';
break;
case '-6' :
$response = 'سند قبلا برگشت کامل خورده . ';
break;
case '-7' :
$response = 'رسید دیجیتالی تهی است . ';
break;
case '-8' :
$response = 'خطای طول ورودی ها بیشتر از حد مجاز است . ';
break;
case '-9' :
$response = 'وجود کارکترهای غیر مجاز در مبلغ برگشتی . ';
break;
case '-10' :
$response = 'رسید دیجیتالی حاوی کارکترهای غیر مجاز است . ';
break;
case '-11' :
$response = 'طول ورودی ها کمتر از حد مجاز است . ';
break;
case '-12' :
$response = 'مبلغ برگشتی منفی است . ';
break;
case '-13' :
$response = 'مبلغ برگشتی برای برگشت جزیی بیش از مبلغ برگشت نخورده رسید دیجیتالی است . ';
break;
case '-14' :
$response = 'چنین تراکنشی تعریف نشده است . ';
break;
case '-15' :
$response = 'مبلغ برگشتی به صورت اعشاری داده شده . ';
break;
case '-16' :
$response = 'خطای داخلی سیستم . ';
break;
case '-17' :
$response = 'برگشت زدن تراکنشی که با کارت بانکی غیر از بانک سامان انجام شده . ';
break;
case '-18' :
$response = 'فروشنده نامعتبر است IP . ';
break;
case '500' :
$response = 'مبلغ پرداختی از مبلغ مورد نظر بیشتر است . ';
break;
case '501' :
$response = 'مبلغ پرداختی کمتر از مبلغ مورد نظر است . ';
break;

}

return $response;
}

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

ممنون میشم اگه کد کلیش رو هم بزاری واسه من و دیگران که بتونن استفاده کنن

لینک به ارسال

دقیقا کد کلی رو گذاشتم :)

کد جزیی بستگی به هر ماژول یا پلاگین داره ... بعنوان مثال در ماژول بانک سامانی که تو شاپ ووکامرس پارسی گذاشتیم بجای :


$Amount = 1000;

از کد زیر استفاده کردیم :


$Amount = intval($order->order_total);

یعنی میاد قیمت رو از کد مربوط به سفارش ووکامرس فراخونی میکنه و به سمت بانک ارجاع میده .

پ . ن : تو نمونه کدی که گذاشته بودم ویرایش کردم و یه کوچولو تغییر دادم یعنی توی شرط دوم cancelled رو جا گذاشته بودم .

ویرایش شده توسط HANNANStd
لینک به ارسال
  • 4 سال بعد...
در در 10/19/2015 at 15:27، HANNANStd گفته است :

بله ، برای اتصال به درگاه میتونید از Merchant و Password که بانک بهتون داده توی پلاگین های بانک سامان استفاده کنید . خودمم از بانک صادرات درگاه گرفتم اون ها هم سامان بهم دادن .

یک نمونه کد برای خودم از روی فایل pdf ارسالی بانک بر مبنای SOAP نوشته بودم و تو پروژه هام ازش استفاده میکنم ، میذارم تا دوستان هم استفاده کنند .

ارسال به بانک :

 

 

<?php
$Amount = 1000; //ریال
$MID = ''; //مرچنت پذیرنده
$ResNum = time(); //شماره فاکتور یکتا و غیر تکراری
$CallbackURL = 'http://test.com/Verify.php';

echo '<form id="redirect_to_saman" style="display:none !important;" name="SamanBank" action="https://sep.shaparak.ir/Payment.aspx" method="POST">
<input type="hidden" id="MID" name="MID" value="'.$MID.'"/>
<input type="hidden" id="Amount" name="Amount" value="'.$Amount.'"/>
<input type="hidden" id="ResNum" name="ResNum" value="'.$ResNum.'"/>
<input type="hidden" id="RedirectURL" name="RedirectURL" value="'.$CallbackURL.'"/>
</form><script language="javascript">document.SamanBank.submit(); </script>';

 

بازگشت از بانک :

 

 

<?php
$Amount = 1000; //ریال
$MID = ''; // مرچنت پذیرنده
$Username = $MID; // نام کاربری پذیرنده که به صورت پیشفرض برابر مرچنت است .
$Password = ''; // کلمه عبور پذیرنده

$ResNum = isset($_POST['ResNum']) ? $_POST['ResNum'] : '';
$RefNum = isset($_POST['RefNum']) ? $_POST['RefNum'] : '';
$TRACENO = isset($_POST['TRACENO']) ? $_POST['TRACENO'] : '';
$State	 = isset($_POST['State']) ? $_POST['State'] : '';
if ( $State == 'OK' ) {
$Client = new SoapClient("https://sep.shaparak.ir/payments/referencepayment.asmx?WSDL");
$price = $Client->VerifyTransaction($RefNum, $MID);
if ( $price && is_numeric($price) && $price > 0 ){
if ( intval($price) == intval($Amount) ){
$status = 'completed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
$fault = 0;
}
else {
$status = 'failed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
if ( intval($price) > intval($Amount) )
$fault = 500;
else
$fault = 501;
$res = $Client->ReverseTransaction($RefNum,$MID,$Username,$Password);
if ( $res > 0 )
$Rev_Res = 1;// هزینه برگشت خورده است به مشتری
else
$Rev_Res = 2;// هزینه به مشتری برگشت نخورده و باید پیگیری شود ... میتواند ناشی از اشتباه بودن کلمه عبور باشد
}
}
else {
$status = 'failed';
$transaction_id = $TRACENO;
$digital_num = $RefNum;
$fault = $price;
}
}
elseif ( $State == 'Canceled By User' ) {
$status = 'cancelled';
$transaction_id = 0;
$digital_num = 0;
$fault = 0;
}
else {
$status = 'failed';
$transaction_id = 0;
$digital_num = 0;
$fault = $State;
}

if ($status == 'completed') {
echo 'تراکنش موفق بود . کد تراکنش :' . $transaction_id;
echo '<br/>رسید دیجیتال : ' . $digital_num;
}
else if ($status == 'cancelled') {
echo 'مشتری از انجام تراکنش انصراف داده است .';
}
else {
echo 'تراکنش با خطا مواجه شده است . دلیل خطا : ' . saman_error($fault);
}

function saman_error($error) {
$response = '';
switch($error){

case 'Canceled By User' :
$response = 'تراکنش توسط خريدار کنسل شده است.';
break;
case 'Invalid Amount' :
$response = 'مبلغ سند برگشتي، از مبلغ تراکنش اصلي بيشتر است.';
break;
case 'Invalid Transaction' :
$response = 'درخواست برگشت يک تراکنش رسيده است، در حالي که تراکنش اصلي پيدا نمي شود.';
break;
case 'Invalid Card Number' :
$response = 'شماره کارت اشتباه است.';
break;
case 'No Such Issuer' :
$response = 'چنين صادر کننده کارتي وجود ندارد.';
break;
case 'Expired Card Pick Up' :
$response = 'از تاريخ انقضاي کارت گذشته است و کارت ديگر معتبر نيست.';
break;
case 'Allowable PIN Tries Exceeded Pick Up' :
$response = 'رمز کارت (PIN) 3 مرتبه اشتباه وارد شده است در نتيجه کارت غير فعال خواهد شد.';
break;
case 'Incorrect PIN' :
$response = 'خريدار رمز کارت (PIN) را اشتباه وارد کرده است.';
break;
case 'Exceeds Withdrawal Amount Limit' :
$response = 'مبلغ بيش از سقف برداشت مي باشد.';
break;
case 'Transaction Cannot Be Completed' :
$response = 'تراکنش Authorize شده است ( شماره PIN و PAN درست هستند) ولي امکان سند خوردن وجود ندارد.';
break;
case 'Response Received Too Late' :
$response = 'تراکنش در شبکه بانکي Timeout خورده است.';
break;
case 'Suspected Fraud Pick Up' :
$response = 'خريدار يا فيلد CVV2 و يا فيلد ExpDate را اشتباه زده است. ( يا اصلا وارد نکرده است)';
break;
case 'No Sufficient Funds' :
$response = 'موجودي به اندازي کافي در حساب وجود ندارد.';
break;
case 'Issuer Down Slm' :
$response = 'سيستم کارت بانک صادر کننده در وضعيت عملياتي نيست.';
break;
case 'TME Error' :
$response = 'خطا ايجاد شده قابل شناسايى نيست. لطفا با مديريت سايت تماس بگيريد . ';
break;
case '-1' :
$response = 'خطای داخلی شبکه . ';
break;
case '-2' :
$response = 'سپرده ها برابر نیستند . ';
break;
case '-3' :
$response = 'ورودی ها حاوی کاراکترهای غیر مجاز میباشد . ';
break;
case '-4' :
$response = 'کلمه عبور یا کد فروشنده اشتباه است . ';
break;
case '-5' :
$response = 'خطای بانک اطلاعاتی . ';
break;
case '-6' :
$response = 'سند قبلا برگشت کامل خورده . ';
break;
case '-7' :
$response = 'رسید دیجیتالی تهی است . ';
break;
case '-8' :
$response = 'خطای طول ورودی ها بیشتر از حد مجاز است . ';
break;
case '-9' :
$response = 'وجود کارکترهای غیر مجاز در مبلغ برگشتی . ';
break;
case '-10' :
$response = 'رسید دیجیتالی حاوی کارکترهای غیر مجاز است . ';
break;
case '-11' :
$response = 'طول ورودی ها کمتر از حد مجاز است . ';
break;
case '-12' :
$response = 'مبلغ برگشتی منفی است . ';
break;
case '-13' :
$response = 'مبلغ برگشتی برای برگشت جزیی بیش از مبلغ برگشت نخورده رسید دیجیتالی است . ';
break;
case '-14' :
$response = 'چنین تراکنشی تعریف نشده است . ';
break;
case '-15' :
$response = 'مبلغ برگشتی به صورت اعشاری داده شده . ';
break;
case '-16' :
$response = 'خطای داخلی سیستم . ';
break;
case '-17' :
$response = 'برگشت زدن تراکنشی که با کارت بانکی غیر از بانک سامان انجام شده . ';
break;
case '-18' :
$response = 'فروشنده نامعتبر است IP . ';
break;
case '500' :
$response = 'مبلغ پرداختی از مبلغ مورد نظر بیشتر است . ';
break;
case '501' :
$response = 'مبلغ پرداختی کمتر از مبلغ مورد نظر است . ';
break;

}

return $response;
}

 

سلام کد بسیار مفیدی هست من برای بانک رفاه استفاده کردم ولی تو مرحله اخر که باید تایید نهایی بزنم مینویسه تراکنش نا معتبر می باشد کسی هست کمک کنه ؟ مرسی عکس اینجا اپلود کردم : r.png

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...