urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
Puzan
Сообщения: 58
Зарегистрирован: Ср окт 31, 2007 09:58

Сообщение Puzan »

Подскажите как получить IP адресс из сервесной связки через urfa ?

Спасибо!

Вот часть кода куда надо его вставить.

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

function set_speed($user_id, $account_id, $urfa_admin) {
			case 1 :
			$length_speed = 10;
			$speed = 100;

			system("/usr/local/bin/mikrotik_rfw.sh /queue simple add name=$account_id target-addresses=IP адрес limit-at=100M/100M max-limit=100M/100M priority=1");

			break;

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

Добрый вечер!
Извините, что влезаю!
Заметил следующее: после обновления браузера Mozilla Firefox до версии 5.0, стали странно отрабатывать некоторые urfa-функции! Причем одна и та же функия при обращении к плагину может не работать, а при следующем обращении к плагину в личном кабинете, функия работает. И на первый взгляд нету никакой логики - такое поведение у абсолютно всех urfa-функций!
На всех остальных браузерах такого нет, все работает на ура!
Никто больше не сталкивался с такой проблемой?

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »

2Puzan

а зачем собственно скрипт? если этот параметр можно передать из UTM напрямую скрипту

Vovics
Сообщения: 1
Зарегистрирован: Ср июл 06, 2011 19:50

Сообщение Vovics »

Для 64-х битных систем, если при вызове пользовательских функций возникает ошибка "Error calling function ", поможет следующее:

URFAClient_Packet.php:

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

    function AttrGetInt($code)
    {
                if (isset($this->attr[$code]['data'])) {
                    $x = unpack("N", $this->attr[$code]['data']);
                    if ($x[1]>2147483647) return $x[1]-4294967296;
                    return $x[1];
                } else {
                        return FALSE;
                }
    }

Puzan
Сообщения: 58
Зарегистрирован: Ср окт 31, 2007 09:58

Сообщение Puzan »

starchik писал(а):2Puzan

а зачем собственно скрипт? если этот параметр можно передать из UTM напрямую скрипту
Делаю костыль для услуги турбо спеед в связке с UTM + Mikrotik

Может конечно и кривовато.

Но подругому не знаю как сделать.

Осталось разобратся с этим параметром и почистить код. Оттестировать и можно на общее обозрение выставить.

Alex_P
Сообщения: 35
Зарегистрирован: Пт июл 01, 2011 06:36
Откуда: Россия

Сообщение Alex_P »

Добрый день
Пытаюсь так вызвать функцию rpcf_add_service_to_user для подключения разовой услуги с service_id=37.
В $aid - account_id пользователя

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

$service = array();
$service['user_id'] = $aid;
$service['account_id'] = $aid;
$service['service_id'] = '37';
$service['service_type'] = '1';
$service['return_type'] = 'integer_return';
$service['tariff_link_id'] = '0';
$service['slink_id'] = '0';
$service['discount_date'] = time(); 
						$urfa_admin->rpcf_add_service_to_user($service);
функция в URFAClient_Admin.php выглядит так:

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

function rpcf_add_service_to_user($service) { //0x2551
	      $ret = array();
      if (!$this->connection->urfa_call(0x2551)) {
         print "Error calling function ". __FUNCTION__ ."\n";
         return FALSE;
      }
      $packet = $this->connection->getPacket();
      $packet->DataSetInt($service['user_id']);
      $packet->DataSetInt($service['account_id']);
      $packet->DataSetInt($service['service_id']);
      $packet->DataSetInt($service['service_type']);
      $packet->DataSetString($service['return_type']);
      $packet->DataSetInt($service['tariff_link_id']);
 
      switch($service['service_type'])
      {
         case 1: //once service
			$packet->DataSetInt($service['slink_id']);
			$packet->DataSetInt($service['discount_date']);
            break;
         case 2: //periodic service
            $packet->DataSetInt($service['slink_id']);
            $packet->DataSetInt($service['is_blocked']);
            $packet->DataSetInt($service['discount_period_id']);
            if($service['start_date'] == 0) $service['start_date'] = time();
            $packet->DataSetInt($service['start_date']);
            if($service['expire_date'] == 0) $service['expire_date'] = mktime(0, 0, 0, 1, 1, 2037);
            $packet->DataSetInt($service['expire_date']);
            $packet->DataSetInt($service['unabon']);
            $packet->DataSetInt($service['unprepay']);
            break;
         case 3: //iptraffic service
            $packet->DataSetInt($service['slink_id']);
            $packet->DataSetInt($service['is_blocked']);
            $packet->DataSetInt($service['discount_period_id']);
            if($service['start_date'] == 0) $service['start_date'] = time();
            $packet->DataSetInt($service['start_date']);
            if($service['expire_date'] == 0) $service['expire_date'] = mktime(0, 0, 0, 1, 1, 2037);
            $packet->DataSetInt($service['expire_date']);
            $packet->DataSetInt($service['unabon']);
            $packet->DataSetInt($service['unprepay']);
            $ip_groups_count = count($service['ip_groups']);
            $packet->DataSetInt($ip_groups_count);
            for&#40;$i=0;$i<$ip_groups_count;$i++&#41; &#123;
               $packet->DataSetIPAddress&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'ip_address'&#93;&#41;;
               $packet->DataSetIPAddress&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'mask'&#93;&#41;;
               $packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'mac'&#93;&#41;;
               $packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'iptraffic_login'&#93;&#41;;
               $packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'iptraffic_allowed_cid'&#93;&#41;;
               $packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'iptraffic_password'&#93;&#41;;
               $packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'ip_not_vpn'&#93;&#41;;
               $packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'dont_use_fw'&#93;&#41;;
               $packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'router_id'&#93;&#41;;
            &#125;
            $quotas_count = count&#40;$service&#91;'quotas'&#93;&#41;;
            $packet->DataSetInt&#40;$quotas_count&#41;;
            for&#40;$i=0;$i<$quotas_count;$i++&#41; &#123;
               $packet->DataSetInt&#40;$service&#91;'quotas'&#93;&#91;$i&#93;&#91;'tclass_id'&#93;&#41;;
               $packet->DataSetLong&#40;$service&#91;'quotas'&#93;&#91;$i&#93;&#91;'quota'&#93;&#41;;
            &#125;
            break;
         case 4&#58; //hotspot service
             break;
         case 5&#58; //dialup service
            $packet->DataSetInt&#40;$service&#91;'slink_id'&#93;&#41;;
            $packet->DataSetInt&#40;$service&#91;'is_blocked'&#93;&#41;;
            $packet->DataSetInt&#40;$service&#91;'discount_period_id'&#93;&#41;;
            if&#40;$service&#91;'start_date'&#93; == 0&#41; $service&#91;'start_date'&#93; = now&#40;&#41;;
            $packet->DataSetInt&#40;$service&#91;'start_date'&#93;&#41;;
            if&#40;$service&#91;'expire_date'&#93; == 0&#41; $service&#91;'expire_date'&#93; = max_time&#40;&#41;;
            $packet->DataSetInt&#40;$service&#91;'expire_date'&#93;&#41;;
            $packet->DataSetString&#40;$service&#91;'dialup_login'&#93;&#41;;
            $packet->DataSetString&#40;$service&#91;'dialup_password'&#93;&#41;;
            $packet->DataSetString&#40;$service&#91;'dialup_allowed_cid'&#93;&#41;;
            $packet->DataSetString&#40;$service&#91;'dialup_allowed_csid'&#93;&#41;;
            $packet->DataSetInt&#40;$service&#91;'callback_enabled'&#93;&#41;;
            $packet->DataSetInt&#40;$service&#91;'unabon'&#93;&#41;;
            $packet->DataSetInt&#40;$service&#91;'unprepay'&#93;&#41;;
            break;
         case 6&#58; //telephony service
         break;
 
      &#125;
      $this->connection->urfa_send_param&#40;$packet&#41;;
      if&#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
        $this->connection->urfa_get_data&#40;&#41;;
         if&#40;$service&#91;'return_type'&#93; == "integer_return"&#41; &#123;
            $ret&#91;'slink_id'&#93;=$x->DataGetInt&#40;&#41;;
            if&#40;$ret&#91;'slink_id'&#93; == -1&#41; return -1;
         &#125; else &#123;
            $error_msg=$x->DataGetString&#40;&#41;;
            if&#40;$error_msg != ""&#41; &#123;
               $ret&#91;'error_msg'&#93;=$error_msg;
               return -1;
            &#125;
         &#125;
      &#125; else &#123;
         return -1;
      &#125;
      return $ret;
 
   &#125;
Если функцию вызывать из test.php, который расположен в папке с урфой, то всё работает нормально. А если пытаюсь функцию вызвать из модуля стандартного ЛК, то в ответ получаю "Error calling function rpcf_add_service_to_user ". Версия биллинга -008. URFA-php вроде бы крайней версии. Вышеприведённый способ от Vovics не помогает.
Что тут не так? Как заставить функцию rpcf_add_service_to_user работать?

VooDoo
Сообщения: 71
Зарегистрирован: Вт сен 18, 2007 10:15

Сообщение VooDoo »

Выложите последнюю пропатченную урфу.
Не могу настроить под UTM 5.2.1-8 upd4

Munsera
Сообщения: 126
Зарегистрирован: Чт янв 27, 2011 15:29

Сообщение Munsera »

Присоединяюсь...

Neznayka
Сообщения: 3
Зарегистрирован: Ср июл 20, 2011 18:53

Сообщение Neznayka »

Подскажите, а с версией ядра 5.1.7-000 urfaphp работает вообще?
Я пытаюсь тут подключиться, но постоянно выдаёт ошибки.

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

@ini_set&#40;"display_errors", "1"&#41;;
error_reporting&#40;E_ALL&#41;;

require_once&#40;"./URFAClient.php"&#41;;

$UTMCore_Login='init';
$UTMCore_Password='init_pass';
$UTMCoreHost='192.168.7.129';
$UTMCorePort='11758';

try &#123;
        $urfa_user5 = new URFAClient_User5&#40;"user", "passw",$UTMCoreHost,$UTMCorePort&#41;;
        $urfa_admin = new URFAClient_Admin&#40;$UTMCore_Login, $UTMCore_Password&#41;;
    &#125; catch &#40;Exception $exception&#41; &#123; 
         echo "Error in line ", $exception->getLine&#40;&#41;;
         echo $exception->getMessage&#40;&#41;; 
	&#125; 
Соответственно в URFAClient.php тоже прописаны параметры

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

	public function __construct&#40;$login, $pass, $address = "192.168.7.129", $port = "11758", $ssl = false&#41;
Выдаёт ошибку "Error in line 27Error code 0"
Как я понимаю, ошибка при подлючении - либо в протоколе URFA нестыковки из-за старой версии, либо что-то другое.

uinman
Сообщения: 75
Зарегистрирован: Чт дек 02, 2010 06:39

Сообщение uinman »

Добрый день.

Появилась необходимость снимать администраторскую блокировку скриптом. Вопрос как снять? Пробовал две функции rpcf_delete_block и rpcf_edit_block. При вызове rpcf_edit_block получаю:

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

 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Call&#58; 0x300c &#40;rpcf_edit_block&#41;
?Debug &#58; Jul 21 02&#58;13&#58;29 28d9e5c0 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Real Call&#58; 0x300c &#40;rpcf_edit_block&#41;
 ERROR &#58; Jul 21 02&#58;13&#58;29 28d9e5c0 UTM5 DBA&#58; Incorrect starting or ending time of block, start time = 1311014185, end time = 1311401579
Не понятно что не нравится в дате...

При вызове функции rpcf_delete_block получаю

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

?Debug &#58; Jul 21 01&#58;29&#58;05 29ea19c0 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Call&#58; 0x300d &#40;rpcf_delete_block&#41;
?Debug &#58; Jul 21 01&#58;29&#58;05 29ea19c0 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Real Call&#58; 0x300d &#40;rpcf_delete_block&#41;
 ERROR &#58; Jul 21 01&#58;29&#58;05 29ea19c0 UTM5 DBA&#58; Block is already started, block ID = 1809, start time = 1311014185
Указываю при вызове id блокировки из blocks_info..Я так понимаю блокировку только можно удалить которая не стартовала еще...

Тогда все-таки, как снять блокировку? Заранее спасибо))

uinman
Сообщения: 75
Зарегистрирован: Чт дек 02, 2010 06:39

Сообщение uinman »

Не актуально, снял :)

