Интеграция с панелью ISPConfig

Запрос улучшений, интеграции с различными системами и т.д.
Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-16 13:50:25

Добрый день.
Пытаюсь организовать интеграцию биллинга с ISPConfig.
Вопрос к разработчикам по структуре:

в hosts/мой_хост/servers/Hosting.xml добавил:

Код: Выделить всё

   <ISPConfig>
      <Settings>
         <Port>8080</Port>
         <Protocol>ssl</Protocol>
         <Theme>default</Theme>
         <Language>ru</Language>
         <Url>https://isp.su:8080/</Url>
      </Settings>
   </ISPConfig>   

Код: Выделить всё

      <Options>
         <IspManager4>IspManager4</IspManager4>
         <IspManager5>IspManager5</IspManager5>
         <DirectAdmin>DirectAdmin</DirectAdmin>
         <Plesk>Plesk</Plesk>
         <ISPConfig>ISPConfig</ISPConfig>
         <Cpanel>Cpanel</Cpanel>
         <NullSystem>Ручное управление</NullSystem>
      </Options>


в hosts/hosting/system/libs/ создал библиотеку ISPConfig.php

в ней пока создал только function ISPConfig_Create и в ней-же прописал авторизацию, так-как не понял как прикрутить к ISPConfig_Logon авторизацию через soap.
При выполнении Задачи сестемы "Создание хостинг-аккаунта" в Результатах выполнения получаю "Функция не поддерживается API модулем".
Прописал в hosts/hosting/system/classes/HostingServer.class.php во все функции названия по приципу "Функция Logon не поддерживается API модулем".
Но всеравно в результатах нет названия функции: "Функция не поддерживается API модулем".

Подскажите куда копать?

Отправлено спустя 1 час 3 минуты 32 секунды:
Ну и еще вопросик:

Что должна возвращать function ISPConfig_Logon ? И, если конечно не напряжет, то что должны возвращать все доступные в библиотеке функции?

Аватара пользователя
Alex Keda
Сообщения: 2882
Зарегистрирован: 2009-10-07 14:30:54
Откуда: USSR
Поблагодарили: 19 раз

Интеграция с панелью ISPConfig

Сообщение Alex Keda » 2015-02-16 17:58:45

alezhen писал(а):Источник цитаты в hosts/мой_хост/servers/Hosting.xml добавил:

Код: Выделить всё

   <ISPConfig>
      <Settings>
         <Port>8080</Port>
         <Protocol>ssl</Protocol>
         <Theme>default</Theme>
         <Language>ru</Language>
         <Url>https://isp.su:8080/</Url>
      </Settings>
   </ISPConfig>   

Код: Выделить всё

      <Options>
         <IspManager4>IspManager4</IspManager4>
         <IspManager5>IspManager5</IspManager5>
         <DirectAdmin>DirectAdmin</DirectAdmin>
         <Plesk>Plesk</Plesk>
         <ISPConfig>ISPConfig</ISPConfig>
         <Cpanel>Cpanel</Cpanel>
         <NullSystem>Ручное управление</NullSystem>
      </Options>



в интерфейсе, в выборе используемой панели ISPConfig появился?

alezhen писал(а):Источник цитаты в ней пока создал только function ISPConfig_Create и в ней-же прописал авторизацию, так-как не понял как прикрутить к ISPConfig_Logon авторизацию через soap.

reg.ru через soap работает. или как оно там называется когда JSON посылают/получают. можно в их библиотеке посмотреть примеры

да и вообще, покажите код - что в ISPConfig.php у вас лежит

alezhen писал(а):Источник цитаты Прописал в hosts/hosting/system/classes/HostingServer.class.php во все функции названия по приципу "Функция Logon не поддерживается API модулем".

что прописали?

alezhen писал(а):Источник цитаты Что должна возвращать function ISPConfig_Logon ?

открываем любую либу, например ./hosts/hosting/system/libs/IspManager5.php и смотрим:

Код: Выделить всё

function IspManager5_Logon($Settings,$Params){
        /******************************************************************************/
        $__args_types = Array('array','array');
        #-------------------------------------------------------------------------------
        $__args__ = Func_Get_Args(); Eval(FUNCTION_INIT);
        /******************************************************************************/
        return Array('Url'=>$Settings['Params']['Url'],'Args'=>Array('lang'=>$Settings['Params']['Language'],'theme'=>$Settings['Params']['Theme'],'checkcookie'=>'no','username'=>$Params['Login'],'password'=>$Params['Password'],'func'=>'auth'));
        #-------------------------------------------------------------------------------
}

