Управление статусами заказа в платежном плагине

Тема в разделе "Модернизация расширений", создана пользователем heller_andrei, 22.01.2014.

  1. Offline

    heller_andrei Недавно здесь

    Регистрация:
    22.01.2014
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    Добрый день

    Долго искал платежный модуль Privat24 для Virtuemart2 (joomla 2.5)

    Решил найти любой отечественный и переделать под свои нужды. Был найден плагин платежной системы Intellectmoney.
    Он состоит из двух файлов, один собственно сам плагин, взаимодействующий с CMS, а второй это скрипт принимающий ответы со стороны банка и изменяющий статус заказа.
    Статус у меня изменять получилось в таблице __virtuemart_orders, но вот оповещать клиента отправкой письма и добавлением в историю заказов проблема.
    Я не силен в PHP и не знаю как правильно прицепить этот скрипт к joomle, что бы воспользоваться вот этим простым механизмом.

    Код (PHP):
    1. if (!class_exists('VirtueMartModelOrders'))
    2.    require( JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php' );
    3.       $modelOrder = new VirtueMartModelOrders();
    4.       $order['order_status'] = 'C';
    5.       $order['virtuemart_order_id'] = $order_info;
    6.       $order['customer_notified'] = 1;     
    7.       $modelOrder->updateStatusForOneOrder($order_info, $order, true);
    8.     return TRUE;

    Привожу ниже весь код слушающего ответы скрипта.

    Код (PHP):
    1. <?php
    2.  
    3.  error_reporting(E_ALL);
    4.  ini_set('display_errors', 'On');
    5.  
    6.  header("HTTP/1.0 200 OK");
    7.  
    8.  $my_path = dirname(__FILE__);
    9.    
    10.     if( file_exists($my_path."/../../../configuration.php")) {
    11.         $absolute_path = dirname( $my_path."/../../../configuration.php" );
    12.         require_once($my_path."/../../../configuration.php");
    13.     }
    14.     elseif( file_exists($my_path."/../../configuration.php")) {
    15.         $absolute_path = dirname( $my_path."/../../configuration.php" );
    16.         require_once($my_path."/../../configuration.php");
    17.     }
    18.     elseif( file_exists($my_path."/configuration.php")) {
    19.         $absolute_path = dirname( $my_path."/configuration.php" );
    20.         require_once( $my_path."/configuration.php" );
    21.     }
    22.     else {
    23.         die( "Joomla Configuration File not found!" );
    24.     }
    25.         $absolute_path = realpath( $absolute_path );
    26.    
    27.     // Set up the appropriate CMS framework
    28.     if(class_exists( 'jconfig' ))
    29.     {
    30.         define('_JEXEC', 1);
    31.         define('JPATH_BASE', $absolute_path);
    32.         define('DS', DIRECTORY_SEPARATOR);
    33.         define('JPATH_VM_PLUGINS', $absolute_path. "/administrator/components/com_virtuemart/plugins");    
    34.         define('JPATH_VM_ADMINISTRATOR', $absolute_path. "/administrator/components/com_virtuemart");
    35.         define('JPATH_VM_LIBRARIES', $absolute_path. "/libraries");
    36.        
    37.         // Load the framework
    38.         require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
    39.         require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );       
    40.        
    41.         // create the mainframe object
    42.         $mainframe = & JFactory::getApplication( 'site' );
    43.        
    44.         // Initialize the framework
    45.         $mainframe->initialise();      
    46.     }
    47.     else
    48.     {
    49.         define('_VALID_MOS', '1');
    50.         require_once($mosConfig_absolute_path. '/includes/joomla.php');
    51.         require_once($mosConfig_absolute_path. '/includes/database.php');
    52.         $database = new database( $mosConfig_host, $mosConfig_user, $mosConfig_password, $mosConfig_db, $mosConfig_dbprefix );
    53.         $mainframe = new mosMainFrame($database, 'com_virtuemart', $mosConfig_absolute_path ); 
    54.     }  
    55.    
    56.     $db =& JFactory::getDBO(); /// подключаемся к MySQL
    57.     $query = "SELECT * FROM #__virtuemart_paymentmethods WHERE payment_element LIKE 'Intellectmoney';";
    58.     $db->setQuery($query);
    59.     $row = $db->loadAssocList('payment_element');
    60.     $payment = $row['Intellectmoney']['payment_params'];
    61.      preg_match('#eshop_id="(.*)"#Uis',$payment,$shop);
    62.      preg_match('#debug="(.*)"#Uis',$payment,$debug_Stats);
    63.      preg_match('#secret_key="(.*)"#Uis',$payment,$skey);
    64.      preg_match('#status_pending="(.*)"#Uis',$payment,$pending);
    65.      preg_match('#status_success="(.*)"#Uis',$payment,$success);
    66.      preg_match('#status_canceled="(.*)"#Uis',$payment,$canceled);
    67.     $eshop_Id = $shop[1];
    68.     if ($debug_Stats[1]==0)
    69.      {
    70.       $debug_State = 'ok';
    71.      }
    72.     else
    73.      {
    74.       $debug_State = 'test';
    75.      }
    76.      
    77.     $pass = $skey[1]; //Получаем secret_key
    78.     $statuspending= $pending[1]; //Статус заказа для отложенных платежей
    79.     $statussuccess= $success[1]; //Статус заказа для успешной операции
    80.     $statuscanceled= $canceled[1]; //Статус заказа для неудавшихся сделок
    81.  
    82.  
    83. $payment_p   = $_POST['payment'];
    84. $signature_p = $_POST['signature'];
    85.  
    86. $signature = sha1(md5(htmlspecialchars_decode($payment_p, ENT_QUOTES)  . $pass));  
    87. $info = explode('&', htmlspecialchars_decode($payment_p, ENT_QUOTES));
    88.  
    89. foreach ($info as $value)
    90.  {
    91.   $z = explode('=', $value);
    92.   $data[$z[0]] = $z[1];
    93.  }
    94.  if($signature == $signature_p AND $debug_State == $data["state"])
    95.   {  
    96.      $order_info = $data['order'];   
    97.  
    98.    if ( !$order_info)
    99.       {    
    100.         return 0;
    101.       }
    102.        
    103.     if( $order_info == $data['order'])
    104.       {
    105.         $db->setQuery("UPDATE #__virtuemart_orders SET `order_status`='". $statussuccess. "' WHERE order_number LIKE '". $order_info. "'");
    106.         $db->Query();          
    107.  
    108.         if (!class_exists('VirtueMartModelOrders'))
    109.          require( JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php' );
    110.            $modelOrder = new VirtueMartModelOrders();
    111.            $order['order_status'] = 'C';
    112.            $order['virtuemart_order_id'] = $order_info;
    113.            $order['customer_notified'] = 1;    
    114.            $modelOrder->updateStatusForOneOrder($order_info, $order, true);
    115.         return TRUE;
    116.       }  
    117.   }
    118.  else
    119.   {    
    120.     echo 'ERROR: не совпадает crc!';
    121.     return 0;
    122.   }    
    123. ?>

    Пожалуйста, помогите разобраться.
     
  2.  

Поделиться этой страницей

Загрузка...