urfaclient на php
Добрый день!
Честно прочитал данную тему. Стоит задача сменить пользователю тарифный план. У всех пользователей один расчетный период. Т.е. нужно сохранить необходимые данные (IP, внешний IP, логин, пароль и пр.), удалить тарифную связку, удалить сервисную связку, создать тарифную связку, создать сервисную связку, заполнить данными. Если я правильно понял, то мне нужно использовать функции:
удалить тарфиную связку - rpcf_unlink_user_tariff
удалить сервисную связку - rpcf_delete_slink
создать тарифную связку - rpcf_link_user_tariff
создать сервисную связку - rpcf_add_service_to_user
Правилен ли ход моих мыслей?
Смотрел в сторону Личного кабинета от Kayfolom. Там немного не то - там у абонентов индивидуальный РП.
Спасибо.
Честно прочитал данную тему. Стоит задача сменить пользователю тарифный план. У всех пользователей один расчетный период. Т.е. нужно сохранить необходимые данные (IP, внешний IP, логин, пароль и пр.), удалить тарифную связку, удалить сервисную связку, создать тарифную связку, создать сервисную связку, заполнить данными. Если я правильно понял, то мне нужно использовать функции:
удалить тарфиную связку - rpcf_unlink_user_tariff
удалить сервисную связку - rpcf_delete_slink
создать тарифную связку - rpcf_link_user_tariff
создать сервисную связку - rpcf_add_service_to_user
Правилен ли ход моих мыслей?
Смотрел в сторону Личного кабинета от Kayfolom. Там немного не то - там у абонентов индивидуальный РП.
Спасибо.
Заблокировать пользователя (ПАП ППТП)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 писал(а):Спасибо. А можно еще вопрос:
чтобы выполнить функцию 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;
При вызове функции rpcf_unlink_user_tariff вижу Error calling function, при этом в логах вижу:
Функцию вызываю так (на примере существующих данных):
$user_id=4691;
$account_id=4756;
$tariff_link_id=6063;
Код: Выделить всё
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 раз.
И снова я:)
Помогите разобраться:
Что передавать в функцию в качестве $tariff_link_id: значение переменной соответствует старому тарифу или нужно генерировать новое уникальное значение?
Помогите разобраться:
Код: Выделить всё
rpcf_link_user_tariff($user_id,$account_id, $tariff_current, $tariff_next, $discount_period_id, $tariff_link_id)
При привязке нового тарифа я передаю '0' (ноль).nicol@s писал(а):Что передавать в функцию в качестве $tariff_link_id: значение переменной соответствует старому тарифу или нужно генерировать новое уникальное значение?Код: Выделить всё
rpcf_link_user_tariff($user_id,$account_id, $tariff_current, $tariff_next, $discount_period_id, $tariff_link_id)
Большое спасибо. Здесь разобрался, но дальше встрял:(
В функции rpcf_add_service_to_user
Что такое service_id? Чему оно равно?
В функции 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"/>
....
Это идентификатор услуги (ID).nicol@s писал(а): В функции rpcf_add_service_to_userЧто такое service_id? Чему оно равно?Код: Выделить всё
<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"/> ....
Извините, но я опять встал в ступор. В функцию rpcf_add_service_to_user передаю такие данные
Пробую на одном из пользователей - вроде как добавляет все. Делаю отчет в админке "изменение пользователей", смущает следующее:
Когда делаю руками, то
Делаю для следующего пользователя - добавляется все, кроме сервисной связки.
Интересует:
1. почему в service link 0?
2. нужно ли менять значение [0] в массиве $service['ip_groups'][0]['ip_address']? Как понимаю я - в таком случае все данные будут записывать в 0-ой элемент
3. не могли бы привести пример, как нужно правильно создавать услугу "Передача IP-трафика" ?
Спасибо.
Код: Выделить всё
$service['user_id'] = $user_id;
$service['account_id'] = $account_id;
$service['service_id'] = 1;
$service['service_type'] = 3; // IP trafic
$service['return_type'] = '';
$service['tariff_link_id'] = 0;
$service['slink_id'] = 0;
$service['is_blocked'] = 0;
$service['discount_period_id'] = 59;
$service['start_date'] = time();
$service['expire_date'] = mktime(0, 0, 0, 1, 1, 2037);
$service['unabon'] = 0;
$service['unprepay'] = 0;
$service['ip_groups'][0]['ip_address'] = '10.3.100.'.rand(1,255);
$service['ip_groups'][0]['mask'] = '255.255.255.0';
$service['ip_groups'][0]['mac'] = '';
$service['ip_groups'][0]['iptraffic_login'] = '';
$service['ip_groups'][0]['iptraffic_allowed_cid']= '';
$service['ip_groups'][0]['iptraffic_password'] = '';
$service['ip_groups'][0]['ip_not_vpn'] = 0;
$service['ip_groups'][0]['dont_use_fw'] = 0;
$service['ip_groups'][0]['router_id'] = 0;
$service['quotas'] = array();
$srv_id = $urfa_admin->rpcf_add_service_to_user($service);
Код: Выделить всё
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-трафика" ?
Спасибо.
Обращаю внимание, что при создании тарифа указать хоть один класс трафика, иначе будут косяки. Это уже было в одной из недавних тем.nicol@s писал(а):3. не могли бы привести пример, как нужно правильно создавать услугу "Передача IP-трафика" ?
Нашёл старый файлик. Код рабочий, таким образом добавлялось несколько тысяч юзеров:
Код: Выделить всё
script_link_tarif_and_services( array(
tariff_id => $add_tarif['tp_id'],
user_id => $add_user['user_id'],
discount_period_id => 6,
ip_address => array(
array( ip => '192.168.40.0', mask => '255.255.255.224' ),
)
), $utm);
# Подключение тарифа и всех его услуг.
# - Может присутствовать несколько периодических услуг.
# - Может присутствовать только одна услуга передачи трафика!
function script_link_tarif_and_services($data, $utm) {
$tariff_id = $data['tariff_id'];
$user_id = $data['user_id'];
$account_id = $data['account_id'] | $user_id;
$discount_period_id = $data['discount_period_id'];
# Получаем информацию об услугах тарифа
$tsvc = $utm->get_tariff( array(
tariff_id => $tariff_id
));
# Добавляем новый тариф
$newtarif = array (
'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
);
$tp = $utm->link_user_tariff( $newtarif );
if ( !$tp['tariff_link_id'] ) {
print "ERROR ADDING TP\n";
print_r( $newtarif );
print_r( $tp );
exit;
}
# Поделючение всех услуг
$max = count($tsvc['services']);
for ( $i = 0; $i < $max; $i++ ) {
print "SVC $i/$max\n";
$svc = $tsvc['services'][$i];
$svc['user_id'] = $user_id;
$svc['account_id'] = $account_id;
$svc['return_type'] = '';
$svc['tariff_link_id'] = $tp['tariff_link_id'];
if ( $svc['service_type'] == '2' ) {
# Периодическая услуга
$svc['slink_id'] = 0;
$svc['is_blocked'] = 0;
$svc['discount_period_id'] = $discount_period_id;
$svc['start_date'] = time();
$svc['expire_date'] = $max_date;
$svc['unabon'] = 0;
$svc['unprepay'] = 0;
}
if ( $svc['service_type'] == '3' ) {
# Передача трафика
$svc['slink_id'] = 0;
$svc['is_blocked'] = 0;
$svc['discount_period_id'] = $discount_period_id;
$svc['start_date'] = time();
$svc['expire_date'] = $max_date;
$svc['unabon'] = 0;
$svc['unprepay'] = 0;
$svc['ip_address'] = array();
# Подключаем IP
foreach ( $data['ip_address'] as $ip ) {
$svc['ip_address'][] = array(
'ip_address' => $ip['ip'],
'mask' => $ip['mask'],
'ip_not_vpn' => 1,
'dont_use_fw' => 1
);
}
$svc['quota'] = array();
}
# Добавляем услугу
$utm->add_service_to_user( $svc );
print "END $i/$max\n";
}
}