urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

zoom писал(а):Создаю расчетный период с помощью rpcf_add_discount_period (0x2603), как мне получить id созданного расчетного периода? или может нужно использовать другую функцию?


Добавлено спустя 3 часа плясок с бубном:

Возможно 0x2605 умеет получать id ?
Добавил в wiki rpcf_add_discount_period_return //0x2605

Расчётные периоды c 0x2605 создаются, а получить id не удаётся. :cry:
Вроде все правильно. Приведите пример вызова функции (с параметрами и все такое) - потестю у себя.

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Xart писал(а):Может вопрос и глупый, но всеже.
При добавлении к сервисной связке ip группы с помощью rpcf_add_to_ip_group нельзя установить ID брандмауэра.
Никто не подскажет, как можно установить id брандмауэра не используя удаление-создание сервисной связки. Прошерстил api.xml но ничего подходящего не нашел :(.
Заранее спасибо.
P.S. еще раз огромное спасибо всем кто пишет функции и отдельное спасибо ds за сам клиент.
Лучший способ узнать как сделать посмотреть как это делает админка:
При добавлении ip группы она вызывает <function name="rpcf_add_service_to_user" id="0x2551"> в которой и указывается ID брандмауэра

zoom
Сообщения: 49
Зарегистрирован: Вс мар 22, 2009 15:48

Сообщение zoom »

Вот собственно:

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

$start_date = strtotime&#40;"now"&#41;;
$periodic_type = 3; 
$custom_duration = 0;
$discount_interval = 0;


$new_discount_period_id = $urfa_admin->rpcf_add_discount_period_return&#40;$static_id,$start_date,$expire_date,$periodic_type,$custom_duration,$discount_interval,$discount_period_id&#41;;	//0x2605

$new_discount_period_id = $new_discount_period_id&#91;"discount_period_id"&#93;; 

print_r&#40;$new_discount_period_id&#41;;		
Расчётные периоды заводятся, а вызвать id периода не удаётся.

Хотя в аналогичном примере с 0x3018 всё работает..:

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

$new_tariff_link_id = $urfa_admin->rpcf_link_user_tariff&#40;$user_id, $account_id, $tariff_current_inet, $urfa_next_tariff, $discount_period_id, $tariff_link_id&#41;;	// 0x3018

$new_tariff_link_id = $new_tariff_link_id&#91;"tariff_link_id"&#93;; 

print_r&#40;$new_tariff_link_id&#41;;

zoom
Сообщения: 49
Зарегистрирован: Вс мар 22, 2009 15:48

Сообщение zoom »

Мной была допущена небольшая ошибочка, вместо $ret=0 надо было написать $ret=array()
В итоге правильный вариант выглядит так:

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

  	function rpcf_add_discount_period_return&#40;$static_id,$start_date,$expire_date,$periodic_type,$custom_duration,$discount_interval&#41; &#123; //0x2605
		$ret=array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;0x2605&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$static_id&#41;;
		$packet->DataSetInt&#40;$start_date&#41;;
		$packet->DataSetInt&#40;$expire_date&#41;;
		$packet->DataSetInt&#40;$periodic_type&#41;;
		$packet->DataSetInt&#40;$custom_duration&#41;;
		$packet->DataSetInt&#40;$discount_interval&#41;;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
			$ret&#91;'discount_period_id'&#93;=$x->DataGetInt&#40;&#41;;
			$this->connection->urfa_get_data&#40;&#41;;
		&#125;
		return $ret;
	&#125;
В wiki исправил. Теперь функция вызова id расчётного периода работает корректно.

Xart
Сообщения: 7
Зарегистрирован: Вт окт 14, 2008 14:20

Сообщение Xart »

Kayfolom писал(а): Лучший способ узнать как сделать посмотреть как это делает админка:
При добавлении ip группы она вызывает <function name="rpcf_add_service_to_user" id="0x2551"> в которой и указывается ID брандмауэра
То есть, при вызове этой функции и указании slink_id уже существующей привязки услуги, то она будет не добавлять а редактировать уже существующую привязку, или, всетаки, придется убивать предыдущую привязку услуги?
Последний раз редактировалось Xart Пн июл 20, 2009 11:39, всего редактировалось 1 раз.

Витька
Сообщения: 236
Зарегистрирован: Вс дек 16, 2007 21:54

Сообщение Витька »

Есть такая клёвая функция 0x1205, rpcf_search_users_new
Никак не могу смекнуть, что подать ей на вход, чтобы осуществить поиск по ID подключенной услуги. То есть чтобы одним запросом выбрать всех юзеров, у кого подключена какая-то услуга.
Понимаю, что смотреть нужно в массив $patterns, только вот чего туда пихать?.. :)

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

pattern id, criteria id, pattern =) Все эти вещи есть в описалове функций поиска в api.xml

zoom
Сообщения: 49
Зарегистрирован: Вс мар 22, 2009 15:48

Сообщение zoom »

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

	function rpcf_service_report&#40;$user_id=0,$account_id=0,$group_id=0,$apid=0,$time_start,$time_end&#41; &#123;  //3002
		$ret=array&#40;&#41;; 
		if &#40;!$this->connection->urfa_call&#40;0x3002&#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;$group_id&#41;; 
		$packet->DataSetInt&#40;$apid&#41;; 
		$packet->DataSetInt&#40;$time_start&#41;; 
		$packet->DataSetInt&#40;$time_end&#41;; 
		$this->connection->urfa_send_param&#40;$packet&#41;; 
		if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123; 
			$ret&#91;'accounts_count'&#93; = $x->DataGetInt&#40;&#41;; 
			for &#40;$i=0;$i<$ret&#91;'accounts_count'&#93;;$i++&#41; &#123; 
				$x = $this->connection->urfa_get_data&#40;&#41;; 
				$services&#91;'atr_size'&#93; = $x->DataGetInt&#40;&#41;; 
				for&#40;$j=0;$j<$services&#91;'atr_size'&#93;;$j++&#41;&#123; 
					$x = $this->connection->urfa_get_data&#40;&#41;; 
					$services&#91;'atr_size_array'&#93;&#91;$j&#93;&#91;'account_id'&#93; = $x->DataGetInt&#40;&#41;; 
					$services&#91;'atr_size_array'&#93;&#91;$j&#93;&#91;'login'&#93; = $x->DataGetString&#40;&#41;;  
					$services&#91;'atr_size_array'&#93;&#91;$j&#93;&#91;'discount_date'&#93; = $x->DataGetInt&#40;&#41;; 
					$services&#91;'atr_size_array'&#93;&#91;$j&#93;&#91;'discount_period_id'&#93; = $x->DataGetInt&#40;&#41;; 
					$services&#91;'atr_size_array'&#93;&#91;$j&#93;&#91;'discount'&#93; = $x->DataGetDouble&#40;&#41;; 
					$services&#91;'atr_size_array'&#93;&#91;$j&#93;&#91;'service_name'&#93; = $x->DataGetString&#40;&#41;; 
					$services&#91;'atr_size_array'&#93;&#91;$j&#93;&#91;'service_type'&#93; = $x->DataGetInt&#40;&#41;; 
					$services&#91;'atr_size_array'&#93;&#91;$j&#93;&#91;'comment'&#93; = $x->DataGetString&#40;&#41;; 
				&#125; 
				$ret&#91;'services'&#93;&#91;&#93;=$services; 
			&#125; 
			$this->connection->urfa_get_data&#40;&#41;; 
		&#125; 
		return $ret; 
	&#125;
Добавил в wiki

zoom
Сообщения: 49
Зарегистрирован: Вс мар 22, 2009 15:48

Сообщение zoom »

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

