urfaclient на php
перезолей rpcf_user5_dhs_report[-Alt-] писал(а):Добавил новые функции от mrmix25. Тестирую я кстати на 5.5.17, на 5.6 не взлетело, что-то с ssl. Т.е. по идее на 5.3 и выше должно работать без проблем.
когда выкладывал кривую выложил .. уже поправил
Код: Выделить всё
$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
не было function rpcf_get_dhs_report //0x5019
в api.xml в этой функции не было последних двух параметров
online - нашел, в админке в отчете строка зеленая когда значение = 1
tmp - так и не понял что это, у меня везде это значение равно 0
Код: Выделить всё
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 ( $i = 0; $i < $ret['dhs_log_size']; $i++ ){
$ari['id'] = $x->DataGetInt();
$ari['account_id'] = $x->DataGetInt();
$ari['slink_id'] = $x->DataGetInt();
$ari['recv_date'] = $x->DataGetInt();
$ari['last_update_date'] = $x->DataGetInt();
$ari['Called_Station_Id'] = $x->DataGetString();
$ari['Calling_Station_Id'] = $x->DataGetString();
$ari['framed_ip'] = $x->DataGetIP46Address();
$ari['framed_ip6'] = $x->DataGetIP46Address();
$ari['nas_port'] = $x->DataGetInt();
$ari['acct_session_id'] = $x->DataGetString();
$ari['nas_port_type'] = $x->DataGetInt();
$ari['uname'] = $x->DataGetString();
$ari['service_type'] = $x->DataGetInt();
$ari['framed_protocol'] = $x->DataGetInt();
$ari['nas_id'] = $x->DataGetInt();
$ari['nas_ip'] = $x->DataGetString();
$ari['acct_status_type'] = $x->DataGetInt();
$ari['acct_inp_pack'] = $x->DataGetLong();
$ari['acct_inp_oct'] = $x->DataGetLong();
$ari['acct_inp_giga'] = $x->DataGetLong();
$ari['acct_out_pack'] = $x->DataGetLong();
$ari['acct_out_oct'] = $x->DataGetLong();
$ari['acct_out_giga'] = $x->DataGetLong();
$ari['acct_sess_time'] = $x->DataGetLong();
$ari['acct_term_cause'] = $x->DataGetInt();
$ari['total_cost'] = $x->DataGetInt();
$ari['tmp'] = $x->DataGetInt();
$ari['online'] = $x->DataGetInt();
$ret['dhs_log'][] = $ari;
}
}
return $ret;
}
Код: Выделить всё
$ari['tmp'] = $x->DataGetInt();
$ari['online'] = $x->DataGetInt();
tmp - так и не понял что это, у меня везде это значение равно 0
Код: Выделить всё
function rpcf_get_sys_users_list() { //0x4413
$ret=array();
if (!$this->connection->urfa_call(0x4413)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
if ($x = $this->connection->urfa_get_data()){
$ret['info_size']=$x->DataGetInt();
for($i=0;$i<$ret['info_size'];$i++) {
$user['user_id']=$x->DataGetInt();
$user['login']=$x->DataGetString();
$user['ip4_address']=$x->DataGetIP46Address();
$user['mask4']=$x->DataGetInt();
$user['ip6_address']=$x->DataGetIP46Address();
$user['mask6']=$x->DataGetInt();
$ret['users'][]=$user;
}
}
return $ret;
}
Данная проблема будет на версиях php 5.6.1, 5.5.17, 5.4.33 (http://php.net/ChangeLog-5.php):banec писал(а):Но ещё прикол на php5.3 работает но на 5.4 и выше вообще глухо - даже ошибок не выдаёт
кто запускал на >php5.4 ?
Код: Выделить всё
PHP Warning: fread(): SSL read operation timed out in /disk2/1/netup/php/URFAClient_Packet.php on line 31 Warning: fread(): SSL read operation timed out in /disk2/1/netup/php/URFAClient_Packet.php on line 31 PHP Warning: fread(): SSL read operation timed out in /disk2/1/netup/php/URFAClient_Packet.php on line 32
Данный баг сейчас находится в статусе Re-Opened, в комментариях обещают поправить в следующем релизе, там же можно найти и патч.OpenSSL:
Fixed bug #41631 (socket timeouts not honored in blocking SSL reads).
P.S. На рабочей машине дистрибутив Fedore 20, уже применили патч для php 5.5.17 (php-5.5.17-2.fc20.x86_64)
Хватит описывать функции Есть универсальный URFAClient PHP на основе api.xml (https://github.com/k-shym/URFAClient)не было function rpcf_get_ippools_list
прикольно ,но функции с ошибками присутствуют в api.xml немного их, но все же...shym писал(а):Хватит описывать функции Есть универсальный URFAClient PHP на основе api.xml (https://github.com/k-shym/URFAClient)не было function rpcf_get_ippools_list
универсальный URFAClient PHP на основе api.xml
в UTM-5.3-002 поменяли формат ip для поддержки ipv6
к примеру вызов rpcf_get_sys_users_list() в ответ получаю
Код: Выделить всё
Array ( [info_size] => Array ( [0] => Array ( [user_id] => -5 [login] => admin [ip4_address] => 4.0.0.0 [mask4] => 0 [ip6_address] => 6.0.0.0 [mask6] => 128 ).....
Код: Выделить всё
[ip4_address] => Array ( [addr] => 0.0.0.0 [type] => 4 ) [mask4] => 0 [ip6_address] => Array ( [addr] => :: [type] => 6 ) [mask6] => 128 )
а вот в UTM 5.2.1-008 все ок....
поэтому для UTM-5.3-002 универсальный URFAClient PHP не подходит
Там все еще повеселее, в API часть данных типа ipaddress это INT а часть это новый тип универсального 4/6 массива, и где какое я например нахожу опытным путем. Хотя конечно можно править api.xml добавили какой то префикс для нового или старого типов. К тому-же часть функций get по API возвращает данные не с теми именами ключей, которые можно отправить в edit или add, приходится помнить, что нужно изменять названия ключей в полученном массиве, я стараюсь имена к одному виду привести, так меньше ошибок делается.
Здравствуйте.
У нас urfaclient на php работает на той же машине, что и биллинг, Centos 6.
Urfaclient используется по большей части для формирования отчетов по трафику.
Недавно было зачечено, что в довольно большом проценте случаев (~40-50%) отчеты из урфы (rpcf_traffic_report_ex или rpcf_user5_traffic_report) не совпадают с отчетами из админки биллинга, разница может достигать 200МБ за месяц (для нас это критично). При этом отчеты из админки и ЛК от Нетапа друг с другом совпадают. У нас несколько временных интервалов, расчетный период - календарный месяц. Так вот, при составлении отчета за месяц, расхождения наблюдаются именно в ночном интервале, когда сменяется расчетный период.
Кто-нибудь знает, почему это может происходить?
У нас urfaclient на php работает на той же машине, что и биллинг, Centos 6.
Urfaclient используется по большей части для формирования отчетов по трафику.
Недавно было зачечено, что в довольно большом проценте случаев (~40-50%) отчеты из урфы (rpcf_traffic_report_ex или rpcf_user5_traffic_report) не совпадают с отчетами из админки биллинга, разница может достигать 200МБ за месяц (для нас это критично). При этом отчеты из админки и ЛК от Нетапа друг с другом совпадают. У нас несколько временных интервалов, расчетный период - календарный месяц. Так вот, при составлении отчета за месяц, расхождения наблюдаются именно в ночном интервале, когда сменяется расчетный период.
Кто-нибудь знает, почему это может происходить?
Добрый день !
Обнаружил странное поведение библиотеки 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, и там не было разницы, под каким юзером запускается скрипт.
Подскажите, пожалуйста, в какую сторону копать, буду очень благодарен.
Обнаружил странное поведение библиотеки 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, и там не было разницы, под каким юзером запускается скрипт.
Подскажите, пожалуйста, в какую сторону копать, буду очень благодарен.
-
- Сообщения: 77
- Зарегистрирован: Пн сен 14, 2009 13:53
- Откуда: Екатеринбург
- Контактная информация:
Добрый день!
Кто-нибудь успешно использовал функции работы с RADIUS сессиями, а именно rpcf_radius_get_active_sessions, rpcf_radius_disconnect_session и
rpcf_radius_drop_session ?
При их использовании всегда возникает ошибка, например:
Пробуем теперь попросить disconnect (c drop все точно так же)
Update: Извиняюсь, что немного не туда
Кто-нибудь успешно использовал функции работы с RADIUS сессиями, а именно rpcf_radius_get_active_sessions, rpcf_radius_disconnect_session и
rpcf_radius_drop_session ?
При их использовании всегда возникает ошибка, например:
Код: Выделить всё
[root@utm5test utm5]# ourfa/ourfa_client -S rsa_cert -a rpcf_radius_get_active_sessions -l bras -P *****
Loading config file ./utm5_urfaclient.cfg
Loading API XML: ./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(i)
<error>Function `rpcf_radius_get_active_sessions` node `ip_address`. Cannot get ip_address value for node traf_nas_ip(i)</error>
</item>
</array>
</output>
</call>
</urfa>
Код: Выделить всё
[root@utm5test utm5]# 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: ./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(0)'
<error>Function `rpcf_radius_disconnect_session` node `integer`. Can not get integer value for node 'error_code(0)'</error>
</output>
</call>
</urfa>
Приветствую. Подскажите, как при создании пользователя, ставить галку
в заблокированном состоянии не списывать абон плату?
сейчас добавляю так:
в заблокированном состоянии не списывать абон плату?
сейчас добавляю так:
Код: Выделить всё
$user=array(
'login'=>$login,
'password'=>$pass_stat,
'full_name'=>$name_full,
'house_id'=>$utm_doma[$i][id]
);
$parameters=array();
$urfa_admin = new URFAClient_Admin($UTMCore_Login, $UTMCore_Password);
$accountinfo = $urfa_admin->rpcf_add_user($user,$parameters);
$accadd = $urfa_admin->rpcf_add_account($account,$accountinfo["user_id"],"1",'auto create account',"0");
Подскажите с функцией блокировки пользователя?
Пользовался обычной урфой и вот таким xml
Но хотелось бы это сделать с помощью php и может есть более простой вариант, а то на этом бывает виснет.
UPD:
нашел такой вариант
передаю в него ид блокировки (какой раньше использовал) - 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 галки не стоят, заблокирован - Нет, интернет - включен.
Выполнение данной операции приводит к установлению галок не списывать абон плату, уменьшить предоплаченный трафик, интернет выкл, заблокирован - нет.
Что не так?
Пользовался обычной урфой и вот таким xml
Код: Выделить всё
-<urfa>
-<call function="rpcf_get_accountinfo">
<parameter name="account_id"/>
</call>
-<call function="rpcf_save_account">
<parameter name="is_blocked"/>
</call>
</urfa>
UPD:
нашел такой вариант
Код: Выделить всё
function rpcf_set_block_account($urfa_admin,$account_id,$block) { // non urfa standart function
$account = $urfa_admin->rpcf_get_accountinfo($account_id); //0x2030
$discount_period_id = 0;
$dealer_account_id = $account['dealer_account_id'];
$is_blocked = $block;
$block_start_date = time();
$block_end_date = '2000000000';
$vat_rate = $account['vat_rate'];
$sale_tax_rate = $account['sale_tax_rate'];
$int_status = $account['int_status'];
$block_recalc_abon = $account['block_recalc_abon'];
$block_recalc_prepaid = $account['block_recalc_prepaid'];
$unlimited = $account['unlimited'];
$credit = $account['credit'];
$urfa_admin->rpcf_save_account($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); //0x2032
}
в итоге
инфо об аккаунте возвращает немного не верные данные:
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 галки не стоят, заблокирован - Нет, интернет - включен.
Выполнение данной операции приводит к установлению галок не списывать абон плату, уменьшить предоплаченный трафик, интернет выкл, заблокирован - нет.
Что не так?