رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
لینک برگشت
#1
باسلام

میخواستم بدونم در فریمورک yii2 موقعی که از درگاه پرداخت به سایت برمیگردیم خطا میده که مربوط به csrfهستش میخواستم بدونم چجوری میشه این مشکل رو بدون غیر فعال کردن csrf حل کرد؟نیاز به کدخاص یا تغییر اتی داره؟ واینکه من کداتصال به درگاه بانک ملت کلاسش رو پیدا کردم ولی نحوه استقاده از کلاس ها رو نمیدونم ممنون میشم راهنمایی کنید
مثل کلاس زیر که اقای شیخله طراحی کردند:



<?php

class mellat  
{
       const terminalID = 1000001;
       const username = 'wssddff';
   const password = 2655;
       
       
       //const webservice = 'https://pgws.bpm.bankmellat.ir/pgwchannel/services/pgw';
       //const webservice = 'https://pgwsf.bpm.bankmellat.ir:1443/pgwchannel/services/pgw';
       const webservice = 'https://pgwsf.bpm.bankmellat.ir/pgwchannel/services/pgw';

       

               /**

       *       method send request to bank and get authority!
       *
       * @param $price int , toman تومان
       * @param $order_id int , unique id
       * @param $callback string , callback site
       * @return object , au: authority , go: bank link payment , status: the status of connection!
       **/
       public function request($price = NULL , $order_id = NULL , $callback = NULL)
       {
               $parameters = array(
                               'terminalId' => self::terminalID ,
                               'userName' => self::username ,
                               'userPassword' => self::password ,
                               'orderId' => $order_id ,
                               'amount' => $price * 10 ,
                               'localDate' => date("Ymd") ,
                               'localTime' => date("His") ,
                               'additionalData' => '' ,
                               'callBackUrl' => $callback ,
                               'payerId' => '0' ,
               );
                       
                       try
               {
                       $client = new nusoap_client(self::webservice);
                       $err = $client->getError();
                       if($err)
                               return -6;
               }
               catch(Exception $e)
               {
                       Logs::model()->add('خطا در اتصال به بانک ملت','خطا : '.strip_tags($err));
                       return -6;
               }
                               
                       $result = $client->call('bpPayRequest', $parameters, 'http://interfaces.core.sw.bps.com/');
                       //print_r($result);
                       $res = explode (',', $result);
                       if( ! isset($res[0]) or $res[0] != "0" or ! isset($res[1]))
                               return -6;

                       else
                       {
                               return strip_tags($res[1]);
                       }

                       
               return -6;
       }
       
       


               /**
       * method to check verify transaction
       *
       * @param $price int , تومان
       * @param $order_id int , unique order id 
       * @param $au string , authority code
       * @return bool true/false 
       **/
       public $SaleReferenceId = '';
       public function verify($price = NULL ,$order_id = NULL , $au = NULL)
       {

               //print_r($_POST);
                       $RefId = @$_POST['RefId']; // notNeed
                       $ResCode = @$_POST['ResCode'];
                       $SaleOrderId = (int) @$_POST['SaleOrderId'];
                       $SaleReferenceId = @$_POST['SaleReferenceId'];
                       //Logs::model()->add('SaleReferenceId',$SaleReferenceId .'-'.$RefId);
                       
                       $this->SaleReferenceId = $SaleReferenceId;
                       /**/
                       //check
                       if($SaleOrderId != $order_id or $RefId!=$au or ! isset($_POST['ResCode']))
                       {
                               Logs::model()->add('برگشت بانک ملت','خطا : ورودی نامعتبر است !');
                               return false;
                       }
                               
                       if($ResCode !=0)
                       {
                               return false;
                               #Logs::model()->add('برگشت بانک ملت','خطا : پرداخت انجام نشد .');
                       }
                       
               try
               {
                       $client = new nusoap_client(self::webservice);
                       $err = $client->getError();
                       if($err)
                               return false;
               }
               catch(Exception $e)
               {
                       Logs::model()->add('خطا در برگشت ملت ','خطا : '.strip_tags($err));
                       return false;
               }

                                 
                       $parameters = array(
                                       'terminalId' => self::terminalID ,
                                       'userName' => self::username ,
                                       'userPassword' => self::password ,
                                       'orderId' => $SaleOrderId ,
                                       'saleOrderId' => $SaleOrderId ,
                                       'saleReferenceId' => $SaleReferenceId
                                       );

                               // Call the SOAP method
                               unset($result);
                               $result = $client->call('bpVerifyRequest', $parameters,'http://interfaces.core.sw.bps.com/');

                               // Check for a fault
                               //if ($client->fault) 
                                       //Logs::model()->add('برگشت بانک ملت','_خطا در اتصال به بانک .');

                               
                               $err = $client->getError();
                               if ($err) 
                               {
                                       Logs::model()->add('برگشت بانک ملت',"__خطا : " . strip_tags($err) );
                                       return false;
                               }

                               
                               if(isset($result) and $result==0)
                               {
                                       //settel
                                       unset($result);
                                       $result = $client->call('bpSettleRequest', $parameters,'http://interfaces.core.sw.bps.com/');
                                       if ($client->fault) 
                                       {
                                       Logs::model()->add('برگشت بانک ملت','خطا در اتصال به بانک .');
                                               return false;
                                       }

                               
                               $err = $client->getError();
                               if ($err) 
                               {
                                       Logs::model()->add('برگشت بانک ملت',"خطا : " . strip_tags($err) );
                                       return false;
                               }

                               
                                       if(isset($result) and $result==0)
                                       {
                                               return true;    
                                       }
                               }
                               return false;
       }
       
       /* go to bank by au */



       public function go2bank($id='')
       {
               ?>
<html><head><meta charset='utf-8' /></head><body>
please wait ...
<form name='myform' action='https://pgw.bpm.bankmellat.ir/pgwchannel/startpay.mellat' method='POST'>
<input type='hidden'  name='RefId' value='<?php echo $id  ?>'>
</form>
<script language='javascript'>document.myform.submit()</script>
<!-- MobinPal Payment Webservice System desiged by RezaOnline.net -->
</body></html>
                        <?php
                        die;
       }
}
پاسخ
تشکر شده توسط:
#2
باید توی لینکی که برای بانک بعنوان callBackUrl میفرستین، شناسه CSRF Token رو هم قرار بدین.
پاسخ
تشکر شده توسط:
#3
ممنون میشم کمی بیشتر راهنمایی کنید یعنی باید وقتی لینک برگشت رو معرفی میکنم این دستور رو هم قرار بدیم تو ادرس Yii::app()->request->csrfToken به عنوانYII_CSRF_TOKEN در ادرس برگشتی؟
پاسخ
تشکر شده توسط:
#4
بله دقیقاً
پاسخ
تشکر شده توسط:
#5
من اینطوری قرار دادم :
http://".$_SERVER["SERVER_NAME"]."/user/payfund/verfiy?YII_CSRF_TOKEN=".Yii::$app->request->csrfToken."
ولی بازم همون خطارو داد 400
پاسخ
تشکر شده توسط:
#6
کسی هست یک سورس دراین مورد داشته باشه؟
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 2 مهمان