Current time: 04-25-2024, 08:59 PM Hello There, Guest! (LoginRegister)


Thread Closed 
 
Thread Rating:
  • 2 Votes - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Free Russian Billing Panel - Need Help
Author Message
data-stream_ru Offline
Moderator
*****
Moderators

Posts: 471
Joined: Jan 2009
Reputation: 7
Post: #1
Free Russian Billing Panel - Need Help
ДД!
Спасибо что меня ещё не уволили с должности модератора за систематическую неявку на рабочее место.
Просто семью кормить надо и на бесплатные проекты времени не стало совсем Sad
Особенно с учётом того, что их не включают в сборку. Наверное по томк что мы исть русские и есьмь по определению дебилы. А то что я нос утёр буржуям со своим кроном и со своими графиками загрузки серверов, так это им и не нужно. Зазорно им русский код принимать.
Это одна из причин почему я тут долго не появлялся...
"Не ходил бы ты ванёк во солдаты"

Так вот такие дела...
Я озаботился панелью билинга, т.к. количество юзеров растёт, и экселевских табличек и ручного выставления счетов уже недостаточно.
Я тут подумал, что для бесплатной панели управления сервером актуальна так же и _бесплатная_ панель билинга.
Посему от покупки _rootpanel_ я отказался. Не смотря на то, что я могу её дезендить и единожды купив за 30$ попользовать навсегда. пополнение за 2 бакса. Тоже раззендить.

Но там нет IspCP, а за доделку деньгов требуют.

Я так думаю не нарушая, о великий закон, есть возможность взять панель управления в открытом коде и бесплатную. Интерфейс с платёжными системами типа яндекс-деньги, вебмани, и т.д уже присутствует, и другие РБК-деньги присутсвует. Так же API с регистраторами доменов в большинстве своём есть.

Надо лишь чуток доптлить под нашу панель.
Ну и конечшно свои имхатые имхо реализовать.

Для начала ссылки
http://.joonte.com/
http://wiki.joonte.com/
http://forum.joonte.com/

Могу сделать тестера в уже установленной панели если кому надо.
(This post was last modified: 07-07-2011 07:45 PM by data-stream_ru.)
07-07-2011 07:34 PM
Visit this user's website Find all posts by this user
data-stream_ru Offline
Moderator
*****
Moderators

Posts: 471
Joined: Jan 2009
Reputation: 7
Post: #2
RE: Free Russian Billing Panel - Need Help
Извиниьте, поторопился, нас там не ждут.
Там какие то свои интересы.
Тема закрывается.

Ног панель можно взять "под себя!" Там разрабы учстали типа. и набижали доброхоты типа. А панель типа нечья...
(This post was last modified: 07-07-2011 09:54 PM by data-stream_ru.)
07-07-2011 09:33 PM
Visit this user's website Find all posts by this user
data-stream_ru Offline
Moderator
*****
Moderators

Posts: 471
Joined: Jan 2009
Reputation: 7
Post: #3
RE: Free Russian Billing Panel - Need Help
Тем не мене, первый кусочек.

Данная панель формирует свои логины , тогда как логином к IspCP является имя домена.
Некоторое ковыряне принесло следующие результаты.

Лично у меня путь выглядит так
/var/www/virtual/data-stream.ru/billing/htdocs/hosts/billing.data-stream.ru/comp/www/API
Надо положить файл HostingOrder.comp следующего содержания
Code:
#-------------------------------------------------------------------------------
/** @author Великодный В.В. (Joonte Ltd.) */
/******************************************************************************/
/******************************************************************************/
Eval(COMP_INIT);
/******************************************************************************/
/******************************************************************************/
$Args = Args();
#-------------------------------------------------------------------------------
$ContractID      = (integer) @$Args['ContractID'];
$Domain          =  (string) @$Args['Domain'];
$HostingSchemeID = (integer) @$Args['HostingSchemeID'];
$DomainTypeID    =  (string) @$Args['DomainTypeID'];
$DomainName      =  (string) @$Args['DomainName'];
$DomainSchemeID  = (integer) @$Args['DomainSchemeID'];
#-------------------------------------------------------------------------------
if(Is_Error(System_Load('modules/Authorisation.mod')))
  return ERROR | @Trigger_Error(500);
#-------------------------------------------------------------------------------
$Regulars = Regulars();
#-------------------------------------------------------------------------------
if($DomainTypeID != 'None'){
  #-----------------------------------------------------------------------------
  $Domain = StrToLower($Domain);
  #-----------------------------------------------------------------------------
  if(Preg_Match('/^www\.(.+)$/',$Domain,$Mathces))
    $Domain = Next($Mathces);
  #-----------------------------------------------------------------------------
  if(!Preg_Match($Regulars['Domain'],$Domain))
    return new gException('WRONG_DOMAIN','Неверный домен');
  #-----------------------------------------------------------------------------
  $Count = DB_Count('HostingOrders',Array('Where'=>SPrintF("(`Domain` LIKE '%%%s%%' OR `Parked` LIKE '%%%s%%') AND `StatusID` != 'Waiting'",$Domain,$Domain)));
  if(Is_Error($Count))
    return ERROR | @Trigger_Error(500);
  #-----------------------------------------------------------------------------
  if($Count)
    return new gException('DOMAIN_ALREADY_EXISTS','Доменное РёРјСЏ уже используется для РѕРґРЅРѕРіРѕ РёР· заказов хостинга');
}
#-------------------------------------------------------------------------------
if(!$HostingSchemeID)
  return new gException('HOSTING_SCHEME_NOT_DEFINED','Тарифный план РЅРµ выбран');
