urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
Telecom_Prem
Сообщения: 21
Зарегистрирован: Ср фев 20, 2008 13:53
Откуда: Perm

Сообщение Telecom_Prem »

Приветствую!
А кто-то удалял пользователей через phpURFAClient?

Version:5.2.1-008-rc2-centos5 $Rev: 11744 $

Пробую запускать такой скрипт (кусок кода):

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

while($rows = mysql_fetch_array($result)) 
{
$account_id = $rows['account_id'];
$user_id = $rows['basic_account'];
$services = array();
$tariff = array();
$services = $urfa_admin->rpcf_get_all_services_for_user($account_id);
$tariff = $urfa_admin->rpcf_get_user_tariffs($user_id,$account_id);

$counts_serv = $services['count'];
$counts_tarif=$tariff['count'];
print ("$user_id\t$account_id\t$counts_serv\t$counts_tarif");

for&#40;$i = 0; $i < $counts_tarif; $i ++&#41;
&#123;
    if&#40;$tariff&#91;'count'&#93; > 0&#41;
    &#123;   
    $tariff_link_id = $tariff&#91;'user_tariffs'&#93;&#91;$i&#93;&#91;'tariff_link_id'&#93;;
    $out = $urfa_admin->rpcf_unlink_user_tariff&#40;$user_id,$account_id,$tariff_link_id&#41;;
    &#125;
&#125;    

for&#40;$i = 0; $i < $counts_serv; $i ++&#41;
&#123;
    if&#40;$services&#91;'count'&#93; > 0&#41;
    &#123;
    $slink_id = $services&#91;'services'&#93;&#91;$i&#93;&#91;'slink_id'&#93;;
    $out = $urfa_admin->rpcf_delete_slink&#40;$slink_id&#41;;
    &#125;
&#125;
    $out = $urfa_admin->rpcf_remove_account&#40;$account_id&#41;;
    $out = $urfa_admin->rpcf_remove_user&#40;$user_id&#41;;

&#125;

,
предварительно добавил в URFAClient_Admin.php две функции:

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

function rpcf_remove_user&#40;$user_id&#41; &#123; //0x200e
    $ret=array&#40;&#41;;
    if &#40;!$this->connection->urfa_call&#40;0x200e&#41;&#41; &#123;
        print "Error calling function ". __FUNCTION__ ."\n";
        return FALSE;
    &#125;
    $packet = $this->connection->getPacket&#40;&#41;;
    $packet->DataSetInt&#40;$user_id&#41;;
    $this->connection->urfa_send_param&#40;$packet&#41;;
    if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41;&#123;
                    $ret&#91;'result'&#93;=$x->DataGetInt&#40;&#41;;
//                        $this->connection->urfa_get_data&#40;&#41;;
    &#125;
    return $ret;
&#125;
                                                            


function rpcf_remove_account&#40;$account_id&#41; &#123; //0x2034
   $ret=array&#40;&#41;;
   if &#40;!$this->connection->urfa_call&#40;0x2034&#41;&#41; &#123;
           print "Error calling function ". __FUNCTION__ ."\n";
           return FALSE;
   &#125;
   $packet = $this->connection->getPacket&#40;&#41;;
   $packet->DataSetInt&#40;$account_id&#41;;
   $this->connection->urfa_send_param&#40;$packet&#41;;
   if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41;&#123;
   $ret&#91;'result'&#93;=$x->DataGetInt&#40;&#41;;
//                        $this->connection->urfa_get_data&#40;&#41;;
   &#125;
   return $ret;
&#125;
по итогам выполнения можно резюмировать вот что:
1. очень долго исполняется, судя по логам - проблемы с блокировкой таблиц во время запроса UPDATE dtagg_telephony SET discounted='0.000000',discounted_without_tax='0.000000', duration='0' WHERE id='хххх'.
в дебаге появляются записи MySQL query failed:<Lock wait timeout exceeded; try restarting transaction>
2. итоговая ошибка RPCServer@0.0.0.0: Exception in void* rpcf_remove_user(void*): #22

Я так помнимаю что у меня две проблемы - с БД и с URFA. Пепрвую пробовал решать измененим настроек innodb, а по второй не знаю даже куда копать...[/url]

Telecom_Prem
Сообщения: 21
Зарегистрирован: Ср фев 20, 2008 13:53
Откуда: Perm

Сообщение Telecom_Prem »

от блокировки таблиц отмахался, ошибку при вызове функций победить не могу. Подскажите, как правильно добавлять функции, которых еще нет в urfaclient на pph ?

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

Проверял ли кто нибудь urfaphp на ядре 5.3? Как то он не очень хочет работать.

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

Сообщение ds »

kirush писал(а):Проверял ли кто нибудь urfaphp на ядре 5.3? Как то он не очень хочет работать.
Пока не было возможности проверить. Что именно не работает? Авторизация проходит?

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

в 5.3 видимо удалили функцию rpcf_add_service_to_user
теперь надо использовать: rpcf_add_ip_slink_ex
причем в нее IP передается в виде строки (для совместимости с IPv6), а маска - в виде количества бит, т.е. например
-ip_address 10.1.2.3 -mask 32
Реализована у кого нибудь?

Аватара пользователя
hellard
Сообщения: 52
Зарегистрирован: Вт апр 05, 2005 05:59
Откуда: Абакан
Контактная информация:

Сообщение hellard »

---

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

Сообщение Cramac »

Присоединюсь к оратору выше, не могу запустить на 008.

в логах:

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

Info  &#58; Aug 24 17&#58;18&#58;11 f24f5b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Access granted to &#91;SSL&#93;<init@127.0.0.1> &#40;UID&#58; -1&#41;
?Debug &#58; Aug 24 17&#58;18&#58;11 f24f5b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; SSL type requested&#58; SSLv3&#40;2&#41;
 Info  &#58; Aug 24 17&#58;18&#58;11 f24f5b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Request for function <0x2030> not permitted
 Warn  &#58; Aug 24 17&#58;18&#58;11 f24f5b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Session closed
?Debug &#58; Aug 24 17&#58;18&#58;11 f24f5b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Session Key <93b2185277bca8bc3c595377c8565999> stored for UID -1 from <127.0.0.1>
 Warn  &#58; Aug 24 17&#58;18&#58;11 f2ff7b70 RPCConn&#91;SSL&#93;<test@127.0.0.1>&#58; Session closed
?Debug &#58; Aug 24 17&#58;18&#58;11 f24f5b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; SSL cleared
?Debug &#58; Aug 24 17&#58;18&#58;11 f24f5b70 StreamManager&#58; connection <6> closed
?Debug &#58; Aug 24 17&#58;18&#58;11 f24f5b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Session closed...
?Debug &#58; Aug 24 17&#58;18&#58;11 f2ff7b70 RPCConn&#91;SSL&#93;<test@127.0.0.1>&#58; Session Key <93b218520ac33a03cdffe5a460963980> stored for UID 1 from <127.0.0.1>
?Debug &#58; Aug 24 17&#58;18&#58;11 f2ff7b70 RPCConn&#91;SSL&#93;<test@127.0.0.1>&#58; SSL cleared
?Debug &#58; Aug 24 17&#58;18&#58;11 f2ff7b70 StreamManager&#58; connection <5> closed
?Debug &#58; Aug 24 17&#58;18&#58;11 f2ff7b70 RPCConn&#91;SSL&#93;<test@127.0.0.1>&#58; Session closed...
ключа на урфу нет....

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

Сообщение Cramac »

админские фенкции вроде пошли, а вот с пользовательскими никак...
пишет
Error calling function rpcf_user5_get_services
Error calling function rpcf_user5_payments_report

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

Сообщение Cramac »

прочитав тему, высмотрел что на x64 могут быть проблемы?

Внеся изменения как тут - viewtopic.php?p=57838&highlight=unpack#57838
теперь ругается по другому:

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

Notice&#58; Undefined offset&#58; 1 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 114

Warning&#58; unpack&#40;&#41;&#58; Type N&#58; not enough input, need 4, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 182

Notice&#58; Undefined offset&#58; 2 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 114

Warning&#58; unpack&#40;&#41;&#58; Type N&#58; not enough input, need 4, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 182

Notice&#58; Undefined offset&#58; 3 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 114

Warning&#58; unpack&#40;&#41;&#58; Type N&#58; not enough input, need 4, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 182

Notice&#58; Undefined offset&#58; 4 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 148

Notice&#58; Undefined offset&#58; 5 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 148

Notice&#58; Undefined offset&#58; 6 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 148

Notice&#58; Undefined offset&#58; 7 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 141

Warning&#58; unpack&#40;&#41;&#58; Type d&#58; not enough input, need 8, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 190

Notice&#58; Undefined offset&#58; 8 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 141

Warning&#58; unpack&#40;&#41;&#58; Type d&#58; not enough input, need 8, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 190
Array
&#40;
    &#91;count&#93; => 1
    &#91;services&#93; => Array
        &#40;
            &#91;0&#93; => Array
                &#40;
                    &#91;id&#93; => 
                    &#91;service_id&#93; => 
                    &#91;service_type&#93; => 
                    &#91;service_name&#93; => 
                    &#91;tariff_name&#93; => 
                    &#91;discount_period&#93; => 
                    &#91;cost&#93; => 0
                    &#91;discounted_in_curr_period&#93; => 0
                &#41;

        &#41;

&#41;
похоже это проблема в функции rpcf_user5_get_services (кол-во сервисов выводит правильное, но данных никаких)
попробовал другую(rpcf_user5_get_user_info), нормально отработала


П.С. В итоге не работают некоторые админские функции (rpcf_get_dhs_report) и некоторые пользовательские. Как исправить?

П.С.С. Перечитав первые страницы темы, вычитал и попробовав, получил такую рабочую функцию rpcf_get_dhs_report:

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

	function rpcf_get_dhs_report&#40;$param&#41; 
	   &#123; // 0x5015 
		  $ret=array&#40;&#41;; 
		  if &#40;!$this->connection->urfa_call&#40;0x5015&#41;&#41; 
		  &#123; 
			  print "Error calling function ". __FUNCTION__ ."\n"; 
			  return FALSE; 
		  &#125; 
		  $packet = $this->connection->getPacket&#40;&#41;; 
		  $packet->DataSetInt&#40; $param&#91;'user_id'&#93; &#41;; 
		  $packet->DataSetInt&#40; $param&#91;'account_id'&#93; &#41;; 
		  $packet->DataSetInt&#40; $param&#91;'apid'&#93; &#41;; 
		  $packet->DataSetInt&#40; $param&#91;'t_start'&#93; &#41;; 
		  $packet->DataSetInt&#40; $param&#91;'t_end'&#93; &#41;; 
		  $this->connection->urfa_send_param&#40;$packet&#41;; 
		  if &#40; $x = $this->connection->urfa_get_data&#40;&#41; &#41; 
		  &#123;
			 $ret&#91;'dhs_log_size'&#93; = $x->DataGetInt&#40;&#41;; 
			 for &#40; $i = 0; $i < $ret&#91;'dhs_log_size'&#93;; $i++ &#41; 
			 &#123; 
				 $ari = array&#40;&#41;;
				 $x = $this->connection->urfa_get_data&#40;&#41;; //была закоментирована в вики
				 $ari&#91;'id'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'account_id'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'slink_id'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'recv_date'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'last_update_date'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'Called_Station_Id'&#93; = $x->DataGetString&#40;&#41;; 
				 $ari&#91;'Calling_Station_Id'&#93; = $x->DataGetString&#40;&#41;; 
				 $ari&#91;'framed_ip'&#93; = $x->DataGetIPAddress&#40;&#41;; 
				 $ari&#91;'nas_port'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'acct_session_id'&#93; = $x->DataGetString&#40;&#41;; 
				 $ari&#91;'nas_port_type'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'uname'&#93; = $x->DataGetString&#40;&#41;; 
				 $ari&#91;'service_type'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'framed_protocol'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'nas_ip'&#93; = $x->DataGetIPAddress&#40;&#41;; 
				 $ari&#91;'nas_id'&#93; = $x->DataGetString&#40;&#41;; 
				 $ari&#91;'acct_status_type'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'acct_inp_pack'&#93; = $x->DataGetLong&#40;&#41;; 
				 $ari&#91;'acct_inp_oct'&#93; = $x->DataGetLong&#40;&#41;; 
				 $ari&#91;'acct_inp_giga'&#93; = $x->DataGetLong&#40;&#41;; 
				 $ari&#91;'acct_out_pack'&#93; = $x->DataGetLong&#40;&#41;; 
				 $ari&#91;'acct_out_oct'&#93; = $x->DataGetLong&#40;&#41;; 
				 $ari&#91;'acct_out_giga'&#93; = $x->DataGetLong&#40;&#41;; 
				 $ari&#91;'acct_sess_time'&#93; = $x->DataGetLong&#40;&#41;; 
				 $ari&#91;'acct_term_cause'&#93; = $x->DataGetInt&#40;&#41;; 
				 $ari&#91;'total_cost'&#93; = $x->DataGetDouble&#40;&#41;; 
				 $ret&#91;'dhs_log'&#93;&#91;&#93; = $ari; 
			 &#125; 
		  &#125; 
		  return $ret; 
	   &#125;
с rpcf_user5_get_services так же проблема решилась, раскоментировав
$x = $this->connection->urfa_get_data();
в цикле

функция rpcf_service_report заработала в таком виде:

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

	function rpcf_service_report&#40;$param&#41; &#123;  //0x3021
		$ret = array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;0x3021&#41;&#41; &#123; print "Error calling function ". __FUNCTION__ ."\n";return FALSE; &#125;
	 
		$packet=$this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40; $param&#91;'user_id'&#93; &#41;; 
		$packet->DataSetInt&#40; $param&#91;'account_id'&#93; &#41;; 
		$packet->DataSetInt&#40; $param&#91;'group_id'&#93; &#41;; 
		$packet->DataSetInt&#40; $param&#91;'apid'&#93; &#41;; 
		$packet->DataSetInt&#40; $param&#91;'time_start'&#93; &#41;; 
		$packet->DataSetInt&#40; $param&#91;'time_end'&#93; &#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;'full_name'&#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;; 
				&#125; 
				$ret&#91;'services'&#93;&#91;&#93;=$services; 
			&#125; 
		&#125;
		return $ret;
	&#125;

ctyz
Сообщения: 30
Зарегистрирован: Пн фев 09, 2009 11:24

Сообщение ctyz »

может кому пригодится новые функции для 5.3

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

function rpcf_add_periodic_service_link_ex&#40;$service&#41; &#123; //0x2930
		$ret = array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;0x2930&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
                if&#40;!isset&#40;$service&#91;'tariff_link_id'&#93;&#41;&#41; $service&#91;'tariff_link_id'&#93; = 0;
		if&#40;!isset&#40;$service&#91;'start_date'&#93;&#41;&#41; $service&#91;'start_date'&#93; = time&#40;&#41;;
		if&#40;!isset&#40;$service&#91;'expire_date'&#93;&#41;&#41;	$service&#91;'expire_date'&#93; = 2000000000;
		if&#40;!isset&#40;$service&#91;'cost_coef'&#93;&#41;&#41; $service&#91;'cost_coef'&#93; = 1;
		if&#40;!isset&#40;$service&#91;'unabon'&#93;&#41;&#41; $service&#91;'unabon'&#93; = 0;

		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$service&#91;'user_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'account_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'service_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'tariff_link_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'discount_period_id'&#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;'unabon'&#93;&#41;;
		$packet->DataSetDouble&#40;$service&#91;'cost_coef'&#93;&#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;;
		&#125;else&#123;
			$ret&#91;'slink_id'&#93; = -1;
		&#125;
		return $ret;
	&#125;

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

function rpcf_add_dialup_service_link_ex&#40;$service&#41; &#123; //0x2924
		$ret = array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;0x2924&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;

		if&#40;!isset&#40;$service&#91;'callback_enabled'&#93;&#41;&#41; $service&#91;'callback_enabled'&#93; = 3;
		if&#40;!isset&#40;$service&#91;'tariff_link_id'&#93;&#41;&#41; $service&#91;'tariff_link_id'&#93; = 0;
		if&#40;!isset&#40;$service&#91;'start_date'&#93;&#41;&#41; $service&#91;'start_date'&#93; = time&#40;&#41;;
		if&#40;!isset&#40;$service&#91;'cost_coef'&#93;&#41;&#41; $service&#91;'cost_coef'&#93; = 1;		
		if&#40;!isset&#40;$service&#91;'expire_date'&#93;&#41;&#41; $service&#91;'expire_date'&#93; = 2000000000;
		if&#40;!isset&#40;$service&#91;'unabon'&#93;&#41;&#41; $service&#91;'unabon'&#93; = 0;
		if&#40;!isset&#40;$service&#91;'dialup_allowed_csid'&#93;&#41;&#41; $service&#91;'dialup_allowed_csid'&#93; = '';

		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$service&#91;'user_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'account_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'service_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'tariff_link_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'discount_period_id'&#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;'unabon'&#93;&#41;;
		$packet->DataSetDouble&#40;$service&#91;'cost_coef'&#93;&#41;;
		$packet->DataSetString&#40;$service&#91;'dialup_login'&#93;&#41;;
		$packet->DataSetString&#40;$service&#91;'dialup_password'&#93;&#41;;
		$packet->DataSetString&#40;$service&#91;'dialup_allowed_cid'&#93;&#41;;
		$packet->DataSetString&#40;$service&#91;'dialup_allowed_csid'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'callback_enabled'&#93;&#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;;
		&#125;else&#123;
			$ret&#91;'slink_id'&#93; = -1;
		&#125;
		return $ret;
	&#125;

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

function rpcf_add_ip_slink_ex&#40;$service&#41; &#123; //0x2928
		$ret = array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;0x2928&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		
		if&#40;!isset&#40;$service&#91;'tariff_link_id'&#93;&#41;&#41; $service&#91;'tariff_link_id'&#93; = 0;
		if&#40;!isset&#40;$service&#91;'start_date'&#93;&#41;&#41; $service&#91;'start_date'&#93; = time&#40;&#41;;
		if&#40;!isset&#40;$service&#91;'expire_date'&#93;&#41;&#41;	$service&#91;'expire_date'&#93; = 2000000000;
		if&#40;!isset&#40;$service&#91;'unabon'&#93;&#41;&#41; $service&#91;'unabon'&#93; = 0;
		if&#40;!isset&#40;$service&#91;'unprepay'&#93;&#41;&#41; $service&#91;'unprepay'&#93; = 0;
		
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$service&#91;'user_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'account_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'service_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'tariff_link_id'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'discount_period_id'&#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;'unabon'&#93;&#41;;
		$packet->DataSetInt&#40;$service&#91;'unprepay'&#93;&#41;;

		$ip_groups_count = count&#40;$service&#91;'ip_groups'&#93;&#41;;
		$packet->DataSetInt&#40;$ip_groups_count&#41;;
		for&#40;$i=0;$i<$ip_groups_count;$i++&#41; &#123;
			$packet->DataSetIPAddress&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'ip_address'&#93;&#41;;
			$packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'mask'&#93;&#41;;
			$packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'mac'&#93;&#41;;
			$packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'iptraffic_login'&#93;&#41;;
			$packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'iptraffic_allowed_cid'&#93;&#41;;
			$packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'iptraffic_password'&#93;&#41;;
			$packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'ip_not_vpn'&#93;&#41;;
			$packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'dont_use_fw'&#93;&#41;;
			$packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'router_id'&#93;&#41;;
		&#125;
		$quotas_count = count&#40;$service&#91;'quotas'&#93;&#41;;
		$packet->DataSetInt&#40;count&#40;$service&#91;'quotas'&#93;&#41;&#41;;
		for&#40;$i=0;$i<$quotas_count;$i++&#41; &#123;
			$packet->DataSetInt&#40;$service&#91;'quotas'&#93;&#91;$i&#93;&#91;'tclass_id'&#93;&#41;;
			$packet->DataSetLong&#40;$service&#91;'quotas'&#93;&#91;$i&#93;&#91;'quota'&#93;&#41;;
		&#125;

		$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;;
		&#125;else&#123;
			$ret&#91;'slink_id'&#93; = -1;
		&#125;
		return $ret;
	&#125;
Последний раз редактировалось ctyz Пт сен 06, 2013 12:51, всего редактировалось 2 раза.

ctyz
Сообщения: 30
Зарегистрирован: Пн фев 09, 2009 11:24

Сообщение ctyz »

ds писал(а):
kirush писал(а):Проверял ли кто нибудь urfaphp на ядре 5.3? Как то он не очень хочет работать.
Пока не было возможности проверить. Что именно не работает? Авторизация проходит?
в 5.3 в некотрых функциях поменяли параметры, некоторые удалили и заменили новыми, а описание из в api.xml нет.

ctyz
Сообщения: 30
Зарегистрирован: Пн фев 09, 2009 11:24

Сообщение ctyz »

немогу побороть функцию
"0x292c" rpcf_add_iptraffic_service_link_ipv6

как мне кажется парамертр <ip_address name="ip" array_index="i"/>
нужно перевавать как-то иначе, DataSetIPAddress не проходит.

Если кто вкурсе как, помогите.

Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

биллинг 5.2.1-006
Есть несколько абонентов, у которых из-за направильно созданного тарифного плана, при переходе на другой тарифный план, нет периодической услуги списания абон платы.
При помощи урфа-пхп это можно исправить, но я не знаю как.
Есть ли инструкция поэтапная, как это сделать?
Если кто сможет помочь в этом вопросе, пишите в alex_us@mail.primorye.ru.
Я ваши услуги оплачу.

polv
Сообщения: 8
Зарегистрирован: Вт окт 05, 2010 06:49

Сообщение polv »

Добрый день или вечер. Подскажите какой функцией можно поставить галочку безлимитного режима абоненту? Надо группе абонентов поставить галочку на один день а потом её снять. В ручную это будет долго и муторно.

ctyz
Сообщения: 30
Зарегистрирован: Пн фев 09, 2009 11:24

Сообщение ctyz »

в биллинге UTM5 update3 удалили старые функции rpcf_edit_ip_slink_ex земенив их новыми

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

rpcf_edit_iptraffic_service_link_ipv6 //0x292d
проблема что как-то по новому стал передаватся ip адресс в ядро, помогите решить или подскажите где посмотреть.

вот кусок кода из utm_admin.jar

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

 public void putIpAddress&#40;InetAddress paramInetAddress&#41;
    throws UrfaInvocationException
  &#123;
    if &#40;this.state != 0&#41;
    &#123;
      logger.error&#40;"putIpAddress&#58; state not NOT_INVOKED"&#41;;
      throw new UrfaInvocationException&#40;"Illegal invocation state"&#41;;
    &#125;
    Attribute localAttribute;
    try
    &#123;
      localAttribute = this.connection.newAttribute&#40;5&#41;;
      byte&#91;&#93; arrayOfByte1 = paramInetAddress.getAddress&#40;&#41;;
      byte&#91;&#93; arrayOfByte2 = new byte&#91;arrayOfByte1.length + 1&#93;;
      for &#40;int i = 1; i < arrayOfByte2.length; i++&#41;
        arrayOfByte2&#91;i&#93; = arrayOfByte1&#91;&#40;i - 1&#41;&#93;;
      if &#40;&#40;paramInetAddress instanceof Inet4Address&#41;&#41;
        arrayOfByte2&#91;0&#93; = 4;
      else if &#40;&#40;paramInetAddress instanceof Inet6Address&#41;&#41;
        arrayOfByte2&#91;0&#93; = 6;
      localAttribute.putByteArray&#40;arrayOfByte2&#41;;
    &#125;
    catch &#40;UrfaException localUrfaException&#41;
    &#123;
      logger.error&#40;"putIpAddress&#58; failed"&#41;;
      throw new UrfaInvocationException&#40;"putIpAddress failed", localUrfaException&#41;;
    &#125;
    putAttribute&#40;localAttribute&#41;;
  &#125;
может кто знающий поможет, как праильно переделать передачу в ядро

Ответить