urfaclient на php

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

Сообщение Nik0n »

Добрый день!
Кто-нибудь успешно использовал функции работы с 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&#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 галки не стоят, заблокирован - Нет, интернет - включен.

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

Что не так?

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

Сообщение Cramac »

почему то
$urfa_admin->rpcf_get_accountinfo($account_id);
выдает все наоборот
Если поставить галки и выключить интернет, выдает такое
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] => 0 [block_recalc_abon] => 0 [block_recalc_prepaid] => 0 [unlimited] => 0 )
Даже если я пишу так
$int_status = 0;
$block_recalc_abon = 0;
$block_recalc_prepaid = 0;

все равно ставит галки и не блокирует


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; 
	$block_start_date = time&#40;&#41;; 
	$block_end_date = '2000000000'; 
	$account&#91;'is_blocked'&#93;=$block; 
	if &#40;$block==0&#41;
		$account&#91;'int_status'&#93;=1; 
	$urfa_admin->rpcf_save_account&#40;$account_id,$account, $block_start_date, $block_end_date, $discount_period_id&#41;;
	&#125;

LovingFox
Сообщения: 23
Зарегистрирован: Пт апр 10, 2015 16:26

Сообщение LovingFox »

Manjur писал(а):Кто-нибудь пытался адаптировать pyurfa (https://github.com/d3vil-st/pyurfa) под 5.21.008 и старше? На 5.21.007 заводится на ура.
Manjur писал(а):Все, допилил сам :)
Manjur, я так понимаю, что pyurfa, доступная через github по приведенной ссылке, не умеет подключаться через ssl. Ваш "допил" в этом и заключался, что добавили поддержку ssl?
Если "да", то можете поделиться кодом?

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

Сообщение Cramac »

Если тема еще жива, подскажите, что то не работает

rpcf_get_prepaid_units($slink_id) //0x5500

на 5.3 в логе такое:

Aug 18 18:22:06 ?Debug : b44f3b40 RPCConn[SSL]<init@10.10.10.2>: Call: 0x5500 (__rpcs_get_prepaid_units)
Aug 18 18:22:06 ?Debug : b44f3b40 RPCConn[SSL]<init@10.10.10.2>: Real Call: 0x5500 (__rpcs_get_prepaid_units)
Aug 18 18:22:06 ERROR : b44f3b40 RPCServer@0.0.0.0: Exception in void* __rpcs_get_prepaid_units(void*): #74
Aug 18 18:22:06 ?Debug : b44f3b40 RPCConn[SSL]<init@10.10.10.2>: Call 0x5500 (__rpcs_get_prepaid_units) finished in 0.00 sec

LimpTeaM
Сообщения: 3
Зарегистрирован: Пт окт 17, 2014 13:00

Сообщение LimpTeaM »

Господа!
Есть ли рабочая версия под 5.3.001?

Уже все перерыл...
Проблема с ssl в логе нетапа:

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

RPCConn&#58; Unsupported SSL type <0>

пофиг php или python.

Или скажите где допилить в коде.
Заранее спасибо

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

Сообщение Cramac »

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

UPD: Нашел в дебаге

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

$poles=array&#40;&#41;; 

$patterns&#91;0&#93;&#91;'criteria_id'&#93;='1'; //
$patterns&#91;0&#93;&#91;'what_id'&#93;='43'; //По полю логину в сервисных связках 
$patterns&#91;0&#93;&#91;'pattern'&#93;='login'; // логин

$search=$urfa_admin->rpcf_search_users_new&#40;$poles,$patterns,0&#41;; 
foreach &#40;$search as $current&#41; 
&#123; 
print_r&#40;$current&#41;; 
echo '</BR>'; 
&#125; 

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

Сообщение Cramac »

Новый вопрос.
Как использовать
rpcf_edit_iptraffic_service_link_ipv6

нужно в сервисной связке сменить логин и пароль.

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

Сообщение mrmix25 »

Cramac писал(а):Новый вопрос.
Как использовать
rpcf_edit_iptraffic_service_link_ipv6

нужно в сервисной связке сменить логин и пароль.
ну как то так

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


$service = $urfa_admin->rpcf_get_iptraffic_service_link_ipv6&#40;567&#41;;// получаем инфу необходимо знать id связки 
//редактируем нужное и добавляем обязательный slink_id
$service&#91;'slink_id'&#93; = 567; // id связки
$service&#91;'cost_coef'&#93; = 1; // стоимость в % 1 = 100, 0.9 = 90
$service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'login'&#93; = "login"; //логин 
$service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'password'&#93; = "pass"; //пасс
$urfa_admin->rpcf_edit_iptraffic_service_link_ipv6&#40;$service&#41;; // применяем

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

Сообщение Cramac »

Подсобите, как добавить дом в версии 5.3 ?

Раньше была rpcf_add_house
да и на последней она же, только параметры добавились, не могу подобрать правильные.

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

Сообщение Cramac »

Cramac писал(а):Подсобите, как добавить дом в версии 5.3 ?

Раньше была rpcf_add_house
да и на последней она же, только параметры добавились, не могу подобрать правильные.
Сам себе отвечу.

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

	$house&#91;"house_id"&#93;=0;
	$house&#91;"connect_date"&#93;=time&#40;&#41;;
	$house&#91;"post_code"&#93;="";
	$house&#91;"country"&#93;="";
	$house&#91;"region"&#93;="";
	$house&#91;"building"&#93;="";
	$house&#91;"city"&#93;=$gorod&#91;0&#93;&#91;"cname"&#93;;
	$house&#91;"street"&#93;=$gorod&#91;0&#93;&#91;"name"&#93;;
	$house&#91;"number"&#93;=$gorod&#91;"dom_num"&#93;;
	$house&#91;"count"&#93;&#91;0&#93;&#91;"ipzone_id"&#93;=1;
	
	$addhouse=$urfa->rpcf_add_house&#40;$house&#41;;

dimic
Сообщения: 18
Зарегистрирован: Пн май 13, 2013 11:06

Сообщение dimic »

Если еще есть динозавры, которые пользуются древней 5.2.1-007(8), подкину еще пару функций, для линковки сервисных связок юзеру:

Периодическая услуга в составе тарифа:

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

	function rpcf_add_periodic_service_to_user&#40;$user_id,$account_id,$service_id,$tariff_link_id,$discount_period_id&#41; &#123; // 0x2551
		$ret=array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;0x2551&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$user_id&#41;;
		$packet->DataSetInt&#40;$account_id&#41;;
		$packet->DataSetInt&#40;$service_id&#41;;
		// Set service_type 2 - periodic service
		$packet->DataSetInt&#40;2&#41;;
		// Set return_type
		$packet->DataSetString&#40;'integer_return'&#41;;
		$packet->DataSetInt&#40;$tariff_link_id&#41;;
		// Periodic parameters
		// slink_id
		$packet->DataSetInt&#40;0&#41;;
		// is_blocked
		$packet->DataSetInt&#40;0&#41;;
		$packet->DataSetInt&#40;$discount_period_id&#41;;
		// start_date
		$packet->DataSetInt&#40;time&#40;&#41;&#41;;
		// end_data
		$packet->DataSetInt&#40;2000000000&#41;;
		// unabon
		$packet->DataSetInt&#40;1&#41;;
		// unprepay
		$packet->DataSetInt&#40;1&#41;;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
			$ret&#91;'slink_id'&#93;=$x->DataGetInt&#40;&#41;;
			$this->connection->urfa_get_data&#40;&#41;;
		&#125;
		return $ret;
	&#125;
Передача IP трафика в составе тарифа:

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

	function rpcf_add_iptraffic_service_to_user&#40;$user_id,$account_id,$service_id,$tariff_link_id,$discount_period_id,$ip_groups_count,$ip_groups&#41; &#123; // 0x2551
		$ret=array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;0x2551&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$user_id&#41;;
		$packet->DataSetInt&#40;$account_id&#41;;
		$packet->DataSetInt&#40;$service_id&#41;;
		// Set service_type 3 - iptraffic service
		$packet->DataSetInt&#40;3&#41;;
		// Set return_type
		$packet->DataSetString&#40;'integer_return'&#41;;
		$packet->DataSetInt&#40;$tariff_link_id&#41;;
		// Iptraffic parameters
		// slink_id
		$packet->DataSetInt&#40;0&#41;;
		// is_blocked
		$packet->DataSetInt&#40;0&#41;;
		$packet->DataSetInt&#40;$discount_period_id&#41;;
		// start_date
		$packet->DataSetInt&#40;time&#40;&#41;&#41;;
		// end_data
		$packet->DataSetInt&#40;2000000000&#41;;
		// unabon
		$packet->DataSetInt&#40;1&#41;;
		// unprepay
		$packet->DataSetInt&#40;1&#41;;
		$packet->DataSetInt&#40;$ip_groups_count&#41;;
		for &#40;$i = 0; $i < $ip_groups_count; $i++&#41; &#123;
			$packet->DataSetIPAddress&#40;$ip_groups&#91;$i&#93;&#91;'ip'&#93;&#41;;
			$packet->DataSetIPAddress&#40;$ip_groups&#91;$i&#93;&#91;'mask'&#93;&#41;;
			$packet->DataSetString&#40;$ip_groups&#91;$i&#93;&#91;'mac'&#93;&#41;;
			$packet->DataSetString&#40;$ip_groups&#91;$i&#93;&#91;'login'&#93;&#41;;
			$packet->DataSetString&#40;$ip_groups&#91;$i&#93;&#91;'allowed_cid'&#93;&#41;;
			$packet->DataSetString&#40;$ip_groups&#91;$i&#93;&#91;'password'&#93;&#41;;
			$packet->DataSetInt&#40;$ip_groups&#91;$i&#93;&#91;'not_vpn'&#93;&#41;;
			$packet->DataSetInt&#40;$ip_groups&#91;$i&#93;&#91;'dont_use_fw'&#93;&#41;;
			$packet->DataSetInt&#40;$ip_groups&#91;$i&#93;&#91;'router_id'&#93;&#41;;
		&#125;
		// quotas_count
		$packet->DataSetInt&#40;0&#41;;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
			$ret&#91;'slink_id'&#93;=$x->DataGetInt&#40;&#41;;
			$this->connection->urfa_get_data&#40;&#41;;
		&#125;
		return $ret;
	&#125;
[/code]

Ответить