urfaclient на php

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

Сообщение Kayfolom »

Нужна реализация функции <function name="rpcf_add_service_to_user" id="0x2551">
Сам не осилил :( Буду премного благодарен.

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

Сообщение Kayfolom »

Смена тарифа. Если возвращает 0, то ошибка.

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

function rpcf_link_user_tariff&#40;$user_id,$account_id=0,$tariff_current,$tariff_next=tariff_current,$discount_period_id,$tariff_link_id=0&#41; &#123; //0x3018
    $ret=array&#40;&#41;;
    if &#40;!urfa_call&#40;0x3018&#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_current&#41;;
    $packet->DataSetInt&#40;$tariff_next&#41;;
    $packet->DataSetInt&#40;$discount_period_id&#41;;
    $packet->DataSetInt&#40;$tariff_link_id&#41;;
    urfa_send_param&#40;$packet&#41;;
    if &#40;$x = urfa_get_data&#40;&#41;&#41; &#123;
        $ret&#91;tariff_link_id&#93;=$x->DataGetInt&#40;&#41;;
        urfa_get_data&#40;&#41;;
    &#125;
    return $ret;
&#125;
Блин. Не работает сволочь. Хотя в дебаглоге все пушисто.
Вру, в дебаге:
ERROR : Jan 26 16:39:05 DBAGlukError: __link_account_next_tariff: tariff not found
ERROR : Jan 26 16:39:05 DBAGlukError: [rpcf_link_user_tariff] __link_account_next_tariff: tariff not found

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

Сообщение ds »

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

rpcf_link_user_tariff&#40;$user_id,$account_id=0,$tariff_current,$tariff_next=tariff_current,$discount_period_id,$tariff_link_id=0&#41;
$tariff_next=tariff_current это неправильно. Надо так:

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

rpcf_link_user_tariff&#40;$user_id,$account_id=0,$tariff_current,$tariff_next,$discount_period_id,$tariff_link_id=0&#41;
Просто при вызове передавать $tariff_current и $tariff_next одинаковыми, если надо

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

Сообщение Kayfolom »

Заработало. Просто я вместо $tariff_link_id передавал ID связки ;)
Кстати с $tariff_next=tariff_current работает нормально.

Как я понимаю $account_id=0 это значение по умолчанию и значение можно не передавать? А как это в php сделать? Просто запятые поставить?

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

Сообщение ds »

Хорошо что работает :)

Ну да, значения по умолчанию можно пропускать. Просто запятые ставить и все. А если параметр по умолчанию последний (или последние), то их можно вообще не писать.

К сожалению пока не могу заниматься клиентом, думаю на неделе освобожусь, Переделать надо код немного, тогда ф-ции еще проще писать будет. Хочу сделать только один вызов $x = urfa_get_data() на всю ф-цию, тогда и отлаживать проще будет и xml парсить тоже.

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

Сообщение Kayfolom »

Ждем с нетерпением :) Я вот уже личный кабинет себе ваяю на базе твоего продукта. Наконецто сделал смену тарифа для пользователей - три года об этом мечтал ;)

Кстати xml может и не стоит делать, лишняя нагрузка на проц, ну или в качестве опции бы сделать - хочешь xml, хочешь в raw формате.

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

Сообщение Chrst »

Народ! Поделитесь api.xml, кому сколько не жалко на chrst(a)lekks.ru. Сами мы не местные... :D

AcDix
Сообщения: 2
Зарегистрирован: Вт янв 27, 2009 13:37

Сообщение AcDix »

Написал костыль - реализацию учета трафика по фактическому объему, скрипт отрабатывает 1го контрагента в выборке, на следующем выдает ошибку:

Error calling function rpcf_add_once_service
Error calling function rpcf_add_once_service_to_user

