urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
DeeSee
Сообщения: 3
Зарегистрирован: Чт фев 19, 2009 13:06

Сообщение DeeSee »

Ребят, чтобы получить отчет по телефонии, нужно использовать rpcf_get_tel_report и rpcf_user5_get_tel_report?

Написал для них функции:

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

	function rpcf_user5_get_tel_report($start_date, $end_date) { //-0x4099

		if (!$this->connection->urfa_call(-0x4099)) {
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		}
		$packet = $this->connection->getPacket();
		
		// Input
		
		$packet->DataSetInt($start_date);
		$packet->DataSetInt($end_date);
		$this->connection->urfa_send_param($packet);
		
		// Reqest to server
		
		if (!$x = $this->connection->urfa_get_data()) 
		{
			return array();
		}
		
		// Output

		$result_arr = array();
		$result_arr['accounts_size']     = $x->DataGetInt();
		
		for &#40;$i=0; $i < $result_arr&#91;'accounts_size'&#93;; $i++&#41; 
		&#123;
			$x = $this->connection->urfa_get_data&#40;&#41;;
			
			$accounts_arr = array&#40;&#41;;
			$accounts_arr&#91;'dhs_log_size'&#93; = $x->DataGetInt&#40;&#41;;
			
			for &#40;$j=0; $j < $accounts_arr&#91;'dhs_log_size'&#93;; $i++&#41;
			&#123;
				$x = $this->connection->urfa_get_data&#40;&#41;;
				
				$dhs = array&#40;&#41;;
				$dhs&#91;'recv_date'&#93;          = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'recv_date_plus_acct_sess_time'&#93; = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'acct_sess_time'&#93;     = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'Calling_Station_Id'&#93; = $x->DataGetString&#40;&#41;;
				$dhs&#91;'Called_Station_Id'&#93;  = $x->DataGetString&#40;&#41;;
				$dhs&#91;'dname'&#93;              = $x->DataGetString&#40;&#41;;
				$dhs&#91;'total_cost'&#93;         = $x->DataGetDouble&#40;&#41;;
				
				$accounts_arr&#91;'dhs'&#93;&#91;&#93; = $dhs;
			&#125;
			$result_arr&#91;&#93; = $accounts_arr;
		&#125;
		$this->connection->urfa_get_data&#40;&#41;;
		
		return $result_arr;
	&#125;

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

	function rpcf_get_tel_report&#40;$user_id, $account_id, $apid, $time_start, $time_end&#41; &#123; //0x5018

		if &#40;!$this->connection->urfa_call&#40;0x5018&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		
		$packet = $this->connection->getPacket&#40;&#41;;

		// Input
		
		$packet->DataSetInt&#40;$user_id&#41;;
		$packet->DataSetInt&#40;$account_id&#41;;
		$packet->DataSetInt&#40;$apid&#41;;
		$packet->DataSetInt&#40;$time_start&#41;;
		$packet->DataSetInt&#40;$time_end&#41;;
				
		// Reqest to server
		
		$this->connection->urfa_send_param&#40;$packet&#41;;
		
		if &#40;!$x = $this->connection->urfa_get_data&#40;&#41;&#41; 
		&#123;
			return array&#40;&#41;;
		&#125;

		// Output

		$result_arr = array&#40;&#41;;
		$result_arr&#91;'dhs_log_size'&#93;     = $x->DataGetInt&#40;&#41;;
		
		for &#40;$i=0; $i < $result_arr&#91;'dhs_log_size'&#93;; $i++&#41; 
		&#123;
			$x = $this->connection->urfa_get_data&#40;&#41;;
			
			$accounts_arr = array&#40;&#41;;
			$accounts_arr&#91;'count'&#93; = $x->DataGetInt&#40;&#41;;
			
			for &#40;$j=0; $j < $accounts_arr&#91;'count'&#93;; $i++&#41;
			&#123;
				$x = $this->connection->urfa_get_data&#40;&#41;;
				
				$dhs = array&#40;&#41;;
				$dhs&#91;'id'&#93;                             = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'account_id'&#93;                     = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'slink_id'&#93;                       = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'recv_date'&#93;                      = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'acct_sess_time_plus_recv_date'&#93;  = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'Called_Station_Id'&#93;              = $x->DataGetString&#40;&#41;;
				$dhs&#91;'Calling_Station_Id'&#93;             = $x->DataGetString&#40;&#41;;
				$dhs&#91;'nas_port'&#93;                       = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'acct_session_id'&#93;                = $x->DataGetString&#40;&#41;;
				$dhs&#91;'nas_port_type'&#93;                  = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'uname'&#93;                          = $x->DataGetString&#40;&#41;;
				$dhs&#91;'service_type'&#93;                   = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'framed_protocol'&#93;                = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'nas_ip'&#93;                         = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'nas_id'&#93;                         = $x->DataGetString&#40;&#41;;
				$dhs&#91;'acct_status_type'&#93;               = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'acct_inp_pack'&#93;                  = $x->DataGetLong&#40;&#41;;
				$dhs&#91;'acct_inp_oct'&#93;                   = $x->DataGetLong&#40;&#41;;
				$dhs&#91;'acct_out_pack'&#93;                  = $x->DataGetLong&#40;&#41;;
				$dhs&#91;'acct_out_oct'&#93;                   = $x->DataGetLong&#40;&#41;;
				$dhs&#91;'zone_id'&#93;                        = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'did'&#93;                            = $x->DataGetInt&#40;&#41;;
				$dhs&#91;'acct_sess_time'&#93;                 = $x->DataGetLong&#40;&#41;;
				$dhs&#91;'dcause'&#93;                         = $x->DataGetString&#40;&#41;;
				$dhs&#91;'duration'&#93;                       = $x->DataGetLong&#40;&#41;;
				$dhs&#91;'base_cost'&#93;                      = $x->DataGetDouble&#40;&#41;;
				$dhs&#91;'sum_cost'&#93;                       = $x->DataGetDouble&#40;&#41;;
				
				$accounts_arr&#91;'dhs'&#93;&#91;&#93; = $dhs;
			&#125;
			$result_arr&#91;&#93; = $accounts_arr;
		&#125;
		$this->connection->urfa_get_data&#40;&#41;;
		
		return $result_arr;
	&#125;
Пишу скрипт для выполнения:

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

$urfa_admin = new URFAClient_Admin&#40;'init', 'init', 'xx.xx.xx.xx', '11758', false&#41;;

$accountinfo = $urfa_admin->rpcf_get_tel_report&#40;0, 0, 0, '19.02.2007 00&#58;00&#58;00', '20.02.2009 00&#58;00&#58;00'&#41;;
echo '<b>rpcf_get_tel_report</b><br/>';
var_dump&#40;$accountinfo&#41;;

$urfa_user5 = $urfa_admin->getURFAClient_User5&#40;'0101', '1234', false&#41;;

$accountinfo = $urfa_user5->rpcf_user5_get_tel_report&#40;'19.02.2007 00&#58;00&#58;00', '20.02.2009 00&#58;00&#58;00'&#41;;
echo '<b>rpcf_user5_get_tel_report</b><br/>';
var_dump&#40;$accountinfo&#41;;

Получаем пустой результат:(

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

rpcf_get_tel_report
array&#40;1&#41; &#123;
  &#91;"dhs_log_size"&#93;=>
  int&#40;0&#41;
&#125;
rpcf_user5_get_tel_report
array&#40;2&#41; &#123;
  &#91;"accounts_size"&#93;=>
  int&#40;1&#41;
  &#91;0&#93;=>
  array&#40;1&#41; &#123;
    &#91;"dhs_log_size"&#93;=>
    int&#40;0&#41;
  &#125;
&#125;
Через админку UTM отчет отображается...
Верно ли я все сделал?

Также вопрос в тему:
Что такое $apid?

[anomality]
Сообщения: 11
Зарегистрирован: Чт фев 19, 2009 09:48
Откуда: Абакан, Россия

Сообщение [anomality] »

Все замечательно, господа, но кое-что все-таки непонятно... например, ds, ты выслал архив, спасибо :) НО! что с ним делать толком понять не могу... php URFAClient.php сразу возвращает консольку -- и все...
было бы неплохо, думаю, приделать к вашим разработкам веб-интерфейс, чтобы можно было действительно удобно и наглядно выполнять те или иные манипуляции с УТМ5, и, кроме всего прочего, не сильно заморачиваться со скриптами...
ну или хотябы какую-нибудь документашку как это все работает...
надеюсь что идея не погаснет просто так, а разовьется в неплохой бесплатный аддон к биллингу...

Аватара пользователя
ds
Сообщения: 380
Зарегистрирован: Пн сен 18, 2006 14:06

Сообщение ds »

было бы неплохо, думаю, приделать к вашим разработкам веб-интерфейс, чтобы можно было действительно удобно и наглядно выполнять те или иные манипуляции с УТМ5, и, кроме всего прочего, не сильно заморачиваться со скриптами...
Фишка как раз в том что urfaphp создавалась как раз для разработки этих самых веб-интерфейсов, как альтернатива оригинальному urfaclient-ую У каждого свои требования к тому же веб-интерфейсу, и унифицировать эти требования плохая идея. А для манипуляций с УТМ есть явовская админка.

По сути получился даже не клиент, а библиотека функций для взаимодействия с api биллинга. Прямую параллель можно провести с тем же mysql api.

Как пользоваться - в архиве есть файлик test.php, там есть пример вызова нескольких функций.

[anomality]
Сообщения: 11
Зарегистрирован: Чт фев 19, 2009 09:48
Откуда: Абакан, Россия

Сообщение [anomality] »

ds писал(а):
было бы неплохо, думаю, приделать к вашим разработкам веб-интерфейс, чтобы можно было действительно удобно и наглядно выполнять те или иные манипуляции с УТМ5, и, кроме всего прочего, не сильно заморачиваться со скриптами...
Фишка как раз в том что urfaphp создавалась как раз для разработки этих самых веб-интерфейсов, как альтернатива оригинальному urfaclient-у. У каждого свои требования к тому же веб-интерфейсу, и унифицировать эти требования плохая идея.

требования можно и не унифицировать. можно просто дать конечному пользователю возможность менять дизайн (как один из вариантов), выбирать какие функции, как и где будут работать... все ведь можно сделать, и сделать можно удобно!..
ds писал(а):А для манипуляций с УТМ есть явовская админка.
верю. но эта самая явовская админка не позволяет поменять, элементарно, конец рассчетного периода. И автоматическую смену тарифа можно было бы сделать очень простой -- просто выбрал следующий тариф, указал конец периода -- тариф сменился, все довольны...
ds писал(а): По сути получился даже не клиент, а библиотека функций для взаимодействия с api биллинга. Прямую параллель можно провести с тем же mysql api.
так вот эту библиотеку я и предлагаю оформить должным образом, чтобы всякие [anomality] не угрохали базу при первом же запуске :)