uinman
Сообщения: 75
Зарегистрирован: Чт дек 02, 2010 06:39

Сообщение uinman »

Только странно, в момент снятия блокировки в логе появляются такие записи

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

?Debug &#58; Jul 23 13&#58;34&#58;02 28da0280 BusPeriodic&#58; inserted time_t 4 exp date 582031555 108
?Debug &#58; Jul 23 13&#58;34&#58;02 28da0280 BusPeriodic&#58; inserted time_t 4 exp date 582031555 109
?Debug &#58; Jul 23 13&#58;34&#58;02 28da0280 BusPeriodic&#58; inserted time_t 4 exp date 582031555 110
?
И так по всем аккаунтам, хотя блокировку снимал с одного 647 акааунта

Блокировку снимаю через rpcf_save_account изменением параметра is_blocked на ноль

uinman
Сообщения: 75
Зарегистрирован: Чт дек 02, 2010 06:39

Сообщение uinman »

Кто нибудь сталкивался?

Сделал триггер, который срабатывает при вставке записи в payment_transactions. Из триггера запускается php скрипт который разблокирует пользователя (для примера). Если вставляю запись руками в через Navicat с другого компа то все нормально срабатывает.

Как только начинаю делать это через админку, то есть вношу платеж, админка подвисает и потом таки вносит платеж. Но скрипт разблокировки не выполняется. Подвисание происходит на строке

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

 $urfa_admin = new URFAClient_Admin&#40;"****", "***", "127.0.0.1", 11758, true, true&#41;;
