urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
[-Alt-]
Сообщения: 13
Зарегистрирован: Ср апр 22, 2009 10:16

Сообщение [-Alt-] »

Добавил новые функции от mrmix25.
Тестирую я кстати на 5.5.17, на 5.6 не взлетело, что-то с ssl. Т.е. по идее на 5.3 и выше должно работать без проблем.

mrmix25
Сообщения: 104
Зарегистрирован: Вт июн 07, 2011 11:43

Сообщение mrmix25 »

[-Alt-] писал(а):Добавил новые функции от mrmix25. Тестирую я кстати на 5.5.17, на 5.6 не взлетело, что-то с ssl. Т.е. по идее на 5.3 и выше должно работать без проблем.
перезолей rpcf_user5_dhs_report :)
когда выкладывал кривую выложил .. уже поправил

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

                    $session['nas_id'] = $x->DataGetInt(); 
                    $session['nas_ip'] = $x->DataGetString()
вот у мну все работает без пробелем

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

root@billing:/usr/local/www/urfaphp # uname -a
FreeBSD billing 9.2-RELEASE FreeBSD 9.2-RELEASE #0 r255898: Fri Sep 27 03:52:52 UTC 2013     root@bake.isc.freebsd.org:/usr/obj/usr/src/sys/GENERIC  i386
root@billing:/usr/local/www/urfaphp # php -v
PHP 5.4.17 (cli) (built: Mar 20 2014 05:56:50)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies


[-Alt-]
Сообщения: 13
Зарегистрирован: Ср апр 22, 2009 10:16

Сообщение [-Alt-] »

Перезалил.

mrmix25
Сообщения: 104
Зарегистрирован: Вт июн 07, 2011 11:43

Сообщение mrmix25 »