возвращает она набор параметров, передаваемых скрипту логона ./styles/hosting/Js/OrderManage.js из ./hosts/hosting/comp/www/API/OrderManage.comp.php

соответственно ./styles/hosting/Js/OrderManage.js посылает этот набор параметров на заданный URL = $Settings['Params']['Url'] где и происходит логин в панель.

вообще, функции *_Logon - они для входа клиентов из биллинга в панельку управления, в вашем случае ISPConfig

alezhen писал(а):Источник цитаты И, если конечно не напряжет, то что должны возвращать все доступные в библиотеке функции?

напряжёт. поскольку все они возвращают данные, и данные эти разные.

в общем случае, когда просто выполнено успешно - удаление ли, смена тарифа ли - это TRUE, в случаях когда требуется дополнительная информация о итоге действия - создание VPS (присвоенный ей IP адрес надо же взять где-то), запрос ли данных о нагрузке - возвращаются массивы с данными.

всё это можно посмотреть в библиотеках, благо их много. самые реализованные - ISPmanager4 и ISPmanager5 - исходить лучше из них.

==========
самые частые грабли, из своего опыта:
1. не забываем чистить кэш. /Administrator/Home - кнопочка "очистить память", или хардкорный вариант - перезапуск того что занимается кэшированием - сервера memcached или всего апача, если это APC
2. не забываем перезапускать крон, если такое задание уже выполнялось. он открыл файлы и держит их. а значит внесённых после его запуска изменений - он не увидит. тоже самое про кэш - он (крон) его изменений не видит до сброса или перезапуска.
3. заданяи крона во время выполения лучше не убивать - будут недосозданные аккаунты, и т.п....

Отправлено спустя 3 минуты 23 секунды:
alezhen писал(а):Источник цитаты в hosts/hosting/system/libs/ создал библиотеку ISPConfig.php

её стоило положить к себе в хост. иначе при обновлении улетит она ... и не будет у вас библиотеки =)

Отправлено спустя 6 минут 48 секунд:
а вообще, я бы не рекомендовал с нуля начинать писать
берёте какойнить hosts/hosting/system/libs/IspManager5.php и делаете так

Код: Выделить всё

cp hosts/hosting/system/libs/IspManager5.php hosts/_ИМЯ_ВАШЕГО_БИЛЛИНГА_/system/libs/ISPConfig.php

после чего начинаете заниматься выпиливанием лобзиком по дереву =)
т.е. - надо вам создание аккаунта, идёте и переименовываете

Код: Выделить всё

IspManager5_Create -> ISPConfig_Create

после чего дёргаете функцию и смотрите на ошибки, правите что надо, снова дёргаете (задание, а не функцию, естственно) ...

рекомендую включить отсылку ошибок себе на почту: viewtopic.php?f=5&t=1766
также включите дебаг, у вас правда старай версия, и он будет периодически поплёвываться в в браузер ...
можно в core/Load это закоментить,

Код: Выделить всё

Exit($Log);
помоему оно ...
тока аккуратней, сломаете core/Load - вообще ничего работать не будет

Отправлено спустя 37 секунд:
и вообще, лучше взять последнюю версию из репозитория.
там достаточно много изменений...

чтоб сизифова труда не было
Убей их всех! Бог потом рассортирует...

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-16 18:47:03

Alex Keda писал(а):Источник цитаты делаете так

cp hosts/hosting/system/libs/IspManager5.php hosts/_ИМЯ_ВАШЕГО_БИЛЛИНГА_/system/libs/ISPConfig.php


спасибо, никак не мог понять куда

Alex Keda писал(а):Источник цитаты в интерфейсе, в выборе используемой панели ISPConfig появился?


да, появилась. в этой части интерфейса проблем нет.

Alex Keda писал(а):Источник цитаты вообще, функции *_Logon - они для входа клиентов из биллинга в панельку управления


взял на заметку. я думал это авторизация при запросе к панели

Alex Keda писал(а):Источник цитаты да и вообще, покажите код - что в ISPConfig.php у вас лежит


выложу чуть позже. хочу сегодня допилить, то о чем вы поведали :)

Аватара пользователя
Alex Keda
Сообщения: 2882
Зарегистрирован: 2009-10-07 14:30:54
Откуда: USSR
Поблагодарили: 19 раз

