M.Javad

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

11 پست در این موضوع قرار دارد

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

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


<?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 ;
}
?>

0

به اشتراک گذاری این پست


لینک به پست

سلام. از ایشون کمک بخواین:

www.modulebank.ir

1

به اشتراک گذاری این پست


لینک به پست

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

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


<?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 ها قرار داد داره و هر دوره با یک یا چند تاشون قرار داد میبنده ...

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

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

موفق باشید

4

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

سلام

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

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

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

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

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

موفق باشید

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

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

ویرایش شده در توسط M.Javad
0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

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

این فرم هستش


<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
0

به اشتراک گذاری این پست


لینک به پست

احساس میکنم این کد رو هم باید یه جایی قرار بدم :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 ;
}
?>

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

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

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

بله ، برای اتصال به درگاه میتونید از 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
2

به اشتراک گذاری این پست


لینک به پست

بله ، برای اتصال به درگاه میتونید از 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;
}

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

0

به اشتراک گذاری این پست


لینک به پست

چرا میشه .

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

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

1

به اشتراک گذاری این پست


لینک به پست

بله ، برای اتصال به درگاه میتونید از 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;
}

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

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

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

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

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


$Amount = 1000;

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


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

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

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

ویرایش شده در توسط HANNANStd
3

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری