urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
bobr
Сообщения: 29
Зарегистрирован: Ср июл 18, 2007 11:09

Сообщение bobr »

О_о вуду :) хз даж, может и не успевает, хотя закрытие соединения вызывается в URFAClient_Connection::__destruct() и должно срабатывать .. хз

когда делаешь

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

$urfa_user5 = $urfa_admin->getURFAClient_User5("login", "password");
то возвращается новый объект с новым сокетом, тоесть получается уже 2 соединения которые можно юзать одновременно. Можно без этого сразуже делать new URFAClient_User5, если ненужны админские ф-ии.

Wishmaster
Сообщения: 309
Зарегистрирован: Сб апр 16, 2005 11:44

Сообщение Wishmaster »

В общем, будем наблюдать дальше. :-)

А пока - еще вопросик.
Сделал функцию:

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

	function rpcf_search_users_light($login="%",$email="%",$fname="%") { //0x1202
		$ret=array();
		if (!$this->connection->urfa_call(0x1202)) {
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		}
		$packet = $this->connection->getPacket();
		$packet->DataSetString($login);
		$packet->DataSetString($email);
		$packet->DataSetString($fname);
		$this->connection->urfa_send_param($packet);
		if ($x = $this->connection->urfa_get_data()){
			$ret['success'] = $x->DataGetInt();
			$ret['total'] = $x->DataGetInt();
			$ret['show_count'] = $x->DataGetInt();
			if($ret['show_count']>0){
				for&#40;$i=0;$i<=$ret&#91;'show_count'&#93;-1;$i++&#41;&#123;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'id'&#93;= $x->DataGetInt&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'login'&#93;= $x->DataGetString&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'email'&#93;= $x->DataGetString&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'fname'&#93;= $x->DataGetString&#40;&#41;;
				&#125;
			&#125;

			$this->connection->urfa_get_data&#40;&#41;;
		&#125;
		return $ret;
	&#125;


 /*
  <function name="rpcf_search_users_ligth" id="0x1202">
    <input>
      <string name="login" />
      <string name="email" />
      <string name="fname" />
    </input>
    <output>
      <integer name="success" />
      <integer name="total" />
      <integer name="show_count" />
      <if variable="show_count" value="0" condition="ne">
        <for name="i" from="0" count="show_count">
          <integer name="id" array_index="i" />
          <string name="login" array_index="i" />
          <string name="email" array_index="i" />
          <string name="name" array_index="i" />
        </for>
      </if>
    </output>
  </function>
*/
Но, почему-то, если находит юзера(ов) выдает такую ошибку:

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

Notice&#58; Undefined offset&#58; 3 in /usr/local/www/apache22/data/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 /usr/local/www/apache22/data/urfa/URFAClient_Packet.php on line 169

Notice&#58; Undefined offset&#58; 4 in /usr/local/www/apache22/data/urfa/URFAClient_Packet.php on line 138

Notice&#58; Undefined offset&#58; 5 in /usr/local/www/apache22/data/urfa/URFAClient_Packet.php on line 138

Notice&#58; Undefined offset&#58; 6 in /usr/local/www/apache22/data/urfa/URFAClient_Packet.php on line 138
Array &#40; &#91;success&#93; => 0 &#91;total&#93; => 1 &#91;show_count&#93; => 1 &#91;list&#93; => Array &#40; &#91;1&#93; => Array &#40; &#91;id&#93; => &#91;login&#93; => &#91;email&#93; => &#91;fname&#93; => &#41; &#41; &#41;
если не находит, то не выдает. Просто возвращает массив:
Array ( [success] => 0 [total] => 0 [show_count] => 0 )

Вроде все перепроверил, но непонятно. Может недоглядел чего. Посмотрите плиз, свежим взглядом..

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

Сообщение ds »

если не находит, то не выдает. Просто возвращает массив:
Array ( [success] => 0 [total] => 0 [show_count] => 0 )

Вроде все перепроверил, но непонятно. Может недоглядел чего. Посмотрите плиз, свежим взглядом..
Не хватает где то вызова urfa_get_data(), скорее всего внутри for. Поставь сразу после {

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

$x = $this->connection->urfa_get_data&#40;&#41;

Wishmaster
Сообщения: 309
Зарегистрирован: Сб апр 16, 2005 11:44

Сообщение Wishmaster »

ds писал(а):
если не находит, то не выдает. Просто возвращает массив:
Array ( [success] => 0 [total] => 0 [show_count] => 0 )

Вроде все перепроверил, но непонятно. Может недоглядел чего. Посмотрите плиз, свежим взглядом..
Не хватает где то вызова urfa_get_data(), скорее всего внутри for. Поставь сразу после {

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

$x = $this->connection->urfa_get_data&#40;&#41;
Спасибо! Проблема решилась!

Может, кому пригодится, рабочий вариант.

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

	function rpcf_search_users_light&#40;$login="%",$email="%",$fname="%"&#41; &#123; //0x1202
		$ret=array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;0x1202&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetString&#40;$login&#41;;
		$packet->DataSetString&#40;$email&#41;;
		$packet->DataSetString&#40;$fname&#41;;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41;&#123;
			$ret&#91;'success'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'total'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'show_count'&#93; = $x->DataGetInt&#40;&#41;;
			if&#40;$ret&#91;'show_count'&#93;>0&#41;&#123;
				for&#40;$i=0;$i<=$ret&#91;'show_count'&#93;-1;$i++&#41;&#123;
					$x = $this->connection->urfa_get_data&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'id'&#93;= $x->DataGetInt&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'login'&#93;= $x->DataGetString&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'email'&#93;= $x->DataGetString&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'fname'&#93;= $x->DataGetString&#40;&#41;;
				&#125;

			&#125;

			$this->connection->urfa_get_data&#40;&#41;;
		&#125;
		return $ret;
	&#125;


bobr
Сообщения: 29
Зарегистрирован: Ср июл 18, 2007 11:09

Сообщение bobr »

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

rpcf_search_users_ligth
фигасе .. куда я смотрел, когда серши искал внутри api.xml .. пропустил совсем, какраз хорошая ф-я, респект!

Wishmaster
Сообщения: 309
Зарегистрирован: Сб апр 16, 2005 11:44

Сообщение Wishmaster »

Еще есть интересная идея. Раньше в админке была возможность выполнить SQL запрос на базе посредством ядра. Интересно, планирует ли нетап внедрить похожую функцию, которая бы позволяла выполнить пользовательские запросы через урфа. Это было бы очень удобно, когда например, используется костыль с дополнительными таблицами и нештатными функциями ядра.

Тогда не нужно было бы создавать дополнительный коннект к базе, и т.д.

Wishmaster
Сообщения: 309
Зарегистрирован: Сб апр 16, 2005 11:44

Сообщение Wishmaster »

Добавил еще одну полезную функцию:

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

	function rpcf_user5_get_services_info&#40;$slink_id&#41; &#123; //-0x4024
		$ret=array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;-0x4024&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$slink_id&#41;;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		$x = $this->connection->urfa_get_data&#40;&#41;;
		$ret&#91;'service_type'&#93;=$x->DataGetInt&#40;&#41;;
		$ret&#91;'service_id'&#93;=$x->DataGetInt&#40;&#41;;
		$ret&#91;'service_name'&#93;=$x->DataGetString&#40;&#41;;
		$ret&#91;'tariff_id'&#93;=$x->DataGetInt&#40;&#41;;
		$ret&#91;'discounted_in_curr_period'&#93;=$x->DataGetDouble&#40;&#41;;
		$ret&#91;'cost'&#93;=$x->DataGetDouble&#40;&#41;;
		$x = $this->connection->urfa_get_data&#40;&#41;;
		switch &#40;$ret&#91;'service_type'&#93;&#41;&#123;
			case "3"&#58;
				$ret&#91;'bytes_in_mbyte'&#93;=$x->DataGetInt&#40;&#41;;
				$ret&#91;'iptsl_downloaded_size'&#93;=$x->DataGetInt&#40;&#41;;
				for &#40;$i=0;$i<=$ret&#91;'iptsl_downloaded_size'&#93;-1;$i++&#41;&#123;
					$x = $this->connection->urfa_get_data&#40;&#41;;
					$ret&#91;'iptsl_downloaded_size_list'&#93;&#91;$i&#93;&#91;'tclass'&#93;=$x->DataGetString&#40;&#41;;
					$ret&#91;'iptsl_downloaded_size_list'&#93;&#91;$i&#93;&#91;'downloaded'&#93;=$x->DataGetLong&#40;&#41;;
				&#125;
				$x = $this->connection->urfa_get_data&#40;&#41;;
				$ret&#91;'iptsl_old_prepaid_size'&#93;=$x->DataGetInt&#40;&#41;;
				for &#40;$i=0;$i<=$ret&#91;'iptsl_old_prepaid_size'&#93;-1;$i++&#41;&#123;
					$x = $this->connection->urfa_get_data&#40;&#41;;
					$ret&#91;'iptsl_old_prepaid_size_list'&#93;&#91;$i&#93;&#91;'tclass'&#93;=$x->DataGetString&#40;&#41;;
					$ret&#91;'iptsl_old_prepaid_size_list'&#93;&#91;$i&#93;&#91;'downloaded'&#93;=$x->DataGetLong&#40;&#41;;
				&#125;
				$x = $this->connection->urfa_get_data&#40;&#41;;
				$ret&#91;'ipgroup_size'&#93;=$x->DataGetInt&#40;&#41;;
				for &#40;$i=0;$i<=$ret&#91;'ipgroup_size'&#93;-1;$i++&#41;&#123;
					$x = $this->connection->urfa_get_data&#40;&#41;;
					$ret&#91;'ipgroup_size_list'&#93;&#91;$i&#93;&#91;'item_id'&#93;=$x->DataGetInt&#40;&#41;;
					$ret&#91;'ipgroup_size_list'&#93;&#91;$i&#93;&#91;'ip'&#93;=$x->DataGetIPAddress&#40;&#41;;
					$ret&#91;'ipgroup_size_list'&#93;&#91;$i&#93;&#91;'mask'&#93;=$x->DataGetIPAddress&#40;&#41;;
					$ret&#91;'ipgroup_size_list'&#93;&#91;$i&#93;&#91;'login'&#93;=$x->DataGetString&#40;&#41;;
				&#125;
				$x = $this->connection->urfa_get_data&#40;&#41;;
				$ret&#91;'iptsd_borders_size'&#93;=$x->DataGetInt&#40;&#41;;
				for &#40;$i=0;$i<=$ret&#91;'iptsd_borders_size'&#93;-1;$i++&#41;&#123;
					$x = $this->connection->urfa_get_data&#40;&#41;;
					$ret&#91;'iptsd_borders_size_list'&#93;&#91;$i&#93;&#91;'tclass_name'&#93;=$x->DataGetString&#40;&#41;;
					$ret&#91;'iptsd_borders_size_list'&#93;&#91;$i&#93;&#91;'bytes'&#93;=$x->DataGetLong&#40;&#41;;
					$ret&#91;'iptsd_borders_size_list'&#93;&#91;$i&#93;&#91;'cost1'&#93;=$x->DataGetDouble&#40;&#41;;
					$ret&#91;'iptsd_borders_size_list'&#93;&#91;$i&#93;&#91;'group_type'&#93;=$x->DataGetInt&#40;&#41;;
				&#125;
				$x = $this->connection->urfa_get_data&#40;&#41;;
				$ret&#91;'iptsd_prepaid_size'&#93;=$x->DataGetInt&#40;&#41;;
				for &#40;$i=0;$i<=$ret&#91;'iptsd_prepaid_size'&#93;-1;$i++&#41;&#123;
					$x = $this->connection->urfa_get_data&#40;&#41;;
					$ret&#91;'iptsd_prepaid_size_list'&#93;&#91;$i&#93;&#91;'tclass_name_p'&#93;=$x->DataGetString&#40;&#41;;
					$ret&#91;'iptsd_prepaid_size_list'&#93;&#91;$i&#93;&#91;'prepaid_p'&#93;=$x->DataGetLong&#40;&#41;;
				&#125;
			break;
			case "6"&#58;
				$ret&#91;'tsl_numbers_size'&#93;=$x->DataGetInt&#40;&#41;;
				for &#40;$i=0;$i<=$ret&#91;'tsl_numbers_size'&#93;-1;$i++&#41;&#123;
					$x = $this->connection->urfa_get_data&#40;&#41;;
					$ret&#91;'tsl_numbers_size_list'&#93;&#91;$i&#93;&#91;'number'&#93;=$x->DataGetString&#40;&#41;;
					$ret&#91;'tsl_numbers_size_list'&#93;&#91;$i&#93;&#91;'login'&#93;=$x->DataGetString&#40;&#41;;
					$ret&#91;'tsl_numbers_size_list'&#93;&#91;$i&#93;&#91;'allowed_cid'&#93;=$x->DataGetString&#40;&#41;;
					$ret&#91;'tsl_numbers_size_list'&#93;&#91;$i&#93;&#91;'item_id'&#93;=$x->DataGetInt&#40;&#41;;
				&#125;
			break;
			default&#58;
				$ret&#91;'null_param'&#93;=$x->DataGetInt&#40;&#41;;
			break;
		&#125;
		$this->connection->urfa_get_data&#40;&#41;;
		return $ret;
	&#125;


Wishmaster
Сообщения: 309
Зарегистрирован: Сб апр 16, 2005 11:44

Сообщение Wishmaster »

Wishmaster писал(а):
Может, кому пригодится, рабочий вариант.

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

	function rpcf_search_users_light&#40;$login="%",$email="%",$fname="%"&#41; &#123; //0x1202
		$ret=array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;0x1202&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetString&#40;$login&#41;;
		$packet->DataSetString&#40;$email&#41;;
		$packet->DataSetString&#40;$fname&#41;;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41;&#123;
			$ret&#91;'success'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'total'&#93; = $x->DataGetInt&#40;&#41;;
			$ret&#91;'show_count'&#93; = $x->DataGetInt&#40;&#41;;
			if&#40;$ret&#91;'show_count'&#93;>0&#41;&#123;
				for&#40;$i=0;$i<=$ret&#91;'show_count'&#93;-1;$i++&#41;&#123;
					$x = $this->connection->urfa_get_data&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'id'&#93;= $x->DataGetInt&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'login'&#93;= $x->DataGetString&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'email'&#93;= $x->DataGetString&#40;&#41;;
					$ret&#91;'list'&#93;&#91;$i&#93;&#91;'fname'&#93;= $x->DataGetString&#40;&#41;;
				&#125;

			&#125;

			$this->connection->urfa_get_data&#40;&#41;;
		&#125;
		return $ret;
	&#125;

Замечание: у меня на другом сервере с биллингом версии

Version:5.2.1-006-update1-bsd7

эта функция НЕ работает. Она отрабатывается, но никаких результатов не возвращает. На update7 все ровно.

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

Сообщение ds »

эта функция НЕ работает. Она отрабатывается, но никаких результатов не возвращает. На update7 все ровно.
Может ее там просто еще нет? В моем api.xml ее нет: Version:5.2.1-006-release-debian. А в дебаге что?

Wishmaster
Сообщения: 309
Зарегистрирован: Сб апр 16, 2005 11:44

Сообщение Wishmaster »

ds писал(а):
эта функция НЕ работает. Она отрабатывается, но никаких результатов не возвращает. На update7 все ровно.
Может ее там просто еще нет? В моем api.xml ее нет: Version:5.2.1-006-release-debian. А в дебаге что?
в дебаге все пристойно... вроде..

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

core# tail -f ./debug.log |grep 'urfa@192.168.1.56'
 Info  &#58; Jan 17 23&#58;02&#58;01 RPCConn&#58; Card user <urfa@192.168.1.56> is connecting
 Info  &#58; Jan 17 23&#58;02&#58;01 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Access granted to &#91;SSL&#93;<urfa@192.168.1.56> &#40;UID&#58; -39&#41;
?Debug &#58; Jan 17 23&#58;02&#58;01 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; SSL type requested&#58; SSLv3&#40;2&#41;
?Debug &#58; Jan 17 23&#58;02&#58;01 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Call&#58; 0x1202 &#40;rpcf_search_users_lite&#41;
?Debug &#58; Jan 17 23&#58;02&#58;01 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Real Call&#58; 0x1202 &#40;rpcf_search_users_lite&#41;
?Debug &#58; Jan 17 23&#58;02&#58;02 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Call 0x1202 &#40;rpcf_search_users_lite&#41; finished...
?Debug &#58; Jan 17 23&#58;02&#58;02 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Stream cleared
?Debug &#58; Jan 17 23&#58;02&#58;03 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Call&#58; 0x2006 &#40;rpcf_get_userinfo&#41;
?Debug &#58; Jan 17 23&#58;02&#58;03 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Real Call&#58; 0x2006 &#40;rpcf_get_userinfo&#41;
?Debug &#58; Jan 17 23&#58;02&#58;03 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Call 0x2006 &#40;rpcf_get_userinfo&#41; finished...
?Debug &#58; Jan 17 23&#58;02&#58;03 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Stream cleared
 Warn  &#58; Jan 17 23&#58;02&#58;08 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Session closed
?Debug &#58; Jan 17 23&#58;02&#58;08 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Session stored for UID -39 from <192.168.1.56>
?Debug &#58; Jan 17 23&#58;02&#58;08 RPCConn&#91;SSL&#93;<urfa@192.168.1.56>&#58; Session closed...

Просьба к тем, у кого куплен урфа-клиент и проплачена техподдержка. Если не затруднит, выяснить в хотлайне, какими функциями обеспечивается авторизация абонента в штатной Веб-морде?
upd: Это уже не надо. Разобрался.

Wishmaster
Сообщения: 309
Зарегистрирован: Сб апр 16, 2005 11:44

Сообщение Wishmaster »

Написал функцию, но возникла проблемка.

в таком виде, вызов функции вешает apache. В логах апача ничего, в логах биллинга тоже.

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

		function rpcf_user5_payments_report&#40;$start_date,$end_date&#41; &#123; //-0x4012
		$ret=array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;-0x4012&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$start_date&#41;;
		$packet->DataSetInt&#40;$end_date&#41;;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		$x = $this->connection->urfa_get_data&#40;&#41;;
		$ret&#91;'account_id'&#93;=$x->DataGetInt&#40;&#41;;
		$ret&#91;'atr_size'&#93;=$x->DataGetInt&#40;&#41;;
		$this->connection->urfa_get_data&#40;&#41;;
		for &#40;$i=0;$i<$ret&#91;'atr_size'&#93;;$i++&#41; &#123;
			$x = $this->connection->urfa_get_data&#40;&#41;;
			$payment&#91;'actual_date'&#93; = $x->DataGetInt&#40;&#41;;
			$payment&#91;'payment_enter_date'&#93; = $x->DataGetInt&#40;&#41;;
			$payment&#91;'payment'&#93; = $x->DataGetDouble&#40;&#41;;
			$payment&#91;'payment_incurrency'&#93; = $x->DataGetDouble&#40;&#41;;
			$payment&#91;'currency_id'&#93; = $x->DataGetInt&#40;&#41;;
			$payment&#91;'payment_method_id'&#93; = $x->DataGetInt&#40;&#41;;
			$payment&#91;'payment_method'&#93; = $x->DataGetString&#40;&#41;;
			$payment&#91;'comment'&#93; = $x->DataGetString&#40;&#41;;
			$ret&#91;'payment'&#93;&#91;&#93;=$payment;
		&#125;
		$this->connection->urfa_get_data&#40;&#41;;
		return $ret;
	&#125;
а в таком виде :

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

		function rpcf_user5_payments_report&#40;$start_date,$end_date&#41; &#123; //-0x4012
		$ret=array&#40;&#41;;
		if &#40;!$this->connection->urfa_call&#40;-0x4012&#41;&#41; &#123;
			print "Error calling function ". __FUNCTION__ ."\n";
			return FALSE;
		&#125;
		$packet = $this->connection->getPacket&#40;&#41;;
		$packet->DataSetInt&#40;$start_date&#41;;
		$packet->DataSetInt&#40;$end_date&#41;;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		$x = $this->connection->urfa_get_data&#40;&#41;;
		$ret&#91;'account_id'&#93;=$x->DataGetInt&#40;&#41;;
		$ret&#91;'atr_size'&#93;=$x->DataGetInt&#40;&#41;;
		//$this->connection->urfa_get_data&#40;&#41;;
		for &#40;$i=0;$i<$ret&#91;'atr_size'&#93;;$i++&#41; &#123;
			$x = $this->connection->urfa_get_data&#40;&#41;;
			$payment&#91;'actual_date'&#93; = $x->DataGetInt&#40;&#41;; //строка 256 - это тут.
			$payment&#91;'payment_enter_date'&#93; = $x->DataGetInt&#40;&#41;;
			$payment&#91;'payment'&#93; = $x->DataGetDouble&#40;&#41;;
			$payment&#91;'payment_incurrency'&#93; = $x->DataGetDouble&#40;&#41;;
			$payment&#91;'currency_id'&#93; = $x->DataGetInt&#40;&#41;;
			$payment&#91;'payment_method_id'&#93; = $x->DataGetInt&#40;&#41;;
			$payment&#91;'payment_method'&#93; = $x->DataGetString&#40;&#41;;
			$payment&#91;'comment'&#93; = $x->DataGetString&#40;&#41;;
			$ret&#91;'payment'&#93;&#91;&#93;=$payment;
		&#125;
		$this->connection->urfa_get_data&#40;&#41;;
		return $ret;
	&#125;
выдает ошибку:

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

Fatal error&#58; Call to a member function DataGetInt&#40;&#41; on a non-object in /usr/local/www/apache22/data/urfa/URFAClient_User5.php on line 256
Проверьте плиз. Может где-то накосячил, но не вижу..

dwemer
Сообщения: 276
Зарегистрирован: Чт янв 25, 2007 05:59

Сообщение dwemer »

у меня клиент не работает на
freebsd 6.1 Release
PHP 5.2.6 with Suhosin-Patch 0.9.6.2
виснет на вызове fread (строка 42 в packet.php) при попытке залогиниться

на другом сервере с фрибсд 7.1 все в порядке

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

Сообщение Kayfolom »

bobr, может $address = "127.0.0.1" и $port = "11758" не зашивать в класс, а перенести в параметры конструкторов?

Изменение "$ssl = true" на "$ssl = false" в URFAClient.php не оказывает влияния на URFAClient_User5("user", "pass"), клиент коннектиться с ssl. пришлось еще править строку public function getURFAClient_User5($login, $pass, $ssl = true) в URFAClient_Admin.php.

На винде, PHP Version 5.1.4, эксепшины отловить так и не смог (возможно из за коннекта без ssl? ), не знаю даже в чем дело.

На линуксе, PHP Version 5.2.8, эксепшины ловит на ура. Но такая платформо/версия-зависимость не радует, при смене того или другого, все написанное работать перестанет с большой долей вероятности.
Может я все же ошибаюсь? Как заставить работать на 100%?

Честно говоря классический метод вывода ошибок как то внятнее.

Wishmaster
Сообщения: 309
Зарегистрирован: Сб апр 16, 2005 11:44

Сообщение Wishmaster »

Короче, вот такая ситуация:

функция

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

     function rpcf_user5_payments_report&#40;$start_date,$end_date&#41; &#123; //-0x4012 
      $ret=array&#40;&#41;; 
      if &#40;!$this->connection->urfa_call&#40;-0x4012&#41;&#41; &#123; 
         print "Error calling function ". __FUNCTION__ ."\n"; 
         return FALSE; 
      &#125; 
      $packet = $this->connection->getPacket&#40;&#41;; 
      $packet->DataSetInt&#40;$start_date&#41;; 
      $packet->DataSetInt&#40;$end_date&#41;; 
      $this->connection->urfa_send_param&#40;$packet&#41;; 
      $x = $this->connection->urfa_get_data&#40;&#41;; 
      $ret&#91;'account_id'&#93;=$x->DataGetInt&#40;&#41;; 
      $ret&#91;'atr_size'&#93;=$x->DataGetInt&#40;&#41;; 
      $this->connection->urfa_get_data&#40;&#41;; 
      for &#40;$i=0;$i<$ret&#91;'atr_size'&#93;;$i++&#41; &#123; 
         $x = $this->connection->urfa_get_data&#40;&#41;; 
         $payment&#91;'actual_date'&#93; = $x->DataGetInt&#40;&#41;; 
         $payment&#91;'payment_enter_date'&#93; = $x->DataGetInt&#40;&#41;; 
         $payment&#91;'payment'&#93; = $x->DataGetDouble&#40;&#41;; 
         $payment&#91;'payment_incurrency'&#93; = $x->DataGetDouble&#40;&#41;; 
         $payment&#91;'currency_id'&#93; = $x->DataGetInt&#40;&#41;; 
         $payment&#91;'payment_method_id'&#93; = $x->DataGetInt&#40;&#41;; 
         $payment&#91;'payment_method'&#93; = $x->DataGetString&#40;&#41;; 
         $payment&#91;'comment'&#93; = $x->DataGetString&#40;&#41;; 
         $ret&#91;'payment'&#93;&#91;&#93;=$payment; 
      &#125; 
      $this->connection->urfa_get_data&#40;&#41;; 
      return $ret; 
   &#125;

при вызове такой последовательности:

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

#!/usr/local/bin/php
<?


  require_once&#40;"./URFAClient.php"&#41;;
  $sf= new URFAClient_User5&#40;'testuser','123456789'&#41;;
 $reports_array=$sf->rpcf_user5_payments_report&#40;0,2000000000&#41;;

 print_r&#40;$reports_array&#41;;
?>
php висит и молчит:

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

qqq-ppp# ./phptest.sh
^C
qqq-ppp# ./phptest.sh

молчит до тех пор, пока сtrl+c не пошлешь.


лог UTM.

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

 Warn  &#58; Jan 18 08&#58;48&#58;28 RPCConn&#91;SSL&#93;<testuser@192.168.77.139>&#58; Session closed
?Debug &#58; Jan 18 08&#58;48&#58;28 RPCConn&#91;SSL&#93;<testuser@192.168.77.139>&#58; Session stored for UID 1009 from <192.168.77.139>
?Debug &#58; Jan 18 08&#58;48&#58;28 RPCConn&#91;SSL&#93;<testuser@192.168.77.139>&#58; Session closed...
 Info  &#58; Jan 18 08&#58;48&#58;28 RPCServer@0.0.0.0&#58; Client connecting&#58; 192.168.77.139&#58;54890
 Info  &#58; Jan 18 08&#58;48&#58;28 RPCConn&#58; Connection from&#58; 192.168.77.139&#58;54890
 Info  &#58; Jan 18 08&#58;48&#58;28 RPCConn&#58; Card user <testuser@192.168.77.139> is connecting
 Info  &#58; Jan 18 08&#58;48&#58;28 RPCConn&#91;SSL&#93;<testuser@192.168.77.139>&#58; Access granted to &#91;SSL&#93;<testuser@192.168.77.139> &#40;UID&#58; 1009&#41;
?Debug &#58; Jan 18 08&#58;48&#58;28 RPCConn&#91;SSL&#93;<testuser@192.168.77.139>&#58; SSL type requested&#58; SSLv3&#40;2&#41;
?Debug &#58; Jan 18 08&#58;48&#58;28 RPCConn&#91;SSL&#93;<testuser@192.168.77.139>&#58; Call&#58; 0xffffbfee &#40;__rpcs_user5_payments_report&#41;
?Debug &#58; Jan 18 08&#58;48&#58;28 RPCConn&#91;SSL&#93;<testuser@192.168.77.139>&#58; Real Call&#58; 0xffffbfee &#40;__rpcs_user5_payments_report&#41;
?Debug &#58; Jan 18 08&#58;48&#58;28 UTM5 DBA&#58; DBAccess instance created
?Debug &#58; Jan 18 08&#58;48&#58;28 DBA&#58;Ctx&#58; Looking for free context
?Debug &#58; Jan 18 08&#58;48&#58;29 DBCtx&#58; <679515136> SQL SELECT query&#58; SELECT id, name FROM payment_methods
?Debug &#58; Jan 18 08&#58;48&#58;29 DBCtx&#58; <679515136> SQL SELECT query&#58; SELECT id, payment_incurrency, currency_id, currency_rate, payment_absolute,actual_date, payment_enter_date, method, who_receive, comments_for_user,comments_for_admins, account_id, payment_ext_number FROM payment_transactions WHERE payment_enter_date>='0' AND payment_enter_date<='2000000000' AND account_id='1011' ORDER BY payment_enter_date DESC
?Debug &#58; Jan 18 08&#58;48&#58;29 DBA&#58;Ctx&#58; Pushing back free context
-Stats &#58; Jan 18 08&#58;48&#58;29 UTM5 DBA&#58;      Stats&#58; Uptime&#58; 00&#58;00&#58;01. Events&#58; 0; Errors&#58; 0
?Debug &#58; Jan 18 08&#58;48&#58;29 RPCConn&#91;SSL&#93;<testuser@192.168.77.139>&#58; Call 0xffffbfee &#40;__rpcs_user5_payments_report&#41; finished...
?Debug &#58; Jan 18 08&#58;48&#58;29 RPCConn&#91;SSL&#93;<testuser@192.168.77.139>&#58; Stream cleared
Очень надеюсь на помошь, так как данная функция очень нужна..

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

Сообщение ds »

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

$this->connection->urfa_get_data&#40;&#41;;
for &#40;$i=0;$i<$ret&#91;'atr_size'&#93;;$i++&#41; &#123;
         $x = $this->connection->urfa_get_data&#40;&#41;; 
До for и после for убери вызовы
$this->connection->urfa_get_data();

Ответить