Интеграция с панелью ISPConfig

Сообщение Alex Keda » 2015-02-16 18:53:57

ну вы хоть чё-то покажите...
а то может не в ту строну пилите-то =))
--
если хотите включения либы в репозиторий, настоятельно пожелание, придерживаться правил синтакса, как в ./hosts/hosting/system/libs/IspManager5.php
отступы - табуляция, разделители, правила написания названий функций встроенных и штатных и т.п.
комментарии по желанию, разве что исключительные случаи, типа ./hosts/billing/comp/Passwords/Generator.comp.php
там сейчас достаточно простой, но всё равно читать и понимать сложно ...

просто ну очень не хочется за вами всё потом поправлять =((
а красиво написанный код и читать легче.

Отправлено спустя 1 минуту 57 секунд:
иногда оставляю свои комменты с разработки, когда считаю что логика достаточно сложная получилась...
чтоб потом быстрей вкурить, ибо через год-два-три - тяжело чё-то понять, чё же имелось в виду под

Код: Выделить всё

($a == $$b)?$c = $d:$e = $g

=))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-16 19:33:02

Код: Выделить всё

function ISPConfig_Create($Settings,$Login,$Password,$Domain,$IP,$HostingScheme,$Email,$PersonID = 'Default',$Person = Array()){
  /****************************************************************************/
  $__args_types = Array('array','string','string','string','string','array','string','string','array');
  #-----------------------------------------------------------------------------
  $__args__ = Func_Get_Args(); Eval(FUNCTION_INIT);
  /****************************************************************************/
  $Http = Array(
    #---------------------------------------------------------------------------
    'Address'  => $Settings['IP'],
    'Port'     => $Settings['Port'],
    'Host'     => $Settings['Address'],
    'Protocol' => $Settings['Protocol'],
    'Basic'    => SPrintF('%s:%s',$Settings['Login'],$Settings['Password'])
  );
  #-----------------------------------------------------------------------------
  $IDNA = new Net_IDNA_php5();
  $Domain = $IDNA->encode($Domain);
  #-----------------------------------------------------------------------------
  $Request = Array(
            'company_name' => '',
            'contact_name' => $Login,
            'customer_no' => '',
            'vat_id' => '1',
            'street' => '',
            'zip' => '',
            'city' => '',
            'state' => '',
            'country' => 'RU',
            'telephone' => '',
            'mobile' => '',
            'fax' => '',
            'email' => $Email,
            'internet' => '',
            'icq' => '',
            'notes' => '',
            'default_mailserver' => 1,
            'limit_maildomain' => -1,
            'limit_mailbox' => -1,
            'limit_mailalias' => -1,
            'limit_mailaliasdomain' => -1,
            'limit_mailforward' => -1,
            'limit_mailcatchall' => -1,
            'limit_mailrouting' => 0,
            'limit_mailfilter' => -1,
            'limit_fetchmail' => -1,
            'limit_mailquota' => -1,
            'limit_spamfilter_wblist' => 0,
            'limit_spamfilter_user' => 0,
            'limit_spamfilter_policy' => 1,
            'default_webserver' => 1,
            'limit_web_ip' => '',
            'limit_web_domain' => -1,
            'limit_web_quota' => -1,
            'web_php_options' => 'no,fast-cgi,cgi,mod,suphp',
            'limit_web_subdomain' => -1,
            'limit_web_aliasdomain' => -1,
            'limit_ftp_user' => -1,
            'limit_shell_user' => 0,
            'ssh_chroot' => 'no,jailkit',
            'limit_webdav_user' => 0,
            'default_dnsserver' => 1,
            'limit_dns_zone' => -1,
            'limit_dns_slave_zone' => -1,
            'limit_dns_record' => -1,
            'default_dbserver' => 1,
            'limit_database' => -1,
            'limit_cron' => 0,
            'limit_cron_type' => 'url',
            'limit_cron_frequency' => 5,
            'limit_traffic_quota' => -1,
            'limit_client' => 0, // If this value is > 0, then the client is a reseller
            'parent_client_id' => 0,
            'username' => $Login,
            'password' => $Password,
            'language' => 'ru',
            'usertheme' => 'default',
            'template_master' => $HostingScheme['PackageID'],
            'template_additional' => '',
            'created_at' => 0
    #---------------------------------------------------------------------------
  );
  #-----------------------------------------------------------------------------
/*  if($HostingScheme['IsShellAccess'])
    $Request['hasshell'] = 'yes';
  #-----------------------------------------------------------------------------
  if($HostingScheme['IsCGIAccess'])
    $Request['cgi'] = 'yes';
  #-----------------------------------------------------------------------------
  $Response = Http_Send('/remote/index.php',$Http,$Request);
  if(Is_Error($Response))
    return ERROR | @Trigger_Error('[Cpanel_Create]: не удалось осуществить запрос');
*/
  #-----------------------------------------------------------------------------
if ($Settings['Protocol']=='tcp'){
      $ispconfig_protocol = 'http://';
   }ifelse($Settings['Protocol']=='ssl'){
      $ispconfig_protocol = 'https://';
   }
$soap_location = $ispconfig_protocol.$Settings['Address'].':'.$Settings['Port'].'/remote/index.php';
$soap_uri = $ispconfig_protocol.$Settings['Address'].':'.$Settings['Port'].'/remote/';

$client = new SoapClient(null, array('location' => $soap_location,
                                     'uri'      => $soap_uri,
                                     'trace' => 1,
                                     'exceptions' => 1));
try {
    if($session_id = $client->login($username,$password)) {
//        echo 'Logged successfull. Session ID:'.$session_id.'<br />';
    }
    $reseller_id = 0; // this id has to be 0 if the client shall not be assigned to admin or if the client is a reseller
    $Response = $client->client_add($session_id, $reseller_id, $Request);
$client->logout($session_id);
  #-----------------------------------------------------------------------------
//  $Response = Strip_Tags(Trim($Response['Body']));
  #-----------------------------------------------------------------------------
//  if(!Preg_Match('/data_processing_error/',$Response))
    return TRUE;
  #-----------------------------------------------------------------------------
//  return new gException('WRONG_ANSWER',$Response);
}

синтаксис буду править на готовом варианте

Аватара пользователя
Alex Keda
Сообщения: 2882
Зарегистрирован: 2009-10-07 14:30:54
Откуда: USSR
Поблагодарили: 19 раз

Интеграция с панелью ISPConfig

Сообщение Alex Keda » 2015-02-16 20:04:19

ну нифига там параметров каких-то левых....
а нахрена это - оно же для управления хостингом а не биллинг?

Код: Выделить всё

            'company_name' => '',
            'contact_name' => $Login,
            'customer_no' => '',
            'vat_id' => '1',
            'street' => '',
            'zip' => '',
            'city' => '',
            'state' => '',
            'country' => 'RU',
            'telephone' => '',
            'mobile' => '',
            'fax' => '',
            'email' => $Email,
            'internet' => '',
            'icq' => '',
            'notes' => '',

???

Отправлено спустя 1 минуту 49 секунд:
да, чувствуя ахтунг с этими параметрами, предупрежу - сохраняйте оригинальные системные файлы
иначе потом будет не понять что вы попарвили и где =)
лучше всего рядышком положить копию биллинга =)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-16 20:14:01

Alex Keda писал(а):Источник цитаты а нахрена это

Согласен. Поэтому они и не будут заполнятся.
Там возможно два варианта:
1) заполняем все параметры тарифа в биллинге и передаем их панели для создания клиенту тарифа панели custom (удобно для изменения параметров на лету).
2) создаем тарифы в панели, а из биллинга передаем только ИД тарифа.

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-17 1:41:11

Ну начало положено. Удалось их подружить. Создавать аккаунт с фиксированными лимитами научил. Буду работать над дальнейшим функционалом.

Аватара пользователя
Alex Keda
Сообщения: 2882
Зарегистрирован: 2009-10-07 14:30:54
Откуда: USSR
Поблагодарили: 19 раз

Интеграция с панелью ISPConfig

Сообщение Alex Keda » 2015-02-17 3:32:37

да чё там дружить-то...
берёшь за образец готовую либу да правишь функции под себя

муторно только, и тестить на чём-то надо...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
alezhen
Сообщения: 119
Зарегистрирован: 2015-02-16 12:22:03
Откуда: Россия
Благодарил (а): 5 раз
Поблагодарили: 1 раз
Контактная информация:

Интеграция с панелью ISPConfig

Сообщение alezhen » 2015-02-17 17:48:42

При создании аккаунта из биллинга в панеле она возвращает ИД созданного пользователя. как его можно прикрутить к заказу, что-бы потом дергать в других функциях интеграции?


Вернуться в «Запрос улучшений»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя