urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

Добрый день!
Честно прочитал данную тему. Стоит задача сменить пользователю тарифный план. У всех пользователей один расчетный период. Т.е. нужно сохранить необходимые данные (IP, внешний IP, логин, пароль и пр.), удалить тарифную связку, удалить сервисную связку, создать тарифную связку, создать сервисную связку, заполнить данными. Если я правильно понял, то мне нужно использовать функции:
удалить тарфиную связку - rpcf_unlink_user_tariff
удалить сервисную связку - rpcf_delete_slink
создать тарифную связку - rpcf_link_user_tariff
создать сервисную связку - rpcf_add_service_to_user
Правилен ли ход моих мыслей?
Смотрел в сторону Личного кабинета от Kayfolom. Там немного не то - там у абонентов индивидуальный РП.
Спасибо.

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

Сообщение Magnum72 »

nicol@s писал(а):Добрый день!
Честно прочитал данную тему. Стоит задача сменить пользователю тарифный план. У всех пользователей один расчетный период. Т.е. нужно сохранить необходимые данные (IP, внешний IP, логин, пароль и пр.), удалить тарифную связку, удалить сервисную связку, создать тарифную связку, создать сервисную связку, заполнить данными. Если я правильно понял, то мне нужно использовать функции:
удалить тарфиную связку - rpcf_unlink_user_tariff
удалить сервисную связку - rpcf_delete_slink
создать тарифную связку - rpcf_link_user_tariff
создать сервисную связку - rpcf_add_service_to_user
Правилен ли ход моих мыслей?
Смотрел в сторону Личного кабинета от Kayfolom. Там немного не то - там у абонентов индивидуальный РП.
Спасибо.
Заблокировать пользователя (ПАП ППТП)
удалить сервисную связку - rpcf_delete_slink
удалить тарфиную связку - rpcf_unlink_user_tariff
создать тарифную связку - rpcf_link_user_tariff
создать сервисную связку - rpcf_add_service_to_user (не забыть указать чтобы не перерасчитывать абонентку и предоплаченный трафик в в момент создания услиги)
Разблокировать поьзователя

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

Спасибо. А можно еще вопрос:
чтобы выполнить функцию rpcf_delete_slink, нужно в качестве параметра передать slink_id. Правильно ли понимаю, что slink_id есть не что иное,
как service_id в таблице service_links? Или slink_id - это link_ID (если смотреть через админку)?

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

nicol@s писал(а):Спасибо. А можно еще вопрос:
чтобы выполнить функцию rpcf_delete_slink, нужно в качестве параметра передать slink_id. Правильно ли понимаю, что slink_id есть не что иное,
как service_id в таблице service_links? Или slink_id - это link_ID (если смотреть через админку)?

Через пару часов: разобрался. slink_id = service_links.id:

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

mysql> SELECT service_links.* FROM users,service_links WHERE users.id = service_links.user_id AND users.login = 'login' AND users.is_deleted = 0 AND service_links.is_deleted = 0 and service_links.tariff_link_id != 0;

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

При вызове функции rpcf_unlink_user_tariff вижу Error calling function, при этом в логах вижу:

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

Exception in rpcf_unlink_user_tariff: #22
Функцию вызываю так (на примере существующих данных):
$user_id=4691;
$account_id=4756;
$tariff_link_id=6063;

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

$delete_tariff = $urfa_admin->rpcf_unlink_user_tariff($user_id, $account_id, $tariff_link_id);
Последний раз редактировалось nicol@s Пт мар 05, 2010 18:17, всего редактировалось 1 раз.

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

Разобрался:) Поменял местами: сначала удаляю тарифную связку, потом сервисную

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

И снова я:)
Помогите разобраться:

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

rpcf_link_user_tariff($user_id,$account_id, $tariff_current, $tariff_next, $discount_period_id, $tariff_link_id) 
Что передавать в функцию в качестве $tariff_link_id: значение переменной соответствует старому тарифу или нужно генерировать новое уникальное значение?

forgotten
Сообщения: 53
Зарегистрирован: Чт авг 28, 2008 08:11

Сообщение forgotten »

nicol@s писал(а):

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

rpcf_link_user_tariff($user_id,$account_id, $tariff_current, $tariff_next, $discount_period_id, $tariff_link_id) 
Что передавать в функцию в качестве $tariff_link_id: значение переменной соответствует старому тарифу или нужно генерировать новое уникальное значение?
При привязке нового тарифа я передаю '0' (ноль).

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

