یلدا ادامه داره... ❤️ ۴۰ درصد تخفیف همه دورهها
استفاده از تخفیفهابا سلام خدمت عزیزان
من یک درگاه بانک سامان دارم میخوام با لاراول پارمترها رو ارسال کنم سمت url و سایت بانک رو نمایش بدم
کد من
$client = new SoapClient('https://sep.shaparak.ir/payment.aspx');
$result = $client->Request(
[
'Amount' => $price,
'ResNum' => $res,
'RedirectURL' => $RedirectURL,
'MID' => $this->MerchantID,
]
);
خطا
SoapFault
SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://sep.shaparak.ir/payment.aspx' : Premature end of data in tag html line 1
نکته: من اگر بصورت فرم اینپوت ها hidden درست کنم براحتی پارمترها ارسال و سایت بانک نمایش داده میشه مشکلی نیست ، فقط مشکل امنیتی داره اینجوری و هرکسی میتونه با یک inspect گرفتن مقادیر رو تغییر بده و یجورایی مشکل امنیتی داره حالا من میخوام سمت کنترلر پردازش انجام بشه
ممنون میشم اگر دوستانی راه حلی دارن به بنده هم بگن. سپاسگذارم
@juza666
کل پروسه پرداخت سامان به این شکل هست :
1- شما پارامترهای ابتدایی رو میفرستی به متد RequestToken که بانک بهت یه توکن بده
2- اگر توکن گرفتی ، میری واسه پرداخت ، این قسمت باید بصورت javascript نوشته بشه
3- توی صفحه callback باید پرداختت رو بررسی کنی
4- اگر همه چیز اوکی بود باید verify کنی
چهار مرحله بالا به این شکل میشه :
STEP 1 :
public function samanPay ()
{
$params = $this->request->getAssocParams();
$settings = $this->getSamanBankSetting();
$price = $params['price'];
$callbackUrl = $params['callbackUrl'];
$save = ( is_array( $params['save'] ) ) ? $params['save'] : [];
$client = new SoapClient ( 'https://sep.shaparak.ir/payments/initpayment.asmx?wsdl' );
$orderId = 'Order' . rand( 1000,9999 );
try
{
$token = $client->RequestToken( $settings['MID'], /// MID
$orderId, /// ResNum
$price /// TotalAmount
);
} catch ( Exception $e )
{
echo $e->error();
}
if ( $token )
{
$save[1]['bankid'] = 'saman';
$save[1]['orderid'] = $orderId;
\f\ttt::dal( 'core.setting.bank.savePay',$save );
return [ 'result' => 'success','message' => 'در حال اتصال به درگاه بانک سامان ...','params' => [ 'Token' => $token,'RedirectURL' => $callbackUrl ],'func' => 'goToBank' ];
} else
{
return [ 'result' => 'error','message' => 'خطا در اتصال به درگاه بانک!' ];
}
}
STEP 2 :
var form = document.createElement("form");
form.setAttribute("method", "POST");
form.setAttribute("action", "https://sep.shaparak.ir/payment.aspx");
form.setAttribute("target", "_self");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("name", "token");
hiddenField.setAttribute("value", param.Token);
form.appendChild(hiddenField);
var hiddenField2 = document.createElement("input");
hiddenField2.setAttribute("name", "RedirectURL");
hiddenField2.setAttribute("value", param.RedirectURL);
form.appendChild(hiddenField2);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
STEP 3 :
public function CallBackBank($params, $bank)
{
$order = \f\ttt::service('payment.getPayByOrderIdNew',
[
'orderId' => $params['ResNum'],
]);
if ($params['StateCode'] == -1) {
//for cancel trans
$status = 'cancel';
\f\ttt::service('payment.removeTransactionAndTurns',
[
'orderId' => $params['ResNum']
]);
} else {
$refId = $params['TRACENO'];
$result = \f\ttt::service('core.setting.bank.saman.verifySaman',
[
'orderId' => $params['ResNum'],
'refrenceId' => $params['RefNum']
]);
//echo $result;
if ($result == ($order['price'] * 10)) {
\f\ttt::service('payment.saveTransactionAndTurns',
[
'orderId' => $params['ResNum'],
'refrenceId' => $params['TRACENO']
]);
}
}
}
STEP 4 :
public function verifySaman()
{
$params = $this->request->getAssocParams();
$settings = $this->getSamanBankSetting();
$soapclient = new soapclient('https://sep.shaparak.ir/payments/referencepayment.asmx?WSDL');
$res= $soapclient->VerifyTransaction($params['refrenceId'],$settings['MID']);#reference number and sellerid
return $res;
}
(موارد مربوط به ثبت اطلاعات توی بانک اطلاعاتیت دیگه خودت میدونی کجاها باید انجام بشه ، ضمن اینکه من یه جاهایی یه متدهایی رو صدا زدم که دارم تنظیمات مربوط به درگاه رو میگیرم که مطمئنا اونارو هم متوجه میشی)
سلام داداش خوبی میشه کداتو بقرستی من نتونتسم وصل شم؟ و این ک توکن رو باید خودمون جنریت کنیم یا بانک بده؟
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