И в логе потом вываливается ошибка

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

SSL connection failed &#40;4&#41;, system errno <54> 
Кто сталкивался с такой ошибкой?

Аватара пользователя
Davy_Jones
Сообщения: 36
Зарегистрирован: Ср июл 27, 2011 12:50

Сообщение Davy_Jones »

Не получается реализовать кнопочку смены тарифа, кредита и подарок другу. Ругается на пермитты. Морда лежит на другом чемодане. В биллинге всё выставленно, в мускуле грант на базу есть. Тестил на разных версиях - 009rc2, 008upd5, 008upd4, Видимо проблемма с урфой. Если есть у кого под 008 версию урфа пропатченная - покажите плиз листинг файлов. Заранее огромное.

NetUP UTM billing system core. Compile date: Jul 14 2011 16:37:31
Version:5.2.1-008-update5-rh9 Rev #12047

Linux localhost.localdomain 2.6.35.6-45.fc14.x86_64 #1 SMP Mon Oct 18 23:57:44 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux



debug.log

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

 Info  &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#58; Connection from&#58; X.X.X.X&#58;49996 new Session Key <53b92f4e0abea38a09a29b154f010678>
 Info  &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#58; Card user <init@X.X.X.X> is connecting
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 StreamManager&#58; connection <51> created
 Info  &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; Access granted to &#91;SSL&#93;<init@X.X.X.X> &#40;UID&#58; 1&#41;
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; SSL type requested&#58; SSLv3&#40;2&#41;
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; Call&#58; 0xffffbfee &#40;__rpcs_user5_payments_report&#41;
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; Real Call&#58; 0xffffbfee &#40;__rpcs_user5_payments_report&#41;
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 UTM5 DBA&#58; DBAccess instance created
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 DBA&#58;Ctx&#58; Looking for free context &#40;system=0&#41;
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 DBCtx&#58; <143136416> SQL SELECT query&#58; SELECT id, name FROM payment_methods
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 DBCtx&#58; <143136416> SQL SELECT query&#58; SELECT archive_id,start_date,end_date FROM archives ORDER BY id
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 DBCtx&#58; <143136416> SQL SELECT query&#58; SELECT id, payment_incurrency, currency_id, currency_rate, payment_absolute,actual_date, payment_enter_date, method, who_receive, comments_for_user,comments_for_admins, account_id, payment_ext_number, burn_time FROM payment_transactions WHERE payment_enter_date>='1307862217' AND payment_enter_date<='1311750217' AND account_id='1' ORDER BY payment_enter_date DESC
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 DBA&#58;Ctx&#58; Pushing back free context &#40;system=0&#41;
-Stats &#58; Jul 27 11&#58;08&#58;03 f260fb70 UTM5 DBA&#58;     Stats&#58; Uptime&#58; 00&#58;00&#58;00. Events&#58; 0; Errors&#58; 0
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; Call 0xffffbfee &#40;__rpcs_user5_payments_report&#41; finished...
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; Stream cleared
 Info  &#58; Jul 27 11&#58;08&#58;03 f2710b70 RPCConn&#91;SSL&#93;<web@X.X.X.X>&#58; Request for function <0x2030> not permitted
 Info  &#58; Jul 27 11&#58;08&#58;03 f2710b70 RPCConn&#91;SSL&#93;<web@X.X.X.X>&#58; Request for function <0x2030> not permitted
 Warn  &#58; Jul 27 11&#58;08&#58;03 f2710b70 RPCConn&#91;SSL&#93;<web@X.X.X.X>&#58; Session closed