в дебаге:
?Debug : Jan 27 14:12:31 RPCConn[SSL]<web_1c@192.168.99.9>: Call: 0x2555 (rpcf_add_once_service_to_user)
?Debug : Jan 27 14:12:31 RPCConn[SSL]<web_1c@192.168.99.9>: Real Call: 0x2555 (rpcf_add_once_service_to_user)
?Debug : Jan 27 14:12:31 DBCtx: <146141720> SQL query: INSERT INTO service_links(user_id,account_id,service_id,tariff_link_id) VALUES('2', '2', '87', '0')
?Debug : Jan 27 14:12:31 DBCtx: <146141720> SQL query: INSERT INTO once_service_links(id,discount_date) VALUES('396','1233047551')
?Debug : Jan 27 14:12:31 BusPeriodic: BusPeriodic::rehash_periodic calling pthread_cond_signal
?Debug : Jan 27 14:12:31 BusPeriodic: Wait result:0
?Debug : Jan 27 14:12:31 BusPeriodic: real_rehash start
?Debug : Jan 27 14:12:31 RPCConn[SSL]<web_1c@192.168.99.9>: Call 0x2555 (rpcf_add_once_service_to_user) finished...
?Debug : Jan 27 14:12:31 RPCConn[SSL]<web_1c@192.168.99.9>: Stream cleared
------------------------
?Debug : Jan 27 14:12:41 RPCConn[SSL]<web_1c@192.168.99.9>: Call: 0x210b (rpcf_add_once_service)
?Debug : Jan 27 14:12:41 RPCConn[SSL]<web_1c@192.168.99.9>: Real Call: 0x210b (rpcf_add_once_service)
ERROR : Jan 27 14:12:41 RPCServer@0.0.0.0: Exception in rpcf_add_once_service: #74
?Debug : Jan 27 14:12:41 RPCConn[SSL]<web_1c@192.168.99.9>: Call 0x210b (rpcf_add_once_service) finished...
?Debug : Jan 27 14:12:41 RPCConn[SSL]<web_1c@192.168.99.9>: Stream cleared
Warn : Jan 27 14:12:41 RPCConn[SSL]<web_1c@192.168.99.9>: Session closed
Есть мысли почему так происходит?

Сам код:

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

	// Получаем данные о потреблении трафика где учет идет по факту
	$res = mysql_query&#40;"SELECT
		discount_transactions_iptraffic_all.account_id as account_id,
		Sum&#40;bytes&#41; AS bytes,
		service_links.user_id
		FROM
		discount_transactions_iptraffic_all
		LEFT Join service_links ON discount_transactions_iptraffic_all.slink_id = service_links.id AND discount_transactions_iptraffic_all.account_id = service_links.account_id
		LEFT Join users ON service_links.user_id = users.id
		Inner Join services_data ON service_links.service_id = services_data.id AND services_data.parent_service_id =  90
		WHERE
		t_class = 10 
		AND	discount_date >= $period_begin AND discount_date <= $period_end 
		GROUP BY
		account_id
		"&#41; or die&#40;'Could not select&#58; ' . mysql_error&#40;&#41;&#41;;
	// Обрабатываем данные о трафике по таблице тарификации
	while &#40;$line = mysql_fetch_array&#40;$res&#41;&#41; &#123;
		$uid = &#40;int&#41;$line&#91;2&#93;;
		$account_id = &#40;int&#41;$line&#91;0&#93;;
		//print_r&#40;$line&#41;;
		print "<br>";
		// Расчитываем сумму
		$discount = get_discount&#40;$line&#91;1&#93;,$qnt,$cost&#41;;
		// Изменяем сумму в разовой услуге
		print "uid = $uid <br>";
		print "qnt = $qnt <br>";
		print "cost = $cost <br>";
		print "discount = $discount <br>";
		print "once_service_id = $once_service_id <br>";

			$end = time&#40;&#41;+10;
			while&#40;time&#40;&#41;<$end&#41; &#123;&#125;

		rpcf_add_once_service&#40;0,0,$once_service_id,"IP-Traffic","",0,$discount&#41;;
		// Привязываем разовую услугу к клиенту
		rpcf_add_once_service_to_user&#40;$uid,$account_id,$once_service_id,0,0,$invoice_time&#41;;
	&#125;

function rpcf_add_once_service_to_user&#40;$user_id,$account_id,$service_id,$tplink,$slink_id,$discount_date&#41; &#123; //0x2551
    $ret=array&#40;&#41;;
    if &#40;!urfa_call&#40;0x2551&#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;$service_id&#41;;
    $packet->DataSetInt&#40;1&#41;; //once_service_type
    $packet->DataSetString&#40;""&#41;;
    $packet->DataSetInt&#40;$tplink&#41;;
    $packet->DataSetInt&#40;$slink_id&#41;;
    $packet->DataSetInt&#40;$discount_date&#41;;
    urfa_send_param&#40;$packet&#41;;
    urfa_get_data&#40;&#41;;
&#125;