Аватара пользователя
ds
Сообщения: 380
Зарегистрирован: Пн сен 18, 2006 14:06

Сообщение ds »

так вот эту библиотеку я и предлагаю оформить должным образом, чтобы всякие [anomality] не угрохали базу при первом же запуске Smile
Ну базу грохнуть можно даже родной админкой, если плохо представляешь результат. Я тоже ломал не раз :) , но для этого есть тестовые машинки, например виртуалки. Сделать дамп базы рабочего биллинга не сложно.
верю. но эта самая явовская админка не позволяет поменять, элементарно, конец рассчетного периода. И автоматическую смену тарифа можно было бы сделать очень простой -- просто выбрал следующий тариф, указал конец периода -- тариф сменился, все довольны...
требования можно и не унифицировать. можно просто дать конечному пользователю возможность менять дизайн (как один из вариантов), выбирать какие функции, как и где будут работать... все ведь можно сделать, и сделать можно удобно!..
А кому то например надо в этот момент смены периода провести перерасчет абонентки, выставить счет, разослать уведомление о смене тарифа...
Научить искуственному интеллекту программу весьма сложная задача. Если с кто-то поделится своей реализацией и видением функциональности, то это не факт что вас эта функциональность устроит.


Если у Вы составите ТЗ на требования к интерфейсу и функционалу, я могу взяться за их реализацию. Разумеется не бесплатно.

