Вроде все правильно. Приведите пример вызова функции (с параметрами и все такое) - потестю у себя.zoom писал(а):Создаю расчетный период с помощью rpcf_add_discount_period (0x2603), как мне получить id созданного расчетного периода? или может нужно использовать другую функцию?
Добавлено спустя 3 часа плясок с бубном:
Возможно 0x2605 умеет получать id ?
Добавил в wiki rpcf_add_discount_period_return //0x2605
Расчётные периоды c 0x2605 создаются, а получить id не удаётся.
urfaclient на php
Лучший способ узнать как сделать посмотреть как это делает админка:Xart писал(а):Может вопрос и глупый, но всеже.
При добавлении к сервисной связке ip группы с помощью rpcf_add_to_ip_group нельзя установить ID брандмауэра.
Никто не подскажет, как можно установить id брандмауэра не используя удаление-создание сервисной связки. Прошерстил api.xml но ничего подходящего не нашел.
Заранее спасибо.
P.S. еще раз огромное спасибо всем кто пишет функции и отдельное спасибо ds за сам клиент.
При добавлении ip группы она вызывает <function name="rpcf_add_service_to_user" id="0x2551"> в которой и указывается ID брандмауэра
Вот собственно:
Расчётные периоды заводятся, а вызвать id периода не удаётся.
Хотя в аналогичном примере с 0x3018 всё работает..:
Код: Выделить всё
$start_date = strtotime("now");
$periodic_type = 3;
$custom_duration = 0;
$discount_interval = 0;
$new_discount_period_id = $urfa_admin->rpcf_add_discount_period_return($static_id,$start_date,$expire_date,$periodic_type,$custom_duration,$discount_interval,$discount_period_id); //0x2605
$new_discount_period_id = $new_discount_period_id["discount_period_id"];
print_r($new_discount_period_id);
Хотя в аналогичном примере с 0x3018 всё работает..:
Код: Выделить всё
$new_tariff_link_id = $urfa_admin->rpcf_link_user_tariff($user_id, $account_id, $tariff_current_inet, $urfa_next_tariff, $discount_period_id, $tariff_link_id); // 0x3018
$new_tariff_link_id = $new_tariff_link_id["tariff_link_id"];
print_r($new_tariff_link_id);
Мной была допущена небольшая ошибочка, вместо $ret=0 надо было написать $ret=array()
В итоге правильный вариант выглядит так:
В wiki исправил. Теперь функция вызова id расчётного периода работает корректно.
В итоге правильный вариант выглядит так:
Код: Выделить всё
function rpcf_add_discount_period_return($static_id,$start_date,$expire_date,$periodic_type,$custom_duration,$discount_interval) { //0x2605
$ret=array();
if (!$this->connection->urfa_call(0x2605)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetInt($static_id);
$packet->DataSetInt($start_date);
$packet->DataSetInt($expire_date);
$packet->DataSetInt($periodic_type);
$packet->DataSetInt($custom_duration);
$packet->DataSetInt($discount_interval);
$this->connection->urfa_send_param($packet);
if ($x = $this->connection->urfa_get_data()) {
$ret['discount_period_id']=$x->DataGetInt();
$this->connection->urfa_get_data();
}
return $ret;
}
То есть, при вызове этой функции и указании slink_id уже существующей привязки услуги, то она будет не добавлять а редактировать уже существующую привязку, или, всетаки, придется убивать предыдущую привязку услуги?Kayfolom писал(а): Лучший способ узнать как сделать посмотреть как это делает админка:
При добавлении ip группы она вызывает <function name="rpcf_add_service_to_user" id="0x2551"> в которой и указывается ID брандмауэра
Последний раз редактировалось Xart Пн июл 20, 2009 11:39, всего редактировалось 1 раз.
Есть такая клёвая функция 0x1205, rpcf_search_users_new
Никак не могу смекнуть, что подать ей на вход, чтобы осуществить поиск по ID подключенной услуги. То есть чтобы одним запросом выбрать всех юзеров, у кого подключена какая-то услуга.
Понимаю, что смотреть нужно в массив $patterns, только вот чего туда пихать?..
Никак не могу смекнуть, что подать ей на вход, чтобы осуществить поиск по ID подключенной услуги. То есть чтобы одним запросом выбрать всех юзеров, у кого подключена какая-то услуга.
Понимаю, что смотреть нужно в массив $patterns, только вот чего туда пихать?..

-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
Код: Выделить всё
function rpcf_service_report($user_id=0,$account_id=0,$group_id=0,$apid=0,$time_start,$time_end) { //3002
$ret=array();
if (!$this->connection->urfa_call(0x3002)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetInt($user_id);
$packet->DataSetInt($account_id);
$packet->DataSetInt($group_id);
$packet->DataSetInt($apid);
$packet->DataSetInt($time_start);
$packet->DataSetInt($time_end);
$this->connection->urfa_send_param($packet);
if ($x = $this->connection->urfa_get_data()) {
$ret['accounts_count'] = $x->DataGetInt();
for ($i=0;$i<$ret['accounts_count'];$i++) {
$x = $this->connection->urfa_get_data();
$services['atr_size'] = $x->DataGetInt();
for($j=0;$j<$services['atr_size'];$j++){
$x = $this->connection->urfa_get_data();
$services['atr_size_array'][$j]['account_id'] = $x->DataGetInt();
$services['atr_size_array'][$j]['login'] = $x->DataGetString();
$services['atr_size_array'][$j]['discount_date'] = $x->DataGetInt();
$services['atr_size_array'][$j]['discount_period_id'] = $x->DataGetInt();
$services['atr_size_array'][$j]['discount'] = $x->DataGetDouble();
$services['atr_size_array'][$j]['service_name'] = $x->DataGetString();
$services['atr_size_array'][$j]['service_type'] = $x->DataGetInt();
$services['atr_size_array'][$j]['comment'] = $x->DataGetString();
}
$ret['services'][]=$services;
}
$this->connection->urfa_get_data();
}
return $ret;
}
Код: Выделить всё
function rpcf_add_user_new($user,$parameters,$groups) { //0x2125
$ret=array();
if (!$this->connection->urfa_call(0x2125)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetString($user['login']);
$packet->DataSetString($user['password']);
$packet->DataSetstring($user['full_name']);
$packet->DataSetInt($user['is_juridical']);
$packet->DataSetString($user['jur_address']);
$packet->DataSetString($user['act_address']);
$packet->DataSetString($user['flat_number']);
$packet->DataSetString($user['entrance']);
$packet->DataSetString($user['floor']);
$packet->DataSetString($user['district']);
$packet->DataSetString($user['building']);
$packet->DataSetString($user['passport']);
$packet->DataSetInt($user['house_id']);
$packet->DataSetString($user['work_tel']);
$packet->DataSetString($user['home_tel']);
$packet->DataSetString($user['mob_tel']);
$packet->DataSetString($user['web_page']);
$packet->DataSetString($user['icq_number']);
$packet->DataSetString($user['tax_number']);
$packet->DataSetString($user['kpp_number']);
$packet->DataSetString($user['email']);
$packet->DataSetInt($user['bank_id']);
$packet->DataSetString($user['bank_account']);
$packet->DataSetString($user['comments']);
$packet->DataSetString($user['personal_manager']);
$packet->DataSetInt($user['connect_date']);
$packet->DataSetInt($user['is_send_invoice']);
$packet->DataSetInt($user['advance_payment']);
$packet->DataSetInt($user['switch_id']);
$packet->DataSetInt($user['port_number']);
$packet->DataSetInt($user['binded_currency_id']);
$packet->DataSetInt(count($parameters));
foreach ($parameters as $array_item){
$packet->DataSetInt($array_item['id']);
$packet->DataSetString($array_item['value']);
}
$packet->DataSetInt(count($groups));
foreach ($groups as $array_item){
$packet->DataSetInt($array_item['value']);
}
$packet->DataSetInt($user['is_blocked']);
$packet->DataSetDouble($user['balance']);
$packet->DataSetDouble($user['credit']);
$packet->DataSetDouble($user['vat_rate']);
$packet->DataSetDouble($user['sale_tax_rate']);
$packet->DataSetInt($user['int_status']);
$this->connection->urfa_send_param($packet);
$ret['user_id']=0;
if($x = $this->connection->urfa_get_data()){
$z_user_id = $x->DataGetInt();
if ($z_user_id == 0) {
$error_code = $x->DataGetInt();
$error_msg = $x->DataGetString();
}
if ($z_user_id != 0) {
$account_id = $x->DataGetInt();
}
$ret['user_id']=$z_user_id;
$ret['error_msg']=$error_msg;
$ret['error_code']=$error_code;
$ret['basic_account']=$account_id;
$this->connection->urfa_get_data();
}
return $ret;
}
Столкнулся со следующей проблемой. Если пытаюсь вызвать несколько функций подряд, используя один объект URFAClient_Admin, начинают валиться ошибки "Error calling function xxxxxxx". Если перед каждым вызовом функции пересоздаю объект, то более-менее работает, но биллингу не нравится такое большое количество подключений за такой короткий промежуток времени. Как можно решить эту проблему?
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
А можно поподробнее, в каких местах/случаях должна вызываться эта функция?Biss писал(а):Во многих функциях не хватает этой строки
$this->connection->urfa_get_data();
в конце кода. Из за этого происходит не полный обмен с ядром системы при вызове функции. Как следствие она подвисает и для последующих функций отрабатывает некорректно. Несколько функций в wiki я уже исправил.
Есть два варианта urfa_get_data(): старый, требующий множественных вызовов, и новый, в котором делается только один вызов urfa_get_data(). Здесь это все написано подробно страниц десять назадswibl писал(а):А можно поподробнее, в каких местах/случаях должна вызываться эта функция?Biss писал(а):Во многих функциях не хватает этой строки
$this->connection->urfa_get_data();
в конце кода. Из за этого происходит не полный обмен с ядром системы при вызове функции. Как следствие она подвисает и для последующих функций отрабатывает некорректно. Несколько функций в wiki я уже исправил.