urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
Пупкин Алексей
Сообщения: 6
Зарегистрирован: Пт июн 01, 2007 04:07

функция rpcf_traffic_report_ex ( 0x3009 )

Сообщение Пупкин Алексей »

Пробую написать функцию из админки rpcf_traffic_report_ex, но что то не работает, выскакивает ошибка:
Warning: unpack() [function.unpack]: Type N: not enough input, need 4, have 0 in /srv/apache/urfa/lib/urfa/URFAClient_Packet.php on line 171
может кто сталкивался с подобной проблемой, либо это в функции ошибка? код функции:

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

function rpcf_traffic_report_ex($user_id,$time_start,$time_end) { //0x3009
        $ret=array();
        if (!$this->connection->urfa_call(0x3009)) {
                print "Error calling function ". __FUNCTION__ ."\n";
                return FALSE;
        }
        $packet = $this->connection->getPacket();
        $packet->DataSetInt(0);
        $packet->DataSetInt($user_id);
        $packet->DataSetInt(0);
        $packet->DataSetInt(0);
        $packet->DataSetInt(0);
        $packet->DataSetInt($time_start);
        $packet->DataSetInt($time_end);

        $this->connection->urfa_send_param($packet);
        if ($x = $this->connection->urfa_get_data()) {
            $ret['bytes_in_kbyte']=$x->DataGetDouble();
            $users_count=$x->DataGetInt();
            $ret['users_count']=$users_count;
            $traffic=array();
            for&#40; $i=0; $i<$users_count; $i++ &#41; &#123;
                $atr_size=$x->DataGetInt&#40;&#41;;
                var_dump&#40;$atr_size&#41;;
                $traffic&#91;'atr_size'&#93;=$atr_size;
                $ips=array&#40;&#41;;
                for&#40; $j=0; $j<$atr_size; $j++ &#41; &#123;
                    $ips&#91;'account_id'&#93;=$x->DataGetInt&#40;&#41;;
                    $ips&#91;'login'&#93;=$x->DataGetString&#40;&#41;;
                    $ips&#91;'discount_date'&#93;=$x->DataGetInt&#40;&#41;;
                    $ips&#91;'tclass'&#93;=$x->DataGetInt&#40;&#41;;
                    $ips&#91;'base_cost'&#93;=$x->DataGetDouble&#40;&#41;;
                    $ips&#91;'bytes'&#93;=$x->DataGetLong&#40;&#41;;
                    $ips&#91;'discount'&#93;=$x->DataGetDouble&#40;&#41;;
                    $traffic&#91;'ips'&#93;&#91;&#93;=$ips;
                &#125;
                $ret&#91;'traffic'&#93;=$traffic;
            &#125;
        &#125;

        return $ret;
    &#125;

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

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

в клиенте похоже старая реализация urfa_get_data, а вы пишете в расчете на новую

Пупкин Алексей
Сообщения: 6
Зарегистрирован: Пт июн 01, 2007 04:07

Сообщение Пупкин Алексей »

mikkey finn писал(а):в клиенте похоже старая реализация urfa_get_data, а вы пишете в расчете на новую
файлики клиента брал с сайта http://wiki.flintnet.ru/ можно поподробнее какая там версия get_data() или покажите код данной функции

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

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

там старая, код новой в этой теме пару страниц назад всплывал

Пупкин Алексей
Сообщения: 6
Зарегистрирован: Пт июн 01, 2007 04:07

открытие портов

Сообщение Пупкин Алексей »

Вроде завелось с новой urfa_get_data, но явно заметно смещение индекса массива в самой функции, возвращаемые данные смещаются в значениях. Так же выскакивают следующие ошибки:

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

Warning&#58;  unpack&#40;&#41; &#91;function.unpack&#93;&#58; Type d&#58; not enough input, need 8, have 4 in /srv/apache/urfa/lib/urfa/URFAClient_Packet.php on line 181

Notice&#58;  Undefined offset&#58;  45 in /srv/apache/urfa/lib/urfa/URFAClient_Packet.php on line 104

Warning&#58;  unpack&#40;&#41; &#91;function.unpack&#93;&#58; Type N&#58; not enough input, need 4, have 0 in /srv/apache/urfa/lib/urfa/URFAClient_Packet.php on line 173


Пупкин Алексей
Сообщения: 6
Зарегистрирован: Пт июн 01, 2007 04:07

функция работает!

Сообщение Пупкин Алексей »

удалось запустить данную функцию, utm5_debug.log помог :)
на данный момент рабочая функция выглядит так:

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

 function rpcf_traffic_report_ex&#40;$user_id,$time_start,$time_end, $type&#41; &#123; //0x3009
        $ret=array&#40;&#41;;
        if &#40;!$this->connection->urfa_call&#40;0x3009&#41;&#41; &#123;
                print "Error calling function ". __FUNCTION__ ."\n";
                return FALSE;
        &#125;
        $packet = $this->connection->getPacket&#40;&#41;;
        $packet->DataSetInt&#40;$type&#41;;
        $packet->DataSetInt&#40;$user_id&#41;;
        $packet->DataSetInt&#40;0&#41;;
        $packet->DataSetInt&#40;0&#41;;
        $packet->DataSetInt&#40;0&#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;'bytes_in_kbyte'&#93;=$x->DataGetDouble&#40;&#41;;
            $users_count=$x->DataGetInt&#40;&#41;;
            $ret&#91;'users_count'&#93;=$users_count;
            $traffic=array&#40;&#41;;
                for&#40; $i=0; $i<$users_count; $i++ &#41; &#123;
                    $atr_size=$x->DataGetInt&#40;&#41;;
                    $traffic&#91;'atr_size'&#93;=$atr_size;
                    $ips=array&#40;&#41;;
                    for&#40; $j=0; $j<$atr_size; $j++ &#41; &#123;
                        $ips&#91;'account_id'&#93;=$x->DataGetInt&#40;&#41;;
                        $ips&#91;'login'&#93;=$x->DataGetString&#40;&#41;;
                        $ips&#91;'discount_date'&#93;=$x->DataGetInt&#40;&#41;;
                        $ips&#91;'tclass'&#93;=$x->DataGetInt&#40;&#41;;
                        $ips&#91;'base_cost'&#93;=$x->DataGetDouble&#40;&#41;;
                        $ips&#91;'bytes'&#93;=$x->DataGetLong&#40;&#41;;
                        $ips&#91;'discount'&#93;=$x->DataGetDouble&#40;&#41;;
                        //$ips&#91;'XZ'&#93;=$x->DataGetInt&#40;&#41;;
                        $traffic&#91;'ips'&#93;&#91;$j&#93;=$ips;
                    &#125;
                    $ret&#91;'traffic'&#93;&#91;$i&#93;=$traffic;
                &#125;
        &#125;

        return $ret;
    &#125;

где в переменную type необходимо передпвать следующие значения:
1-Отчет с группировкой по часам
2-Отчет с группировкой по дням
3-Общий отчет

Fedor_Maev
Сообщения: 1
Зарегистрирован: Чт апр 23, 2009 15:35

Файлы с новой версией

Сообщение Fedor_Maev »

Не могли бы скинуть файлы новой версии на jp21@mail.ru
Заранее спасибо.

kamo
Сообщения: 2
Зарегистрирован: Ср апр 15, 2009 13:54

Сообщение kamo »

скиньте последнюю версию kamo.dev@gmail.com пожалуйста.
Спасибо

Instruktor
Сообщения: 131
Зарегистрирован: Ср авг 10, 2005 21:32
Откуда: Москва

Сообщение Instruktor »

В копилко:

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

 <function name="rpcf_user5_get_discount_period_info" id="-0x402e">
    <input>                                                                                                                                                   
      <integer name="id"/>
    </input>
    <output>
      <integer name="id" />
      <integer name="begin" />
      <integer name="end" />
      <integer name="periodic_type" />
      <integer name="next_discount_period_id" />
      <integer name="discount_interval" />
      <integer name="canonical_len" />
      <integer name="custom_duration" />
      <integer name="static_id" />
    </output>
  </function>

function rpcf_user5_get_discount_period_info&#40;$period_id&#41; &#123; //-0x402e
$ret=array&#40;&#41;;	if &#40;!$this->connection->urfa_call&#40;-0x402e&#41;&#41;
	&#123;	print "Error calling function ". __FUNCTION__ ."\n"; 	return FALSE; &#125;
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$period_id&#41;;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
			$ret&#91;'id'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'begin'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'end'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'periodic_type'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'next_discount_period_id'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'discount_interval'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'canonical_len'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'custom_duration'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'static_id'&#93; = $x->DataGetInt&#40;&#41;;
			$this->connection->urfa_get_data&#40;&#41;;
		&#125;
		return $ret;
	&#125;

sup
Сообщения: 10
Зарегистрирован: Чт апр 30, 2009 04:59

Сообщение sup »

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

function rpcf_add_telephony_service&#40;$service&#41; &#123; //0x5055

                if &#40;!$this->connection->urfa_call&#40;0x5055&#41;&#41; &#123;
                        print "Error calling function ". __FUNCTION__ ."\n";
                        return FALSE;
                &#125;
                $packet = $this->connection->getPacket&#40;&#41;;
                $packet->DataSetInt&#40;$service&#91;'parent_id'&#93;&#41;;
                $packet->DataSetInt&#40;$service&#91;'tariff_id'&#93;&#41;;
                $packet->DataSetInt&#40;$service&#91;'service_id'&#93;&#41;;
                $packet->DataSetString&#40;$service&#91;'service_name'&#93;&#41;;
                $packet->DataSetString&#40;$service&#91;'comment'&#93;&#41;;
                $packet->DataSetInt&#40;$service&#91;'link_by_default'&#93;&#41;;
                $packet->DataSetDouble&#40;$service&#91;'cost'&#93;&#41;;
                $packet->DataSetInt&#40;$service&#91;'discount_method'&#93;&#41;;
                $packet->DataSetInt&#40;$service&#91;'start_date'&#93;&#41;;
                $packet->DataSetInt&#40;$service&#91;'expire_date'&#93;&#41;;
                $packet->DataSetInt&#40;$service&#91;'radius_sessions_limit'&#93;&#41;;
                $packet->DataSetInt&#40;$service&#91;'count'&#93;&#41;;
                    for &#40;$i=0;$i<$service&#91;'count'&#93;;$i++&#41; &#123;
                         $packet->DataSetInt&#40;$service&#91;$i&#93;&#91;'borders_count'&#93;&#41;;

                            for &#40;$j=0;$j<$service&#91;$i&#93;&#91;'borders_count'&#93;;$j++&#41; &#123;

         $packet->DataSetInt&#40;$service&#91;$i&#93;&#91;'borders'&#93;&#91;$j&#93;&#91;'tarif_quantity'&#93;&#41;;//
         $packet->DataSetDouble&#40;$service&#91;$i&#93;&#91;'borders'&#93;&#91;$j&#93;&#91;'cost'&#93;&#41;;
                                &#125;

                                 $packet->DataSetInt&#40;$service&#91;$i&#93;&#91;'directions'&#93;&#41;;
         $packet->DataSetInt&#40;$service&#91;$i&#93;&#91;'timerange_count'&#93;&#41;;
//Нужен цикл если параметров >1.

        $packet->DataSetInt&#40;$service&#91;$i&#93;&#91;'timerange'&#93;&#91;'timerange_id'&#93;&#41;;
        $packet->DataSetDouble&#40;&#40;float&#41;$service&#91;$i&#93;&#91;'timerange'&#93;&#91;'cost'&#93;&#41;;
                        &#125;
                        $packet->DataSetLong&#40;$service&#91;'unit_size'&#93;&#41;;
                        $packet->DataSetLong&#40;$service&#91;'free_time'&#93;&#41;;
                        $packet->DataSetLong&#40;$service&#91;'first_interval'&#93;&#41;;
                        $packet->DataSetLong&#40;$service&#91;'first_interval_around'&#93;&#41;;
                        $packet->DataSetLong&#40;$service&#91;'incremental_interval'&#93;&#41;;
                        $packet->DataSetDouble&#40;$service&#91;'fixed_call_cost'&#93;&#41;;

                $this->connection->urfa_send_param&#40;$packet&#41;;

                if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
                        $service_id = $x->DataGetInt&#40;&#41;;
                &#125;
                return $service_id;
        &#125;
Собственно вот но есть одна проблема, при передаче свыше 509 направлений urfa_send_param отрабатывает но утмка вылетает с исключением #22 в rpcf_add_telephony_service, как это побороть я незнаю, повидимому нужно как то оное передавать немного по другому когда парметров достаточно много.... если оное не исправить то особого толку в этой функции нету.... т.к. 509 это маловато собственно.
ds - помоги если время есть:)

Cmak
Сообщения: 34
Зарегистрирован: Чт мар 26, 2009 07:43

Сообщение Cmak »

Получаю данные об лиц. счете

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

rpcf_get_accountinfo

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

Array
&#40;
    &#91;unused&#93; => 0
    &#91;is_blocked&#93; => 816
    &#91;dealer_account_id&#93; => 0
    &#91;is_dealer&#93; => 0
    &#91;vat_rate&#93; => 0
    &#91;sale_tax_rate&#93; => 0
    &#91;comission_coefficient&#93; => 0
    &#91;default_comission_value&#93; => 0
    &#91;credit&#93; => 0
    &#91;balance&#93; => -4.2320713859
    &#91;int_status&#93; => 0
    &#91;block_recalc_abon&#93; => 0
    &#91;block_recalc_prepaid&#93; => 1
    &#91;unlimited&#93; => 0
&#41;
Я думал что поле 'is_blocked" типа boolean, а аказалось нет, может кто знает что это такое, может сколько минут заблокирован пользователь ?

cjcrazy
Сообщения: 497
Зарегистрирован: Чт янв 20, 2005 21:54

Сообщение cjcrazy »

2Cmak, может это тип блокировки? попробуйте в биллинге разнуе блокировки выставить и посмотреть что тут выводится

Аватара пользователя
Chrst
Сообщения: 370
Зарегистрирован: Пт май 11, 2007 09:28
Откуда: Медиахолдинг "ЛеККС"
Контактная информация:

Сообщение Chrst »

cjcrazy писал(а):2Cmak, может это тип блокировки? попробуйте в биллинге разнуе блокировки выставить и посмотреть что тут выводится
Намного быстрее поиском по форуму находятся "типы блокировки".

kelt8
Сообщения: 2
Зарегистрирован: Пн май 04, 2009 08:02

Сообщение kelt8 »

Всем привет !! долго долго читатл данную тему

но понять не могу куда пихать все эти скрипты пусть у меня при нажатии кнопки вылазила морда лчиного кабинета.

cjcrazy
Сообщения: 497
Зарегистрирован: Чт янв 20, 2005 21:54

Сообщение cjcrazy »

2Chrst, то останется почти теорией. а так - будет практика ;)

Ответить