#-------------------------------------------------------------------------------
$HostingScheme = DB_Select('HostingSchemes',Array('ID','Name','ServersGroupID','IsActive'),Array(​'UNIQ','ID'=>$HostingSchemeID));
#-------------------------------------------------------------------------------
switch(ValueOf($HostingScheme)){
  case 'error':
    return ERROR | @Trigger_Error(500);
  case 'exception':
    return new gException('SCHEME_NOT_FOUND','Выбранный тарифный план заказа хостинга РЅРµ найден');
  case 'array':
    #---------------------------------------------------------------------------
    if(!$HostingScheme['IsActive'])
      return new gException('SCHEME_NOT_ACTIVE','Выбранный тарифный план заказа хостинга РЅРµ активен');
    #---------------------------------------------------------------------------
    $Contract = DB_Select('Contracts',Array('ID','UserID'),Array('UNIQ','ID'=>$ContractID));
    #---------------------------------------------------------------------------
    switch(ValueOf($Contract)){
      case 'error':
        return ERROR | @Trigger_Error(500);
      case 'exception':
        return new gException('CONTRACT_NOT_FOUND','Договор РЅРµ найден');
      case 'array':
        #-----------------------------------------------------------------------
        $__USER = $GLOBALS['__USER'];
        #-----------------------------------------------------------------------
        $IsPermission = Permission_Check('ContractRead',(integer)$__USER['ID'],(integer)$Contract['UserID']);
        #-----------------------------------------------------------------------
        switch(ValueOf($IsPermission)){
          case 'error':
            return ERROR | @Trigger_Error(500);
          case 'exception':
            return ERROR | @Trigger_Error(400);
          case 'false':
            return ERROR | @Trigger_Error(700);
          case 'true':
            #-------------------------------------------------------------------
            $HostingServer = DB_Select('HostingServers',Array('ID','Domain','Prefix'),Array('Where'=>SPrintF("`ServersGroupID` = %u AND `IsDefault` = 'yes'",$HostingScheme['ServersGroupID'])));
            #-------------------------------------------------------------------
            switch(ValueOf($HostingServer)){
              case 'error':
                return ERROR | @Trigger_Error(500);
              case 'exception':
                return new gException('SERVER_NOT_DEFINED','Сервер размещения РЅРµ определен');
              case 'array':
                #---------------------------------------------------------------
                $HostingServer = Current($HostingServer);
                #---------------------------------------------------------------
                $Password = SubStr(Md5(UniqID()),0,12);
                #-------------------------TRANSACTION---------------------------
                if(Is_Error(DB_Transaction($TransactionID = UniqID('HostingOrder'))))
                  return ERROR | @Trigger_Error(500);
                #---------------------------------------------------------------
                $Where = SPrintF("`ContractID` = %u AND `TypeID` = 'HostingRules'",$Contract['ID']);
                #---------------------------------------------------------------
                $Count = DB_Count('ContractsEnclosures',Array('Where'=>$Where));
                if(Is_Error($Count))
                  return ERROR | @Trigger_Error(500);
                #---------------------------------------------------------------
                if($Count < 1){
                  #-------------------------------------------------------------
                  $Comp = Comp_Load('www/API/ContractEnclosureMake',Array('ContractID'=>$Contract['ID'],'TypeID'=>'HostingRules'));
                  #-------------------------------------------------------------
                  switch(ValueOf($Comp)){
                    case 'error':
                      return ERROR | @Trigger_Error(500);
                    case 'exception':
                      return ERROR | @Trigger_Error(400);
                    case 'integer':
                      # No more...
                    break;
                    default:
                      return ERROR | @Trigger_Error(101);
                  }
                }
                #---------------------------------------------------------------
                $OrderID = DB_Insert('Orders',Array('ContractID'=>$Contract['ID'],'ServiceID'=>10000));
                if(Is_Error($OrderID))
                  return ERROR | @Trigger_Error(500);
                #---------------------------------------------------------------
                $Login = SPrintF('%s%s',$HostingServer['Prefix'],$OrderID);
                #---------------------------------------------------------------
                if($DomainTypeID == 'None')
                  $Domain = SPrintF('%s.%s',$Login,$HostingServer['Domain']);
                #---------------------------------------------------------------
                $IHostingOrder = Array(
                  #-------------------------------------------------------------
                  'OrderID'  => $OrderID,
                  'SchemeID' => $HostingScheme['ID'],
                  'ServerID' => $HostingServer['ID'],
                  'Domain'   => $Domain,
                  'Login'    => $Domain,
                  'Password' => $Password,
                );
                #---------------------------------------------------------------
                $HostingOrderID = DB_Insert('HostingOrders',$IHostingOrder);
                if(Is_Error($HostingOrderID))
                  return ERROR | @Trigger_Error(500);
                #---------------------------------------------------------------
                $Comp = Comp_Load('www/API/StatusSet',Array('ModeID'=>'HostingOrders','StatusID'=>'Waiting','RowsIDs'=>$HostingOrderID,'Comment'=>'Заказ создан Рё ожидает оплаты'));
                #---------------------------------------------------------------
                switch(ValueOf($Comp)){
                  case 'error':
                    return ERROR | @Trigger_Error(500);
                  case 'exception':
                    return ERROR | @Trigger_Error(400);
                  case 'array':
                    #-----------------------------------------------------------
                    $IsInsert = DB_Insert('Events',Array('UserID'=>$Contract['UserID'],'PriorityID'=>'Billing','Text'=>SPrintF('Сформирована заявка РЅР° заказ хостинга логин (%s), домен (%s), тариф (%s)',$Login,$Domain,$HostingScheme['Name'])));
                    if(Is_Error($IsInsert))
                      return ERROR | @Trigger_Error(500);
                    #-----------------------------------------------------------
                    switch($DomainTypeID){
                      case 'Order':
                        #-------------------------------------------------------
                        if(!Preg_Match($Regulars['DomainName'],$DomainName))
                          return new gException('WRONG_DOMAIN_NAME','Неверное РёРјСЏ домена');
                        #-------------------------------------------------------
                        $DomainScheme = DB_Select('DomainsSchemes',Array('ID','IsActive','MinOrderYears'),Array('UNIQ','​ID'=>$DomainSchemeID));
                        #-------------------------------------------------------
                        switch(ValueOf($DomainScheme)){
                          case 'error':
                            return ERROR | @Trigger_Error(500);
                          case 'exception':
                            return new gException('DOMAIN_SCHEME_NOT_FOUND','Выбранный тарифный домена план РЅРµ найден');
                          case 'array':
                            #---------------------------------------------------
                            if(!$DomainScheme['IsActive'])
                              return new gException('SCHEME_NOT_ACTIVE','Выбранный тарифный план заказа домена РЅРµ активен');
                            #---------------------------------------------------
                            $DomainOrder = Comp_Load('www/API/DomainOrder',Array('ContractID'=>$Contract['ID'],'DomainName'=>$DomainName,'DomainSchemeID'=>$DomainScheme['ID'],'HostingOrderID'=>$HostingOrderID));
                            #---------------------------------------------------
                            switch(ValueOf($DomainOrder)){
                              case 'error':
                                return ERROR | @Trigger_Error(500);
                              case 'exception':
                                # No more...
                              break 3;
                              case 'array':
                                #-----------------------------------------------
                                $DomainOrderPay = Comp_Load('www/API/DomainOrderPay',Array('DomainOrderID'=>$DomainOrder['DomainOrderID'],'YearsPay'=>$DomainScheme['MinOrderYears']));
                                #-----------------------------------------------
                                switch(ValueOf($DomainOrderPay)){
                                  case 'error':
                                    return ERROR | @Trigger_Error(500);
                                  case 'exception':
                                    # No more...
                                  break 4;
                                  case 'array':
                                    # No more...
                                  break 4;
                                  default:
                                    return ERROR | @Trigger_Error(101);
                                }
                              default:
                                return ERROR | @Trigger_Error(101);
                            }
                          default:
                            return ERROR | @Trigger_Error(101);
                        }
                      case 'Transfer':
                        #-------------------------------------------------------
                        $DomainScheme = DB_Select('DomainsSchemes','ID',Array('UNIQ','ID'=>$DomainSchemeID));
                        #-------------------------------------------------------
                        switch(ValueOf($DomainScheme)){
                          case 'error':
                            return ERROR | @Trigger_Error(500);
                          case 'exception':
                            return new gException('DOMAIN_SCHEME_NOT_FOUND','Выбранный тарифный домена план РЅРµ найден');
                          case 'array':
                            #---------------------------------------------------
                            $DomainTransfer = Comp_Load('www/API/DomainTransfer',Array('ContractID'=>$Contract['ID'],'DomainName'=>$DomainName,'DomainSchemeID'=>$DomainScheme['ID']));
                            #---------------------------------------------------
                            switch(ValueOf($DomainTransfer)){
                              case 'error':
                                return ERROR | @Trigger_Error(500);
                              case 'exception':
                                # No more...
                              break 2;
                              case 'array':
                                # No more...
                              break 2;
                              default:
                                return ERROR | @Trigger_Error(101);
                            }
                          default:
                            return ERROR | @Trigger_Error(101);
                        }
                      break;
                      case 'Nothing':
                        # No more...
                      break;
                      default:
                        # No more...
                    }
                    #-----------------------------------------------------------
                    if(Is_Error(DB_Commit($TransactionID)))
                      return ERROR | @Trigger_Error(500);
                    #----------------------END TRANSACTION----------------------
                    return Array('Status'=>'Ok','HostingOrderID'=>$HostingOrderID);
                  default:
                    return ERROR | @Trigger_Error(101);
                }
              default:
                return ERROR | @Trigger_Error(101);
            }
          default:
            return ERROR | @Trigger_Error(101);
        }
      default:
        return ERROR | @Trigger_Error(101);
    }
  default:
    return ERROR | @Trigger_Error(101);
}
#-------------------------------------------------------------------------------

Если верить описанию, то аналогичный файл в дефолтной структуре перепишется при певервом же апгрейте. Т.е. все ваши изменения пропадут.
Тогда как файлы в папке имени вашего домена имеют наивысший приоритет.

Либу для панели напишу позже, уже начал.

P/S что касается жития святой фришной панели, то там такая ситуация - разрабы забили и почили на лаврах. На форуме рулят какие то предиректы к манам, которых нет. Сами ни хрена не въезжают и дописывают всякую фигню.
Идеальный вариант взять наработку "под себя" (попросту спи#дить) и допилить до логического уровня.
07-19-2011 02:40 AM
Visit this user's website Find all posts by this user
Thread Closed 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)