function rpcf_add_once_service_to_user2&#40;$user_id,$account_id,$service_id,$tplink,$slink_id,$discount_date&#41; &#123; //0x2555
    $ret=array&#40;&#41;;
    if &#40;!urfa_call&#40;0x2555&#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;$service_id&#41;;
    $packet->DataSetInt&#40;0&#41;; //tplink
    $packet->DataSetInt&#40;0&#41;; //slink_id
    $packet->DataSetInt&#40;$discount_date&#41;;
    $packet->DataSetDouble&#40;1&#41;;
    $packet->DataSetInt&#40;0&#41;; //invoice_id
    urfa_send_param&#40;$packet&#41;;
    urfa_get_data&#40;&#41;;
&#125;

[/quote]

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

Сообщение Chrst »

Кто-нибудь реализовал проведение кредита через urfa?
У меня вышло вот что

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

function rpcf_set_credit&#40;$account_id,$credit&#41; &#123; // non urfa standart function
    $account = rpcf_get_accountinfo&#40;$account_id&#41;;  //0x2030
    $discount_period_id = 0;
    $dealer_account_id = $account&#91;'dealer_account_id'&#93;;
    $is_blocked = $account&#91;'is_blocked'&#93;;
    $block_start_date = date&#40;"U"&#41;;
    $block_end_date = "2000000000";
    $vat_rate = $account&#91;'vat_rate'&#93;;
    $sale_tax_rate = $account&#91;'sale_tax_rate'&#93;;
    $int_status = $account&#91;'int_status'&#93;;
    $block_recalc_abon = $account&#91;'block_recalc_abon'&#93;;
    $block_recalc_prepaid = $account&#91;'block_recalc_prepaid'&#93;;
    $unlimited = $account&#91;'unlimited'&#93;;
    rpcf_save_account&#40;$account_id,$discount_period_id='0',$credit,$is_blocked,$block_start_date,$block_end_date='2000000000',$dealer_account_id,$vat_rate,$sale_tax_rate,$int_status,$block_recalc_abon,$block_recalc_prepaid,$unlimited&#41;; //0x2032
&#125;
Ни при каких int_status интернет не включается. Надо следом вызывать rpcf_user5_change_int_status если нужно включить.

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

Сообщение starchik »

2 ds
а как бы получить сборочку со всеми реализованными функциями?
если можно плз намыль) djstarchik@mail.ru

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

Сообщение ds »

С try exceptions я так понял нормально не работает?

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

Сообщение Kayfolom »

ds писал(а):С try exceptions я так понял нормально не работает?
Работает, но как то не всегда ;) У меня на разных версиях php и разных платформах (линукс и винда) один о тот же код по какой то причине ведет себя по разному :(

AcDix
Сообщения: 2
Зарегистрирован: Вт янв 27, 2009 13:37

Сообщение AcDix »

ds писал(а):
Можешь глянуть мой вопрос? Может есть другая реализация вопроса по начислению по фактическим объемам ?

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

Сообщение ds »

В общем, imho, try .. catch не приспособлена для http, хотя в командной строке работает на ура.
В общем:
1) Переделал urfa_get_data. Теперь нужен только один вызов на функцию, а не надо подбирать где пропустил очередной вызов.
2) Подогнал вызовы по классы, на которые перевел bobr, т.е. убрал исключения. Я изначально вообще не предполагал oop, ошибался. Спасибо :)
3) xml пока не работает, но скоро. Мешал п.1.
4) Сессии. См. PS

Фишка что не зря делал. Мой биллинг до сих на костылях работает, с форума "фсе собирал" :D

ЗЫ. Могу сделать поддержку сессий пользователя на уровне urfa, sid сохранить в кукисах или как в оригинале ?sid=blablabla
Правда не считаю это лучшим споcобом, т.к. для получения этого sid
сначала нужно залогиниться под системным пользователем, чтобы получить этот sid. На мой взгляд не гуд.

Может есть другие варианты? Просто чтоб унифицировать сразу хотелось бы

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

ЗЫ. Могу сделать поддержку сессий пользователя на уровне urfa, sid сохранить в кукисах или как в оригинале ?sid=blablabla
Правда не считаю это лучшим споcобом, т.к. для получения этого sid
сначала нужно залогиниться под системным пользователем, чтобы получить этот sid. На мой взгляд не гуд.

Может есть другие варианты? Просто чтоб унифицировать сразу хотелось бы
А для чего нужно хранить SID? Я за все время пользования офф урфа ни разу не задумался о использовании SID, а SID не более чем костыль для user5

Ответить