?Debug &#58; Jul 27 11&#58;08&#58;03 f2710b70 RPCConn&#91;SSL&#93;<web@X.X.X.X>&#58; Session Key <53b92f4e4314a437865fc0c5317c9417> stored for UID -3 from <X.X.X.X>
 Warn  &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; Session closed
?Debug &#58; Jul 27 11&#58;08&#58;03 f2710b70 RPCConn&#91;SSL&#93;<web@X.X.X.X>&#58; SSL cleared
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; Session Key <53b92f4e0abea38a09a29b154f010678> stored for UID 1 from <X.X.X.X>
?Debug &#58; Jul 27 11&#58;08&#58;03 f2710b70 StreamManager&#58; connection <50> closed
?Debug &#58; Jul 27 11&#58;08&#58;03 f2710b70 RPCConn&#91;SSL&#93;<web@X.X.X.X>&#58; Session closed...
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; SSL cleared
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 StreamManager&#58; connection <51> closed
?Debug &#58; Jul 27 11&#58;08&#58;03 f260fb70 RPCConn&#91;SSL&#93;<init@X.X.X.X>&#58; Session closed...

forgotten
Сообщения: 53
Зарегистрирован: Чт авг 28, 2008 08:11

Сообщение forgotten »

После обновления php до 5.3.7 при добавлении подряд нескольких периодических сервисных связок появляется следующая ошибка

Fatal error: Uncaught exception 'Exception' with message 'Error code 0' in /urfaphp/URFAClient_Packet.php:31
Stack trace:
#0 /urfaphp/URFAClient_Connection.php(161): URFAClient_Packet->read()
#1 /urfaphp/URFAClient_Admin.php(1198): URFAClient_Connection->urfa_get_data()
#2 add-periodic-service.php(49): URFAClient_Admin->rpcf_add_service_to_user(Array)

Первая сервисная связка добавляется нормально. При добавлении второй всё тормозится на URFAClient_Packet->read(). Сервисная связка добавляется а ответа почему-то нет.

Может быть у кого-нибудь есть идеи с чем это связано?

Ответить