function rpcf_add_user_new&#40;$user,$parameters,$groups&#41; &#123; //0x2125
    $ret=array&#40;&#41;;
    if &#40;!$this->connection->urfa_call&#40;0x2125&#41;&#41; &#123;
        print "Error calling function ". __FUNCTION__ ."\n";
        return FALSE;
    &#125;
    
    $packet = $this->connection->getPacket&#40;&#41;;
    $packet->DataSetString&#40;$user&#91;'login'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'password'&#93;&#41;;
    $packet->DataSetstring&#40;$user&#91;'full_name'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'is_juridical'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'jur_address'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'act_address'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'flat_number'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'entrance'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'floor'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'district'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'building'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'passport'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'house_id'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'work_tel'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'home_tel'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'mob_tel'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'web_page'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'icq_number'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'tax_number'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'kpp_number'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'email'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'bank_id'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'bank_account'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'comments'&#93;&#41;;
    $packet->DataSetString&#40;$user&#91;'personal_manager'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'connect_date'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'is_send_invoice'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'advance_payment'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'switch_id'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'port_number'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'binded_currency_id'&#93;&#41;;
    $packet->DataSetInt&#40;count&#40;$parameters&#41;&#41;;
    foreach &#40;$parameters as $array_item&#41;&#123;
        $packet->DataSetInt&#40;$array_item&#91;'id'&#93;&#41;;
        $packet->DataSetString&#40;$array_item&#91;'value'&#93;&#41;;
    &#125;
    $packet->DataSetInt&#40;count&#40;$groups&#41;&#41;;
    foreach &#40;$groups as $array_item&#41;&#123;
        $packet->DataSetInt&#40;$array_item&#91;'value'&#93;&#41;;
    &#125;
    $packet->DataSetInt&#40;$user&#91;'is_blocked'&#93;&#41;;
    $packet->DataSetDouble&#40;$user&#91;'balance'&#93;&#41;;
    $packet->DataSetDouble&#40;$user&#91;'credit'&#93;&#41;;
    $packet->DataSetDouble&#40;$user&#91;'vat_rate'&#93;&#41;;
    $packet->DataSetDouble&#40;$user&#91;'sale_tax_rate'&#93;&#41;;
    $packet->DataSetInt&#40;$user&#91;'int_status'&#93;&#41;;
    
    $this->connection->urfa_send_param&#40;$packet&#41;;
    $ret&#91;'user_id'&#93;=0;
        if&#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41;&#123;
           $z_user_id = $x->DataGetInt&#40;&#41;;
	   if &#40;$z_user_id == 0&#41; &#123;	   
    		$error_code = $x->DataGetInt&#40;&#41;;
    		$error_msg = $x->DataGetString&#40;&#41;;
	   &#125;
	   if &#40;$z_user_id != 0&#41; &#123;
		$account_id = $x->DataGetInt&#40;&#41;;
	    
	   &#125;
           $ret&#91;'user_id'&#93;=$z_user_id;
           $ret&#91;'error_msg'&#93;=$error_msg;
	   $ret&#91;'error_code'&#93;=$error_code;
           $ret&#91;'basic_account'&#93;=$account_id;
	   $this->connection->urfa_get_data&#40;&#41;;
        &#125;
    return $ret;
&#125;
Добавил в wiki.

Belchik
Сообщения: 81
Зарегистрирован: Пн ноя 28, 2005 10:55

Сообщение Belchik »

А реально этим воспользоваться на старой UTM 5.1.17?

swibl
Сообщения: 17
Зарегистрирован: Вт июн 30, 2009 08:21

Сообщение swibl »

Столкнулся со следующей проблемой. Если пытаюсь вызвать несколько функций подряд, используя один объект URFAClient_Admin, начинают валиться ошибки "Error calling function xxxxxxx". Если перед каждым вызовом функции пересоздаю объект, то более-менее работает, но биллингу не нравится такое большое количество подключений за такой короткий промежуток времени. Как можно решить эту проблему?

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

я тоже спотыкался об это, решил sleep-ом. Видимо, надо пересмотреть немного функции. Есть создание объекта, но нет явного уничтожения. По хорошему - нехай висит до явного уничтожения(например, по смерти интерпретатора или по вызову метода).

Biss
Сообщения: 7
Зарегистрирован: Пт дек 01, 2006 12:40

Сообщение Biss »

Во многих функциях не хватает этой строки
$this->connection->urfa_get_data();
в конце кода. Из за этого происходит не полный обмен с ядром системы при вызове функции. Как следствие она подвисает и для последующих функций отрабатывает некорректно. Несколько функций в wiki я уже исправил.

swibl
Сообщения: 17
Зарегистрирован: Вт июн 30, 2009 08:21

Сообщение swibl »

Biss писал(а):Во многих функциях не хватает этой строки
$this->connection->urfa_get_data();
в конце кода. Из за этого происходит не полный обмен с ядром системы при вызове функции. Как следствие она подвисает и для последующих функций отрабатывает некорректно. Несколько функций в wiki я уже исправил.
А можно поподробнее, в каких местах/случаях должна вызываться эта функция?

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

swibl писал(а):
Biss писал(а):Во многих функциях не хватает этой строки
$this->connection->urfa_get_data();
в конце кода. Из за этого происходит не полный обмен с ядром системы при вызове функции. Как следствие она подвисает и для последующих функций отрабатывает некорректно. Несколько функций в wiki я уже исправил.
А можно поподробнее, в каких местах/случаях должна вызываться эта функция?
Есть два варианта urfa_get_data(): старый, требующий множественных вызовов, и новый, в котором делается только один вызов urfa_get_data(). Здесь это все написано подробно страниц десять назад

Ответить