Да, поправильному нужно переопределять конструкторы даже если класс наследуется, чтобы всегда нужно было передавать параметры при создании. Насчет вывода ошибок: можешь дописать в методе URFAClient_Exception::__construct() их вывод как echo $message; например.Kayfolom писал(а):bobr, может $address = "127.0.0.1" и $port = "11758" не зашивать в класс, а перенести в параметры конструкторов
urfaclient на php
-
- Сообщения: 309
- Зарегистрирован: Сб апр 16, 2005 11:44
Спасибо огромное! Помогло.ds писал(а):До for и после for убери вызовыКод: Выделить всё
$this->connection->urfa_get_data(); for ($i=0;$i<$ret['atr_size'];$i++) { $x = $this->connection->urfa_get_data();
$this->connection->urfa_get_data();
Вопрос немного не в тему, но вдруг...
Как сохранить экземпляр класса в текущей сессии, и самое главное - как его в дальнейшем использовать?
Вот к примеру:
$urfa_user5 = $urfa_admin->getURFAClient_User5("login", "password");
$_SESSION[URFA][URFA_INTERFACE]=$urfa_user5;
потом нужно вызывать функции класса, но как - ума не приложу. Не силен я в php, а чтение документации не привело меня к решению.
Как сохранить экземпляр класса в текущей сессии, и самое главное - как его в дальнейшем использовать?
Вот к примеру:
$urfa_user5 = $urfa_admin->getURFAClient_User5("login", "password");
$_SESSION[URFA][URFA_INTERFACE]=$urfa_user5;
потом нужно вызывать функции класса, но как - ума не приложу. Не силен я в php, а чтение документации не привело меня к решению.
Спасибо, все понял. А каким образом тогда использовать классы urfa к примеру в личном кабинете? На каждой странице авторизовываться в билинге заново?ds писал(а):Не, так не получится. Экземпляр класса разрушается при завершении скрипта, т.е. при каждом обновлении страницы будет создаваться новый экз-р, а по окончании работы скрипта, когда все ф-ции отработают, он будет автоматом разрушен.
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
-
- Сообщения: 309
- Зарегистрирован: Сб апр 16, 2005 11:44
2 ds:
Чтоб удобнее было добавлять, выложу все, что сделал одним паком:
Чтоб удобнее было добавлять, выложу все, что сделал одним паком:
Код: Выделить всё
function rpcf_user5_service_report($start_date,$end_date) { //-0x4011
$ret=array();
if (!$this->connection->urfa_call(-0x4011)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetInt($start_date);
$packet->DataSetInt($end_date);
$this->connection->urfa_send_param($packet);
if ($x = $this->connection->urfa_get_data()) {
$ret['aids_size'] = $x->DataGetInt();
for ($i=0;$i<$ret['aids_size'];$i++) {
$x = $this->connection->urfa_get_data();
$services['asr_size'] = $x->DataGetInt();
for($j=0;$j<$services['asr_size'];$j++){
$x = $this->connection->urfa_get_data();
$services['asr_size_array'][$j]['account_id'] = $x->DataGetInt();
$services['asr_size_array'][$j]['discount_date'] = $x->DataGetInt();
$services['asr_size_array'][$j]['discount'] = $x->DataGetDouble();
$services['asr_size_array'][$j]['discount_with_tax'] = $x->DataGetDouble();
$services['asr_size_array'][$j]['service_name'] = $x->DataGetString();
$services['asr_size_array'][$j]['service_type'] = $x->DataGetInt();
$services['asr_size_array'][$j]['comment'] = $x->DataGetString();
}
$ret['services'][]=$services;
}
$this->connection->urfa_get_data();
}
return $ret;
}
Код: Выделить всё
function rpcf_user5_payments_report($start_date,$end_date) { //-0x4012
$ret=array();
if (!$this->connection->urfa_call(-0x4012)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetInt($start_date);
$packet->DataSetInt($end_date);
$this->connection->urfa_send_param($packet);
$x = $this->connection->urfa_get_data();
$ret['account_id']=$x->DataGetInt();
$ret['atr_size']=$x->DataGetInt();
for ($i=0;$i<$ret['atr_size'];$i++) {
$payment['actual_date'] = $x->DataGetInt();
$payment['payment_enter_date'] = $x->DataGetInt();
$payment['payment'] = $x->DataGetDouble();
$payment['payment_incurrency'] = $x->DataGetDouble();
$payment['currency_id'] = $x->DataGetInt();
$payment['payment_method_id'] = $x->DataGetInt();
$payment['payment_method'] = $x->DataGetString();
$payment['comment'] = $x->DataGetString();
$ret['payment'][]=$payment;
}
$this->connection->urfa_get_data();
return $ret;
}
Код: Выделить всё
function rpcf_user5_get_services_info($slink_id) { //-0x4024
$ret=array();
if (!$this->connection->urfa_call(-0x4024)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetInt($slink_id);
$this->connection->urfa_send_param($packet);
$x = $this->connection->urfa_get_data();
$ret['service_type']=$x->DataGetInt();
$ret['service_id']=$x->DataGetInt();
$ret['service_name']=$x->DataGetString();
$ret['tariff_id']=$x->DataGetInt();
$ret['discounted_in_curr_period']=$x->DataGetDouble();
$ret['cost']=$x->DataGetDouble();
$x = $this->connection->urfa_get_data();
switch ($ret['service_type']){
case "3":
$ret['bytes_in_mbyte']=$x->DataGetInt();
$ret['iptsl_downloaded_size']=$x->DataGetInt();
for ($i=0;$i<=$ret['iptsl_downloaded_size']-1;$i++){
$x = $this->connection->urfa_get_data();
$ret['iptsl_downloaded_size_list'][$i]['tclass']=$x->DataGetString();
$ret['iptsl_downloaded_size_list'][$i]['downloaded']=$x->DataGetLong();
}
$x = $this->connection->urfa_get_data();
$ret['iptsl_old_prepaid_size']=$x->DataGetInt();
for ($i=0;$i<=$ret['iptsl_old_prepaid_size']-1;$i++){
$x = $this->connection->urfa_get_data();
$ret['iptsl_old_prepaid_size_list'][$i]['tclass']=$x->DataGetString();
$ret['iptsl_old_prepaid_size_list'][$i]['downloaded']=$x->DataGetLong();
}
$x = $this->connection->urfa_get_data();
$ret['ipgroup_size']=$x->DataGetInt();
for ($i=0;$i<=$ret['ipgroup_size']-1;$i++){
$x = $this->connection->urfa_get_data();
$ret['ipgroup_size_list'][$i]['item_id']=$x->DataGetInt();
$ret['ipgroup_size_list'][$i]['ip']=$x->DataGetIPAddress();
$ret['ipgroup_size_list'][$i]['mask']=$x->DataGetIPAddress();
$ret['ipgroup_size_list'][$i]['login']=$x->DataGetString();
}
$x = $this->connection->urfa_get_data();
$ret['iptsd_borders_size']=$x->DataGetInt();
for ($i=0;$i<=$ret['iptsd_borders_size']-1;$i++){
$x = $this->connection->urfa_get_data();
$ret['iptsd_borders_size_list'][$i]['tclass_name']=$x->DataGetString();
$ret['iptsd_borders_size_list'][$i]['bytes']=$x->DataGetLong();
$ret['iptsd_borders_size_list'][$i]['cost1']=$x->DataGetDouble();
$ret['iptsd_borders_size_list'][$i]['group_type']=$x->DataGetInt();
}
$x = $this->connection->urfa_get_data();
$ret['iptsd_prepaid_size']=$x->DataGetInt();
for ($i=0;$i<=$ret['iptsd_prepaid_size']-1;$i++){
$x = $this->connection->urfa_get_data();
$ret['iptsd_prepaid_size_list'][$i]['tclass_name_p']=$x->DataGetString();
$ret['iptsd_prepaid_size_list'][$i]['prepaid_p']=$x->DataGetLong();
}
break;
case "6":
$ret['tsl_numbers_size']=$x->DataGetInt();
for ($i=0;$i<=$ret['tsl_numbers_size']-1;$i++){
$x = $this->connection->urfa_get_data();
$ret['tsl_numbers_size_list'][$i]['number']=$x->DataGetString();
$ret['tsl_numbers_size_list'][$i]['login']=$x->DataGetString();
$ret['tsl_numbers_size_list'][$i]['allowed_cid']=$x->DataGetString();
$ret['tsl_numbers_size_list'][$i]['item_id']=$x->DataGetInt();
}
break;
default:
$ret['null_param']=$x->DataGetInt();
break;
}
$this->connection->urfa_get_data();
return $ret;
}
Код: Выделить всё
function rpcf_user5_dhs_report($start_date,$end_date) { //-0x4017
$ret=array();
if (!$this->connection->urfa_call(-0x4017)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetInt($start_date);
$packet->DataSetInt($end_date);
$this->connection->urfa_send_param($packet);
if ($x = $this->connection->urfa_get_data()) {
$ret['dhs_log_size'] = $x->DataGetInt();
for ($i=0;$i<$ret['dhs_log_size'];$i++) {
$x = $this->connection->urfa_get_data();
$session['id'] = $x->DataGetInt();
$session['account_id'] = $x->DataGetInt();
$session['slink_id'] = $x->DataGetInt();
$session['recv_date'] = $x->DataGetInt();
$session['last_update_date'] = $x->DataGetInt();
$session['framed_ip'] = $x->DataGetInt();
$session['nas_port'] = $x->DataGetInt();
$session['acct_session_id'] = $x->DataGetString();
$session['nas_port_type'] = $x->DataGetInt();
$session['uname'] = $x->DataGetString();
$session['service_type'] = $x->DataGetInt();
$session['framed_protocol'] = $x->DataGetInt();
$session['nas_ip'] = $x->DataGetInt();
$session['nas_id'] = $x->DataGetString();
$session['acct_status_type'] = $x->DataGetInt();
$session['acct_inp_pack'] = $x->DataGetLong();
$session['acct_inp_oct'] = $x->DataGetLong();
$session['acct_out_pack'] = $x->DataGetLong();
$session['acct_out_oct'] = $x->DataGetLong();
$session['acct_sess_time'] = $x->DataGetLong();
$session['dhs_sessions_detail_size'] = $x->DataGetInt();
for($j=0;$j<$session['dhs_sessions_detail_size'];$j++) {
$session['dhs_sessions_detail_list'][$j]['trange_id'] = $x->DataGetInt();
$session['dhs_sessions_detail_list'][$j]['account_id'] = $x->DataGetInt();
$session['dhs_sessions_detail_list'][$j]['duration'] = $x->DataGetLong();
$session['dhs_sessions_detail_list'][$j]['base_cost'] = $x->DataGetDouble();
$session['dhs_sessions_detail_list'][$j]['sum_cost'] = $x->DataGetDouble();
}
$ret['sessions'][]=$session;
}
$this->connection->urfa_get_data();
}
return $ret;
}
ссылки недоступны %(bobr писал(а):Вот, черновая, но вполне рабочая реализация на классах того, что есть. Все довольно гибко и красиво %) ("себя не похвалишь..."). В будущем, если ds поделится (скинь мне в личку свой ICQ), можно это легко переделать под парсер api.xml (уже в уме вижу хорошую реализацию).
Юзать через классы URFAClient_Admin и URFAClient_User5 (как? смотреть в test.php)
http://rapidshare.com/files/183110944/urfa.zip.html
http://dump.ru/file/1427143