Большое спасибо. Здесь разобрался, но дальше встрял:(
В функции rpcf_add_service_to_user

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

<function name="rpcf_add_service_to_user" id="0x2551">
    <input>
      <integer name="user_id"/>
      <integer name="account_id" default="basic_account"/>
      <integer name="service_id"/>
      <integer name="service_type"/>
      <string name="return_type" default=""/>
      <integer name="tariff_link_id" default="0"/>
....
Что такое service_id? Чему оно равно?

forgotten
Сообщения: 53
Зарегистрирован: Чт авг 28, 2008 08:11

Сообщение forgotten »

nicol@s писал(а): В функции rpcf_add_service_to_user

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

<function name="rpcf_add_service_to_user" id="0x2551">
    <input>
      <integer name="user_id"/>
      <integer name="account_id" default="basic_account"/>
      <integer name="service_id"/>
      <integer name="service_type"/>
      <string name="return_type" default=""/>
      <integer name="tariff_link_id" default="0"/>
....
Что такое service_id? Чему оно равно?
Это идентификатор услуги (ID).

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

Да-да. Только запостил сообщение и додумася =)

forgotten
Сообщения: 53
Зарегистрирован: Чт авг 28, 2008 08:11

Сообщение forgotten »

nicol@s писал(а):Да-да. Только запостил сообщение и додумася =)
Вот поэтому не стоит торопиться с постами ;)

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

Извините, но я опять встал в ступор. В функцию rpcf_add_service_to_user передаю такие данные

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

$service&#91;'user_id'&#93;        = $user_id;
      $service&#91;'account_id'&#93;     = $account_id;
      $service&#91;'service_id'&#93;     = 1; 
      $service&#91;'service_type'&#93;   = 3; // IP trafic
      $service&#91;'return_type'&#93;    = '';
      $service&#91;'tariff_link_id'&#93; = 0;
      $service&#91;'slink_id'&#93;    = 0;
      $service&#91;'is_blocked'&#93;  = 0;
      $service&#91;'discount_period_id'&#93; = 59;
      $service&#91;'start_date'&#93;  = time&#40;&#41;;
      $service&#91;'expire_date'&#93; = mktime&#40;0, 0, 0, 1, 1, 2037&#41;;
      $service&#91;'unabon'&#93;      = 0;
      $service&#91;'unprepay'&#93;    = 0;
      $service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'ip_address'&#93; = '10.3.100.'.rand&#40;1,255&#41;;
      $service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'mask'&#93;       = '255.255.255.0';
      $service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'mac'&#93;        = '';
      $service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'iptraffic_login'&#93; = '';
      $service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'iptraffic_allowed_cid'&#93;= '';
      $service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'iptraffic_password'&#93;   = '';
      $service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'ip_not_vpn'&#93;           = 0;
      $service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'dont_use_fw'&#93;          = 0; 
      $service&#91;'ip_groups'&#93;&#91;0&#93;&#91;'router_id'&#93;            = 0;
      $service&#91;'quotas'&#93; = array&#40;&#41;;
      $srv_id = $urfa_admin->rpcf_add_service_to_user&#40;$service&#41;; 
Пробую на одном из пользователей - вроде как добавляет все. Делаю отчет в админке "изменение пользователей", смущает следующее:

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

service link <0>, ip group <0>, login '', ip '10.3.100.57', MAC
Когда делаю руками, то

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

service link <32081>, ip group <11822>, login '11111111', ip '10.3.100.57', MAC '11111111'
Делаю для следующего пользователя - добавляется все, кроме сервисной связки.
Интересует:
1. почему в service link 0?
2. нужно ли менять значение [0] в массиве $service['ip_groups'][0]['ip_address']? Как понимаю я - в таком случае все данные будут записывать в 0-ой элемент
3. не могли бы привести пример, как нужно правильно создавать услугу "Передача IP-трафика" ?
Спасибо.

dk
Сообщения: 424
Зарегистрирован: Чт авг 10, 2006 08:52

Сообщение dk »

nicol@s писал(а):3. не могли бы привести пример, как нужно правильно создавать услугу "Передача IP-трафика" ?
Обращаю внимание, что при создании тарифа указать хоть один класс трафика, иначе будут косяки. Это уже было в одной из недавних тем.

