urfaclient на php
Смена тарифа. Если возвращает 0, то ошибка.
Блин. Не работает сволочь. Хотя в дебаглоге все пушисто.
Вру, в дебаге:
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
Код: Выделить всё
function rpcf_link_user_tariff($user_id,$account_id=0,$tariff_current,$tariff_next=tariff_current,$discount_period_id,$tariff_link_id=0) { //0x3018
$ret=array();
if (!urfa_call(0x3018)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($user_id);
$packet->DataSetInt($account_id);
$packet->DataSetInt($tariff_current);
$packet->DataSetInt($tariff_next);
$packet->DataSetInt($discount_period_id);
$packet->DataSetInt($tariff_link_id);
urfa_send_param($packet);
if ($x = urfa_get_data()) {
$ret[tariff_link_id]=$x->DataGetInt();
urfa_get_data();
}
return $ret;
}
Вру, в дебаге:
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
Код: Выделить всё
rpcf_link_user_tariff($user_id,$account_id=0,$tariff_current,$tariff_next=tariff_current,$discount_period_id,$tariff_link_id=0)
Код: Выделить всё
rpcf_link_user_tariff($user_id,$account_id=0,$tariff_current,$tariff_next,$discount_period_id,$tariff_link_id=0)
Хорошо что работает
Ну да, значения по умолчанию можно пропускать. Просто запятые ставить и все. А если параметр по умолчанию последний (или последние), то их можно вообще не писать.
К сожалению пока не могу заниматься клиентом, думаю на неделе освобожусь, Переделать надо код немного, тогда ф-ции еще проще писать будет. Хочу сделать только один вызов $x = urfa_get_data() на всю ф-цию, тогда и отлаживать проще будет и xml парсить тоже.
Ну да, значения по умолчанию можно пропускать. Просто запятые ставить и все. А если параметр по умолчанию последний (или последние), то их можно вообще не писать.
К сожалению пока не могу заниматься клиентом, думаю на неделе освобожусь, Переделать надо код немного, тогда ф-ции еще проще писать будет. Хочу сделать только один вызов $x = urfa_get_data() на всю ф-цию, тогда и отлаживать проще будет и xml парсить тоже.
Написал костыль - реализацию учета трафика по фактическому объему, скрипт отрабатывает 1го контрагента в выборке, на следующем выдает ошибку:
Error calling function rpcf_add_once_service
Error calling function rpcf_add_once_service_to_user
в дебаге:
Сам код:[/quote]
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("SELECT
discount_transactions_iptraffic_all.account_id as account_id,
Sum(bytes) 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
") or die('Could not select: ' . mysql_error());
// Обрабатываем данные о трафике по таблице тарификации
while ($line = mysql_fetch_array($res)) {
$uid = (int)$line[2];
$account_id = (int)$line[0];
//print_r($line);
print "<br>";
// Расчитываем сумму
$discount = get_discount($line[1],$qnt,$cost);
// Изменяем сумму в разовой услуге
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()+10;
while(time()<$end) {}
rpcf_add_once_service(0,0,$once_service_id,"IP-Traffic","",0,$discount);
// Привязываем разовую услугу к клиенту
rpcf_add_once_service_to_user($uid,$account_id,$once_service_id,0,0,$invoice_time);
}
function rpcf_add_once_service_to_user($user_id,$account_id,$service_id,$tplink,$slink_id,$discount_date) { //0x2551
$ret=array();
if (!urfa_call(0x2551)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($user_id);
$packet->DataSetInt($account_id);
$packet->DataSetInt($service_id);
$packet->DataSetInt(1); //once_service_type
$packet->DataSetString("");
$packet->DataSetInt($tplink);
$packet->DataSetInt($slink_id);
$packet->DataSetInt($discount_date);
urfa_send_param($packet);
urfa_get_data();
}
function rpcf_add_once_service_to_user2($user_id,$account_id,$service_id,$tplink,$slink_id,$discount_date) { //0x2555
$ret=array();
if (!urfa_call(0x2555)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($user_id);
$packet->DataSetInt($account_id);
$packet->DataSetInt($service_id);
$packet->DataSetInt(0); //tplink
$packet->DataSetInt(0); //slink_id
$packet->DataSetInt($discount_date);
$packet->DataSetDouble(1);
$packet->DataSetInt(0); //invoice_id
urfa_send_param($packet);
urfa_get_data();
}
- Chrst
- Сообщения: 370
- Зарегистрирован: Пт май 11, 2007 09:28
- Откуда: Медиахолдинг "ЛеККС"
- Контактная информация:
Кто-нибудь реализовал проведение кредита через urfa?
У меня вышло вот чтоНи при каких int_status интернет не включается. Надо следом вызывать rpcf_user5_change_int_status если нужно включить.
У меня вышло вот что
Код: Выделить всё
function rpcf_set_credit($account_id,$credit) { // non urfa standart function
$account = rpcf_get_accountinfo($account_id); //0x2030
$discount_period_id = 0;
$dealer_account_id = $account['dealer_account_id'];
$is_blocked = $account['is_blocked'];
$block_start_date = date("U");
$block_end_date = "2000000000";
$vat_rate = $account['vat_rate'];
$sale_tax_rate = $account['sale_tax_rate'];
$int_status = $account['int_status'];
$block_recalc_abon = $account['block_recalc_abon'];
$block_recalc_prepaid = $account['block_recalc_prepaid'];
$unlimited = $account['unlimited'];
rpcf_save_account($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); //0x2032
}
2 ds
а как бы получить сборочку со всеми реализованными функциями?
если можно плз намыль) djstarchik@mail.ru
а как бы получить сборочку со всеми реализованными функциями?
если можно плз намыль) djstarchik@mail.ru
В общем, imho, try .. catch не приспособлена для http, хотя в командной строке работает на ура.
В общем:
1) Переделал urfa_get_data. Теперь нужен только один вызов на функцию, а не надо подбирать где пропустил очередной вызов.
2) Подогнал вызовы по классы, на которые перевел bobr, т.е. убрал исключения. Я изначально вообще не предполагал oop, ошибался. Спасибо
3) xml пока не работает, но скоро. Мешал п.1.
4) Сессии. См. PS
Фишка что не зря делал. Мой биллинг до сих на костылях работает, с форума "фсе собирал"
ЗЫ. Могу сделать поддержку сессий пользователя на уровне urfa, sid сохранить в кукисах или как в оригинале ?sid=blablabla
Правда не считаю это лучшим споcобом, т.к. для получения этого sid
сначала нужно залогиниться под системным пользователем, чтобы получить этот sid. На мой взгляд не гуд.
Может есть другие варианты? Просто чтоб унифицировать сразу хотелось бы
В общем:
1) Переделал urfa_get_data. Теперь нужен только один вызов на функцию, а не надо подбирать где пропустил очередной вызов.
2) Подогнал вызовы по классы, на которые перевел bobr, т.е. убрал исключения. Я изначально вообще не предполагал oop, ошибался. Спасибо
3) xml пока не работает, но скоро. Мешал п.1.
4) Сессии. См. PS
Фишка что не зря делал. Мой биллинг до сих на костылях работает, с форума "фсе собирал"
ЗЫ. Могу сделать поддержку сессий пользователя на уровне urfa, sid сохранить в кукисах или как в оригинале ?sid=blablabla
Правда не считаю это лучшим споcобом, т.к. для получения этого sid
сначала нужно залогиниться под системным пользователем, чтобы получить этот sid. На мой взгляд не гуд.
Может есть другие варианты? Просто чтоб унифицировать сразу хотелось бы
А для чего нужно хранить SID? Я за все время пользования офф урфа ни разу не задумался о использовании SID, а SID не более чем костыль для user5ЗЫ. Могу сделать поддержку сессий пользователя на уровне urfa, sid сохранить в кукисах или как в оригинале ?sid=blablabla
Правда не считаю это лучшим споcобом, т.к. для получения этого sid
сначала нужно залогиниться под системным пользователем, чтобы получить этот sid. На мой взгляд не гуд.
Может есть другие варианты? Просто чтоб унифицировать сразу хотелось бы