----
PS. Господа Нетаповцы, не лишайте такого удовольствия как php-клиент. Можно ведь zend-ом обработать библиотеку чтобы скрыть реализацию - понятно что ее показывать хочется меньше всего. Я так понимаю 007 уже близко :) часто ссылаетесь на нее

[anomality]
Сообщения: 11
Зарегистрирован: Чт фев 19, 2009 09:48
Откуда: Абакан, Россия

Сообщение [anomality] »

ds писал(а):Ну базу грохнуть можно даже родной админкой, если плохо представляешь результат. Я тоже ломал не раз :) , но для этого есть тестовые машинки, например виртуалки. Сделать дамп базы рабочего биллинга не сложно.
ну, это уже прописные истины :)
ds писал(а): А кому то например надо в этот момент смены периода провести перерасчет абонентки, выставить счет, разослать уведомление о смене тарифа...
Научить искуственному интеллекту программу весьма сложная задача. Если с кто-то поделится своей реализацией и видением функциональности, то это не факт что вас эта функциональность устроит.
вот! выясняется, что именно нужно для того, чтобы реализовать функцию досрочной смены ТП :)
ds писал(а): Если у Вы составите ТЗ на требования к интерфейсу и функционалу, я могу взяться за их реализацию. Разумеется не бесплатно.
реализовать то это все я и сам могу. нужно было только разобраться как именно работает Ваша реализация. Скорее всего, займусь в свободное время -- главное его найти :)
ds писал(а): ----
PS. Господа Нетаповцы, не лишайте такого удовольствия как php-клиент. Можно ведь zend-ом обработать библиотеку чтобы скрыть реализацию - понятно что ее показывать хочется меньше всего. Я так понимаю 007 уже близко :) часто ссылаетесь на нее
а чего такого секретного в их библиотеке? вроде ничего сверхестественного нет :)
чем сильнее защита, тем сильнее соблазн ее сломать, мне так казалось...

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

Сообщение starchik »

а чего такого секретного в их библиотеке? вроде ничего сверхестественного нет
чем сильнее защита, тем сильнее соблазн ее сломать, мне так казалось...
так оно и есть...

South
Сообщения: 21
Зарегистрирован: Чт фев 12, 2009 14:12
Откуда: С-Петербург
Контактная информация:

Сообщение South »

ds а постучись в аську 159655

Аватара пользователя
mmv software
Сообщения: 8
Зарегистрирован: Вс фев 22, 2009 12:38

Сообщение mmv software »

Уважаемый DS не могли бы Вы прислать последнюю версию urfaclient на адрес электронной почты mmvsoftware@mail.ru и если есть возможность, то и SDK.
Хочу написать на .NET красивую и функциональную утилиту, замену NetUP UTM wintray, уже есть множество идей, но не могу реализовать по причине отсутствия SDK.
И ещё вопрос: Кто знает, в UTM 6 протокол urfaclient измениться?
С моими разработками можно ознакомиться на нашем сайте http://www.grmm.ru.
Буду очень благодарен за помощь.

_J_
Сообщения: 32
Зарегистрирован: Пн май 08, 2006 21:35
Откуда: Чебоксары

Сообщение _J_ »

А можно функцию rpcf_unlink_user_tariff
очень нужна такая функция, необходимо удалить тарифный план у пользователя.
В админке на яве есть только добавление/изменение тарифа к юзеру.
А может есть какой-либо другой способ удалить тариф у пользователя?

[anomality]
Сообщения: 11
Зарегистрирован: Чт фев 19, 2009 09:48
Откуда: Абакан, Россия

Сообщение [anomality] »

_J_ писал(а):А можно функцию rpcf_unlink_user_tariff
очень нужна такая функция, необходимо удалить тарифный план у пользователя.
В админке на яве есть только добавление/изменение тарифа к юзеру.
А может есть какой-либо другой способ удалить тариф у пользователя?
даже не просто отлинковка, а именно замена одного тарифа на другой.
лучший вариант -- выставить новый тариф на следующий рассчетный период, а уж из urfa-client'а поменять конец текущего рассчетного периода... как это сделать с текущим функционалом php-urfa-client я пока не смог разобраться...

andvas
Сообщения: 2
Зарегистрирован: Пт фев 20, 2009 21:08
Откуда: Самара

Сообщение andvas »

ds если можно сбрось и мне последнюю версию andvas2002@mail.ru

Заранее Спасибо!

hcube
Сообщения: 14
Зарегистрирован: Вт фев 10, 2009 16:33

Сообщение hcube »

Народ, ну эти функции же на раз пишутся.

Берете любую готовую функцию. Берете api.xml. Находите там код xml для нужной вам функции. И просто модернизируете существующую функцию так, чтобы она передавала и принимала все данные, которые в api.xml описаны. Последний есть в любой поставке УТМ.

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

    <function name="rpcf_unlink_user_tariff" id="0x3019"> <- здесь ID
    <input>
      <integer name="user_id"/> <- это значения, которые надо в функцию передать
      <integer name="account_id" default="0"/>
      <integer name="tariff_link_id"/>
    </input>
    <output/> <- это выход, он пустой
    </function>

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

function rpcf_unlink_user_tariff&#40;$user_id,$account_id=0,$tariff_link_id=0&#41; 
&#123; //0x3019 
    $ret=array&#40;&#41;; 
    if &#40;!urfa_call&#40;0x3019&#41;&#41; &#123; 
          print "Error calling function ". __FUNCTION__ ."\n"; 
          return FALSE; 
    &#125; 
    $packet = new Packet&#40;&#41;; 
    $packet->DataSetInt&#40;$user_id&#41;; 
    $packet->DataSetInt&#40;$account_id&#41;; 
    $packet->DataSetInt&#40;$tariff_link_id&#41;; 
    urfa_send_param&#40;$packet&#41;; 
    return $ret; 
&#125;

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

Сообщение Kayfolom »

hcube, спасибо, добавил в http://wiki.flintnet.ru . Кстати неверные атрибуты стояли на папках, нельзя было создавать новые страницы вики - исправил.

[anomality]
Сообщения: 11
Зарегистрирован: Чт фев 19, 2009 09:48
Откуда: Абакан, Россия

Сообщение [anomality] »

hcube писал(а):Народ, ну эти функции же на раз пишутся.

Берете любую готовую функцию. Берете api.xml. Находите там код xml для нужной вам функции. И просто модернизируете существующую функцию так, чтобы она передавала и принимала все данные, которые в api.xml описаны. Последний есть в любой поставке УТМ.

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

function rpcf_unlink_user_tariff&#40;$user_id,$account_id=0,$tariff_link_id=0&#41; 
т.е. я так понимаю, эта функция отлинкует текущую услугу от тарифа пользователя и даст возможность в админке выбрать новый тариф? или я жестоко ошибаюсь?

Ответить