Нашёл старый файлик. Код рабочий, таким образом добавлялось несколько тысяч юзеров:

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

script_link_tarif_and_services&#40; array&#40;
    tariff_id => $add_tarif&#91;'tp_id'&#93;,
    user_id => $add_user&#91;'user_id'&#93;,
    discount_period_id => 6,
    ip_address => array&#40;
                array&#40; ip => '192.168.40.0', mask => '255.255.255.224' &#41;,

    &#41;
&#41;, $utm&#41;;

# Подключение тарифа и всех его услуг.
# - Может присутствовать несколько периодических услуг.
# - Может присутствовать только одна услуга передачи трафика!
function script_link_tarif_and_services&#40;$data, $utm&#41; &#123;
    $tariff_id = $data&#91;'tariff_id'&#93;;
    $user_id = $data&#91;'user_id'&#93;;
    $account_id = $data&#91;'account_id'&#93; | $user_id;
    $discount_period_id = $data&#91;'discount_period_id'&#93;;

    # Получаем информацию об услугах тарифа
    $tsvc = $utm->get_tariff&#40; array&#40;
        tariff_id => $tariff_id
    &#41;&#41;;

    # Добавляем новый тариф
    $newtarif = array &#40;
        'user_id' => $user_id,
        'account_id' => $account_id,
        'tariff_current' => $tariff_id,
        'tariff_next' => $tariff_id,
        'discount_period_id' => $discount_period_id,
        'tariff_link_id' => 0
    &#41;;
    $tp = $utm->link_user_tariff&#40; $newtarif &#41;;
    if &#40; !$tp&#91;'tariff_link_id'&#93; &#41; &#123;
        print "ERROR ADDING TP\n";
        print_r&#40; $newtarif &#41;;
        print_r&#40; $tp &#41;;
        exit;
    &#125;

    # Поделючение всех услуг
    $max = count&#40;$tsvc&#91;'services'&#93;&#41;;
    for &#40; $i = 0; $i < $max; $i++ &#41; &#123;
        print "SVC $i/$max\n";
        $svc = $tsvc&#91;'services'&#93;&#91;$i&#93;;

        $svc&#91;'user_id'&#93; = $user_id;
        $svc&#91;'account_id'&#93; = $account_id;
        $svc&#91;'return_type'&#93; = '';
        $svc&#91;'tariff_link_id'&#93; = $tp&#91;'tariff_link_id'&#93;;

        if &#40; $svc&#91;'service_type'&#93; == '2' &#41; &#123;
            # Периодическая услуга
            $svc&#91;'slink_id'&#93;  = 0;
            $svc&#91;'is_blocked'&#93; = 0;
            $svc&#91;'discount_period_id'&#93; = $discount_period_id;
            $svc&#91;'start_date'&#93; = time&#40;&#41;;
            $svc&#91;'expire_date'&#93; = $max_date;
            $svc&#91;'unabon'&#93; = 0;
            $svc&#91;'unprepay'&#93; = 0;
        &#125;
        if &#40; $svc&#91;'service_type'&#93; == '3' &#41; &#123;
            # Передача трафика
            $svc&#91;'slink_id'&#93; = 0;
            $svc&#91;'is_blocked'&#93; = 0;
            $svc&#91;'discount_period_id'&#93; = $discount_period_id;
            $svc&#91;'start_date'&#93; = time&#40;&#41;;
            $svc&#91;'expire_date'&#93; = $max_date;
            $svc&#91;'unabon'&#93; = 0;
            $svc&#91;'unprepay'&#93; = 0;
            $svc&#91;'ip_address'&#93; = array&#40;&#41;;

            # Подключаем IP
            foreach &#40; $data&#91;'ip_address'&#93; as $ip &#41; &#123;
                $svc&#91;'ip_address'&#93;&#91;&#93; = array&#40;
                    'ip_address' => $ip&#91;'ip'&#93;,
                    'mask' => $ip&#91;'mask'&#93;,
                    'ip_not_vpn' => 1,
                    'dont_use_fw' => 1
              &#41;;
            &#125;
            $svc&#91;'quota'&#93; = array&#40;&#41;;
        &#125;
        # Добавляем услугу
        $utm->add_service_to_user&#40; $svc &#41;;
        print "END $i/$max\n";
    &#125;

&#125;

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

Спасибо

Ответить