не было function rpcf_get_dhs_report //0x5019

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

		function rpcf_get_dhs_report($user_id,$account_id,$apid,$t_start,$t_end) { // 0x5019 
			$ret=array(); 
			if (!$this->connection->urfa_call(0x5019)) { 
				print "Error calling function ". __FUNCTION__ ."\n"; 
				return FALSE; 
			} 
			$packet = $this->connection->getPacket(); 
			$packet->DataSetInt($user_id); 
			$packet->DataSetInt($account_id); 
			$packet->DataSetInt($apid); 
			$packet->DataSetInt($t_start); 
			$packet->DataSetInt($t_end); 
			$this->connection->urfa_send_param($packet); 
			if ( $x = $this->connection->urfa_get_data() ) { 
				$ret['dhs_log_size'] = $x->DataGetInt(); 
				for &#40; $i = 0; $i < $ret&#91;'dhs_log_size'&#93;; $i++ &#41;&#123;  
					$ari&#91;'id'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'account_id'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'slink_id'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'recv_date'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'last_update_date'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'Called_Station_Id'&#93; = $x->DataGetString&#40;&#41;; 
					$ari&#91;'Calling_Station_Id'&#93; = $x->DataGetString&#40;&#41;; 
					$ari&#91;'framed_ip'&#93; = $x->DataGetIP46Address&#40;&#41;;
					$ari&#91;'framed_ip6'&#93; = $x->DataGetIP46Address&#40;&#41;; 
					$ari&#91;'nas_port'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'acct_session_id'&#93; = $x->DataGetString&#40;&#41;; 
					$ari&#91;'nas_port_type'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'uname'&#93; = $x->DataGetString&#40;&#41;; 
					$ari&#91;'service_type'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'framed_protocol'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'nas_id'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'nas_ip'&#93; = $x->DataGetString&#40;&#41;; 
					$ari&#91;'acct_status_type'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'acct_inp_pack'&#93; = $x->DataGetLong&#40;&#41;; 
					$ari&#91;'acct_inp_oct'&#93; = $x->DataGetLong&#40;&#41;; 
					$ari&#91;'acct_inp_giga'&#93; = $x->DataGetLong&#40;&#41;; 
					$ari&#91;'acct_out_pack'&#93; = $x->DataGetLong&#40;&#41;; 
					$ari&#91;'acct_out_oct'&#93; = $x->DataGetLong&#40;&#41;; 
					$ari&#91;'acct_out_giga'&#93; = $x->DataGetLong&#40;&#41;; 
					$ari&#91;'acct_sess_time'&#93; = $x->DataGetLong&#40;&#41;; 
					$ari&#91;'acct_term_cause'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'total_cost'&#93; = $x->DataGetInt&#40;&#41;;
					$ari&#91;'tmp'&#93; = $x->DataGetInt&#40;&#41;; 
					$ari&#91;'online'&#93; = $x->DataGetInt&#40;&#41;; 
					$ret&#91;'dhs_log'&#93;&#91;&#93; = $ari; 
				&#125; 
			&#125; 
			return $ret; 
		&#125; 
в api.xml в этой функции не было последних двух параметров

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

$ari&#91;'tmp'&#93; = $x->DataGetInt&#40;&#41;; 
$ari&#91;'online'&#93; = $x->DataGetInt&#40;&#41;;
online - нашел, в админке в отчете строка зеленая когда значение = 1
tmp - так и не понял что это, у меня везде это значение равно 0

mrmix25
Сообщения: 104
Зарегистрирован: Вт июн 07, 2011 11:43

Сообщение mrmix25 »

function rpcf_get_iptraffic_service_link_ipv6($slink_id) { //0x271e

строка
$service['costt_coef'] = $x->DataGetDouble();//6

нашел опечатку
costt_coef - две t

mrmix25
Сообщения: 104
Зарегистрирован: Вт июн 07, 2011 11:43

Сообщение mrmix25 »

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

        function rpcf_get_sys_users_list&#40;&#41; &#123; //0x4413
            $ret=array&#40;&#41;;
            if &#40;!$this->connection->urfa_call&#40;0x4413&#41;&#41; &#123;
                print "Error calling function ". __FUNCTION__ ."\n";
                return FALSE;
            &#125;
            if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41;&#123;
                $ret&#91;'info_size'&#93;=$x->DataGetInt&#40;&#41;;
                for&#40;$i=0;$i<$ret&#91;'info_size'&#93;;$i++&#41; &#123;
                    $user&#91;'user_id'&#93;=$x->DataGetInt&#40;&#41;;
                    $user&#91;'login'&#93;=$x->DataGetString&#40;&#41;;
                    $user&#91;'ip4_address'&#93;=$x->DataGetIP46Address&#40;&#41;;
                    $user&#91;'mask4'&#93;=$x->DataGetInt&#40;&#41;;
					$user&#91;'ip6_address'&#93;=$x->DataGetIP46Address&#40;&#41;;
                    $user&#91;'mask6'&#93;=$x->DataGetInt&#40;&#41;;
                    $ret&#91;'users'&#93;&#91;&#93;=$user;
                &#125;
            &#125;
            return $ret;
        &#125;

shym
Сообщения: 8
Зарегистрирован: Чт окт 09, 2014 13:14

Сообщение shym »

banec писал(а):Но ещё прикол на php5.3 работает но на 5.4 и выше вообще глухо - даже ошибок не выдаёт
кто запускал на >php5.4 ?

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

PHP Warning&#58;  fread&#40;&#41;&#58; SSL read operation timed out in /disk2/1/netup/php/URFAClient_Packet.php on line 31

Warning&#58; fread&#40;&#41;&#58; SSL read operation timed out in /disk2/1/netup/php/URFAClient_Packet.php on line 31
PHP Warning&#58;  fread&#40;&#41;&#58; SSL read operation timed out in /disk2/1/netup/php/URFAClient_Packet.php on line 32
Данная проблема будет на версиях php 5.6.1, 5.5.17, 5.4.33 (http://php.net/ChangeLog-5.php):
OpenSSL:
Fixed bug #41631 (socket timeouts not honored in blocking SSL reads).
Данный баг сейчас находится в статусе Re-Opened, в комментариях обещают поправить в следующем релизе, там же можно найти и патч.

P.S. На рабочей машине дистрибутив Fedore 20, уже применили патч для php 5.5.17 (php-5.5.17-2.fc20.x86_64)
не было function rpcf_get_ippools_list
Хватит описывать функции :) Есть универсальный URFAClient PHP на основе api.xml (https://github.com/k-shym/URFAClient)

mrmix25
Сообщения: 104
Зарегистрирован: Вт июн 07, 2011 11:43

Сообщение mrmix25 »

shym писал(а):
не было function rpcf_get_ippools_list
Хватит описывать функции :) Есть универсальный URFAClient PHP на основе api.xml (https://github.com/k-shym/URFAClient)
прикольно :) ,но функции с ошибками присутствуют в api.xml немного их, но все же...
универсальный URFAClient PHP на основе api.xml
в UTM-5.3-002 поменяли формат ip для поддержки ipv6
к примеру вызов rpcf_get_sys_users_list() в ответ получаю

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

Array &#40; &#91;info_size&#93; => Array &#40; &#91;0&#93; => Array &#40; &#91;user_id&#93; => -5 &#91;login&#93; => admin &#91;ip4_address&#93; => 4.0.0.0 &#91;mask4&#93; => 0 &#91;ip6_address&#93; => 6.0.0.0 &#91;mask6&#93; => 128 &#41;.....
хотя должно

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

 &#91;ip4_address&#93; => Array &#40; &#91;addr&#93; => 0.0.0.0 &#91;type&#93; => 4 &#41; &#91;mask4&#93; => 0 &#91;ip6_address&#93; => Array &#40; &#91;addr&#93; => &#58;&#58; &#91;type&#93; => 6 &#41; &#91;mask6&#93; => 128 &#41;

а вот в UTM 5.2.1-008 все ок....
поэтому для UTM-5.3-002 универсальный URFAClient PHP не подходит :cry:

[-Alt-]
Сообщения: 13
Зарегистрирован: Ср апр 22, 2009 10:16

Сообщение [-Alt-] »

Там все еще повеселее, в API часть данных типа ipaddress это INT а часть это новый тип универсального 4/6 массива, и где какое я например нахожу опытным путем. Хотя конечно можно править api.xml добавили какой то префикс для нового или старого типов. К тому-же часть функций get по API возвращает данные не с теми именами ключей, которые можно отправить в edit или add, приходится помнить, что нужно изменять названия ключей в полученном массиве, я стараюсь имена к одному виду привести, так меньше ошибок делается.

shym
Сообщения: 8
Зарегистрирован: Чт окт 09, 2014 13:14

Сообщение shym »

mrmix25 писал(а):поэтому для UTM-5.3-002 универсальный URFAClient PHP не подходит :cry:
Попробуй теперь (версия 1.0.2).

Kaba
Сообщения: 3
Зарегистрирован: Вт окт 25, 2011 04:54

Сообщение Kaba »

Здравствуйте.
У нас urfaclient на php работает на той же машине, что и биллинг, Centos 6.
Urfaclient используется по большей части для формирования отчетов по трафику.
Недавно было зачечено, что в довольно большом проценте случаев (~40-50%) отчеты из урфы (rpcf_traffic_report_ex или rpcf_user5_traffic_report) не совпадают с отчетами из админки биллинга, разница может достигать 200МБ за месяц (для нас это критично). При этом отчеты из админки и ЛК от Нетапа друг с другом совпадают. У нас несколько временных интервалов, расчетный период - календарный месяц. Так вот, при составлении отчета за месяц, расхождения наблюдаются именно в ночном интервале, когда сменяется расчетный период.
Кто-нибудь знает, почему это может происходить?

Balu75
Сообщения: 1
Зарегистрирован: Вт дек 02, 2014 11:42

Сообщение Balu75 »

Добрый день !

Обнаружил странное поведение библиотеки urfa php под Centos 6.6 x86_64.
Админские функции недоступны под большинством пользователей системы, включая apache:
bash-4.1$ php rpcf_checks.php
Error calling function rpcf_core_version
Error calling function rpcf_core_build
Core: , Build:

в дебаг логе видим следующее:
Dec 02 10:47:40 ?Debug : 64fd0700 ModTop: connection <16778> created
Dec 02 10:47:40 Info : 64fd0700 RPCConn[SSL]<easypay@127.0.0.1>: Access granted to [SSL]<easypay@127.0.0.1> (UID: -12)
Dec 02 10:47:40 ?Debug : 64fd0700 RPCConn[SSL]<easypay@127.0.0.1>: SSL type requested: SSLv3(4)
Dec 02 10:47:40 Info : 64fd0700 RPCConn[SSL]<easypay@127.0.0.1>: Request for function <0x0045> not permitted
Dec 02 10:47:40 Info : 64fd0700 RPCConn[SSL]<easypay@127.0.0.1>: Request for function <0x0046> not permitted
Dec 02 10:47:40 Warn : 64fd0700 RPCConn[SSL]<easypay@127.0.0.1>: Session closed

Тот же скрипт прекрасно работает под рутом:
[root@billing utm5_web_php]# php rpcf_checks.php
Core: 5.3, Build: 002

При этом php вебинтерфейс от Нетапа прекрасно работает от пользователя apache.

Самое интересное то, что в системе есть два пользователя с абсолютно одинаковыми правами, под одним из них скрипт работает, под другим - нет:
[root@billing utm5_web_php]# su - balu
[balu@billing ~]$ cd /var/www/html/utm5_web_php
[balu@billing utm5_web_php]$ php rpcf_checks.php
Core: 5.3, Build: 002
[balu@billing utm5_web_php]$ exit
logout
[root@billing utm5_web_php]# su - nht
[nht@billing ~]$ cd /var/www/html/utm5_web_php
[nht@billing utm5_web_php]$ php rpcf_checks.php
Error calling function rpcf_core_version
Error calling function rpcf_core_build
Core: , Build:

SELinux выключен, перед этим эта же библиотека прекрасно работала на этой же сборке УТМ под FreeBSD-8.2, и там не было разницы, под каким юзером запускается скрипт.

Подскажите, пожалуйста, в какую сторону копать, буду очень благодарен.

Nik0n
Сообщения: 77
Зарегистрирован: Пн сен 14, 2009 13:53
Откуда: Екатеринбург
Контактная информация:

Сообщение Nik0n »

Добрый день!
Кто-нибудь успешно использовал функции работы с RADIUS сессиями, а именно rpcf_radius_get_active_sessions, rpcf_radius_disconnect_session и
rpcf_radius_drop_session ?
При их использовании всегда возникает ошибка, например:

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

&#91;root@utm5test utm5&#93;# ourfa/ourfa_client -S rsa_cert -a rpcf_radius_get_active_sessions -l bras -P *****
Loading config file ./utm5_urfaclient.cfg
Loading API XML&#58; ./xml/api.xml
<?xml version="1.0"?>
<urfa>
  <session key="66a5c054000000001747a76aee3a5a1f"/>
  <call function="rpcf_radius_get_active_sessions">
    <output>
      <integer name="traffic_sessions_count" value="160"/>
      <array name="i">
        <item>
          <integer name="traf_id" value="7524"/>
          <string name="traf_acct_session_id" value="010FFFFFD8001632-54B79638"/>
          <string name="traf_user_name" value="192.168.64.24"/>
Can not get ip_address value
Function `rpcf_radius_get_active_sessions` node `ip_address`. Cannot get ip_address value for node traf_nas_ip&#40;i&#41;
          <error>Function `rpcf_radius_get_active_sessions` node `ip_address`. Cannot get ip_address value for node traf_nas_ip&#40;i&#41;</error>
        </item>
      </array>
    </output>
  </call>
</urfa>
Пробуем теперь попросить disconnect (c drop все точно так же)

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

&#91;root@utm5test utm5&#93;# ourfa/ourfa_client -S rsa_cert -l bras -P **** -a rpcf_radius_disconnect_session -acct_session_id 010FFFFFD8001632-54B79638 -nas_ip '192.168.9.11'
Loading config file ./utm5_urfaclient.cfg
Loading API XML&#58; ./xml/api.xml
<?xml version="1.0"?>
<urfa>
  <session key="81a7c054000000006642d93d5301def5"/>
  <call function="rpcf_radius_disconnect_session">
    <output>
Received ATTR_TERMINATION instead of ATTR_DATA attribute
Function `rpcf_radius_disconnect_session` node `integer`. Can not get integer value for node 'error_code&#40;0&#41;'
      <error>Function `rpcf_radius_disconnect_session` node `integer`. Can not get integer value for node 'error_code&#40;0&#41;'</error>
    </output>
  </call>
</urfa>
Update: Извиняюсь, что немного не туда :)

Cramac
Сообщения: 454
Зарегистрирован: Сб июл 01, 2006 17:59

Сообщение Cramac »

Приветствую. Подскажите, как при создании пользователя, ставить галку
в заблокированном состоянии не списывать абон плату?

сейчас добавляю так:

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

	$user=array&#40;
	'login'=>$login,
	'password'=>$pass_stat,
	'full_name'=>$name_full,
	'house_id'=>$utm_doma&#91;$i&#93;&#91;id&#93;	
	&#41;;
	$parameters=array&#40;&#41;;
	
	$urfa_admin = new URFAClient_Admin&#40;$UTMCore_Login, $UTMCore_Password&#41;;
	$accountinfo = $urfa_admin->rpcf_add_user&#40;$user,$parameters&#41;;
	$accadd = $urfa_admin->rpcf_add_account&#40;$account,$accountinfo&#91;"user_id"&#93;,"1",'auto create account',"0"&#41;;

Cramac
Сообщения: 454
Зарегистрирован: Сб июл 01, 2006 17:59

Сообщение Cramac »

Подскажите с функцией блокировки пользователя?

Пользовался обычной урфой и вот таким xml

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

-<urfa>
-<call function="rpcf_get_accountinfo">
<parameter name="account_id"/>
</call>
-<call function="rpcf_save_account">
<parameter name="is_blocked"/>
</call>
</urfa>
Но хотелось бы это сделать с помощью php и может есть более простой вариант, а то на этом бывает виснет.


UPD:
нашел такой вариант

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

function rpcf_set_block_account&#40;$urfa_admin,$account_id,$block&#41; &#123; // non urfa standart function 
                $account = $urfa_admin->rpcf_get_accountinfo&#40;$account_id&#41;;  //0x2030 
                $discount_period_id = 0; 
                $dealer_account_id = $account&#91;'dealer_account_id'&#93;; 
                $is_blocked = $block; 
                $block_start_date = time&#40;&#41;; 
                $block_end_date = '2000000000'; 
                $vat_rate = $account&#91;'vat_rate'&#93;; 
                $sale_tax_rate = $account&#91;'sale_tax_rate'&#93;; 
                $int_status = $account&#91;'int_status'&#93;; 
                $block_recalc_abon = $account&#91;'block_recalc_abon'&#93;; 
                $block_recalc_prepaid = $account&#91;'block_recalc_prepaid'&#93;; 
                $unlimited = $account&#91;'unlimited'&#93;; 
                $credit = $account&#91;'credit'&#93;; 
                $urfa_admin->rpcf_save_account&#40;$account_id, $discount_period_id, $credit, $is_blocked, $block_start_date, $block_end_date, $dealer_account_id, $vat_rate, $sale_tax_rate, $int_status, $block_recalc_abon, $block_recalc_prepaid, $unlimited&#41;; //0x2032 
&#125;
передаю в него ид блокировки (какой раньше использовал) - 768
в итоге
инфо об аккаунте возвращает немного не верные данные:
Array ( [unused] => 1 [is_blocked] => 0 [dealer_account_id] => 0 [is_dealer] => 0 [vat_rate] => 0 [sale_tax_rate] => 0 [comission_coefficient] => 0 [default_comission_value] => 0 [credit] => 0 [balance] => 48.338764436488 [int_status] => 1 [block_recalc_abon] => 1 [block_recalc_prepaid] => 1 [unlimited] => 0 )

хотя block_recalc_abon и block_recalc_prepaid галки не стоят, заблокирован - Нет, интернет - включен.

Выполнение данной операции приводит к установлению галок не списывать абон плату, уменьшить предоплаченный трафик, интернет выкл, заблокирован - нет.

Что не так?

Ответить