оригинальным клиентом rpcf_save_account работает, провереноWishmaster писал(а):Народ, если не затруднит, может кто подскажет, как с помошью урфа РАЗБЛОКИРОВАТЬ абонента..
функция rpcf_block_account($account_id,$block); //0x2037
блокирует, но попытки указать $block = 0 или null не увенчались успехом, абонент по-прежнему остается заблокированным.
в api.xml не нашел функции для разблокировки, соответственно, остается один вариант :
rpcf_get_accountinfo //0x2030 + rpcf_save_account //0x2032
впрочем, в его работоспособности я не уверен, если кто сталкивался, может подскажет, как ПРАВИЛЬНО разблокировать абонента..
urfaclient на php
-
- Сообщения: 309
- Зарегистрирован: Сб апр 16, 2005 11:44
Внесу свою небольшую лепту.
Здесь есть маленькая загвостка, функция при отработке выдает ошибку:
и по каким-то причинам не сохраняет параметры пользователя, хотя в функцию они передаются нормально и foreach отрабатывается нормально. Буду признателен, если кто-нибудь подскажет, в чем может быть причина.
Здесь тоже есть одна особенность, после создания аккаунта, параметры credit, НДС, НСП во вновь созданном аккаунте почему-то равны "8.289046E-317", хотя везде стоят нули. Если после этого выполнить функцию rpcf_save_account , то все становится нормально. (т.е. 0)
--------------------
2 ds :
Есть ли смысл ввести дополнительный метод DataSetDouble ? Или DataSetInt достаточно? Как вы считаете?
и еще, в вашем дистрибе есть маленький баг, в функции:
Здесь 'parameters_size' надо заменить на 'parameters_count', иначе не отображаются дополнительные параметры пользователя.
------------
В остальном, очень и очень признателен за создание такой полезной утилиты!
Код: Выделить всё
function rpcf_add_user($user_id=0,$login,$password,$full_name,$is_juridical=0,$jur_address,$act_address,$flat_number,$entrance,$floor,$district,$building,$passport,$house_id,$work_tel,$home_tel,$mob_tel,$web_page,$icq_number,$tax_number,$kpp_number,$email,$bank_id=0,$bank_account,$comments,$personal_manager,$connect_date=0,$is_send_invoice=0,$advance_payment=0,$parameters) { //0x2005
$ret=array();
if (!urfa_call(0x2005)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($user_id);
$packet->DataSetString($login);
$packet->DataSetString($password);
$packet->DataSetstring($full_name);
if ($user_id == 0){
if ( ! $unused){
$unused = 0;
}
$packet->DataSetInt($unused);
}
$packet->DataSetInt($is_juridical);
$packet->DataSetString($jur_address);
$packet->DataSetString($act_address);
$packet->DataSetString($flat_number);
$packet->DataSetString($entrance);
$packet->DataSetString($floor);
$packet->DataSetString($district);
$packet->DataSetString($building);
$packet->DataSetString($passport);
$packet->DataSetInt($house_id);
$packet->DataSetString($work_tel);
$packet->DataSetString($home_tel);
$packet->DataSetString($mob_tel);
$packet->DataSetString($web_page);
$packet->DataSetString($icq_number);
$packet->DataSetString($tax_number);
$packet->DataSetString($kpp_number);
$packet->DataSetString($email);
$packet->DataSetInt($bank_id);
$packet->DataSetString($bank_account);
$packet->DataSetString($comments);
$packet->DataSetString($personal_manager);
$packet->DataSetInt($connect_date);
$packet->DataSetInt($is_send_invoice);
$packet->DataSetInt($advance_payment);
$packet->DataSetInt(count($parameters));
foreach ($parameters as $array_item){
$packet->DataSetInt($array_item['id']);
$packet->DataSetString($array_item['value']);
}
urfa_send_param($packet);
if($x = urfa_get_data()){
$z_user_id = $x->DataGetInt();
$error_msg = $x->DataGetString();
$ret[user_id]=$z_user_id;
$ret[error_msg]=$error_msg;
}
urfa_get_data();
return $ret;
}
Код: Выделить всё
Warning: unpack(): Type N: not enough input, need 4, have 0 in /usr/home/master/uu/urfaclient/socket.php on line 128
Код: Выделить всё
function rpcf_add_account($user_id,$is_basic=1,$is_blocked=0,$account_name='auto create account',$balance='0',$credit='0',$discount_period_id=0,$dealer_account_id=0,$dealer_coefficient=0,$default_comission_value=0,$is_dealer=0,$vat_rate=0,$sale_tax_rate=0,$int_status=1) { //0x2031
$ret=array();
if (!urfa_call(0x2031)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($user_id);
$packet->DataSetInt($is_basic);
$packet->DataSetInt($is_blocked);
$packet->DataSetString($account_name);
$packet->DataSetInt($balance);
$packet->DataSetInt($credit);
$packet->DataSetInt($discount_period_id);
$packet->DataSetInt($dealer_account_id);
$packet->DataSetInt($comission_coefficient);
$packet->DataSetInt($default_comission_value);
$packet->DataSetInt($is_dealer);
$packet->DataSetInt($vat_rate);
$packet->DataSetInt($sale_tax_rate);
$packet->DataSetInt($int_status);
urfa_send_param($packet);
if ($x = urfa_get_data()){
$ret[account_id]=$x->DataGetInt();
if($ret[account_id]==0){
return -1;
}
}
urfa_get_data();
return $ret;
}
Код: Выделить всё
function rpcf_remove_account($account_id) { //0x2034
$ret=array();
if (!urfa_call(0x2034)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($account_id);
urfa_send_param($packet);
if ( $x=urfa_get_data()){
$ret=$x->DataGetInt();
}
urfa_get_data();
return $ret;
}
Код: Выделить всё
function 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
$ret=array();
if (!urfa_call(0x2032)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($account_id);
$packet->DataSetInt($discount_period_id);
$packet->DataSetInt($credit);
$packet->DataSetInt($is_blocked);
if($is_blocked <> 0) {
if ( ! $block_start_date) {
$block_start_date=date("U");
}
$packet->DataSetInt($block_start_date);
$packet->DataSetInt($block_end_date);
}
$packet->DataSetInt($dealer_account_id);
$packet->DataSetInt($vat_rate);
$packet->DataSetInt($sale_tax_rate);
$packet->DataSetInt($int_status);
$packet->DataSetInt($block_recalc_abon);
$packet->DataSetInt($block_recalc_prepaid);
$packet->DataSetInt($unlimited);
urfa_send_param($packet);
}
2 ds :
Есть ли смысл ввести дополнительный метод DataSetDouble ? Или DataSetInt достаточно? Как вы считаете?
и еще, в вашем дистрибе есть маленький баг, в функции:
Код: Выделить всё
function rpcf_get_userinfo($user_id) { //0x2006
$ret=array();
if (!urfa_call(0x2006)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
...............
$ret['parameters_count']=$x->DataGetInt();
for ($i=0; $i < $ret['parameters_size']; $i++ ) {
$parameters['id']=$x->DataGetInt();
$parameters['value']=$x->DataGetString();
$ret['parameters'][]=$parameters;
}
................
------------
В остальном, очень и очень признателен за создание такой полезной утилиты!
Последний раз редактировалось Wishmaster Сб дек 27, 2008 04:18, всего редактировалось 2 раза.
-
- Сообщения: 309
- Зарегистрирован: Сб апр 16, 2005 11:44
Да, спасибо вам! Я уже реализовал эти функции и добился нужного результата.Pulse писал(а):оригинальным клиентом rpcf_save_account работает, провереноWishmaster писал(а):Народ, если не затруднит, может кто подскажет, как с помошью урфа РАЗБЛОКИРОВАТЬ абонента..
функция rpcf_block_account($account_id,$block); //0x2037
блокирует, но попытки указать $block = 0 или null не увенчались успехом, абонент по-прежнему остается заблокированным.
в api.xml не нашел функции для разблокировки, соответственно, остается один вариант :
rpcf_get_accountinfo //0x2030 + rpcf_save_account //0x2032
впрочем, в его работоспособности я не уверен, если кто сталкивался, может подскажет, как ПРАВИЛЬНО разблокировать абонента..
Вот DataSetDouble
А это мой вариант rpcf_add_account. В отличие от варанта Wishmaster, добавил совместимость с rpcf_get_accountinfo, по массиву $account.
Выкладываю только те функции, только котрые тестил.
Код: Выделить всё
function DataSetDouble($param) {
$this->data[]=strrev(pack("d",$param));
$this->len += 12;
}
Код: Выделить всё
function rpcf_add_account($account,$user_id,$is_basic=1,$account_name='auto create account',$discount_period_id=0) { //0x2031
if (!urfa_call(0x2031)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
if (!isset($account['int_status']))
$account['int_status']=1;
$packet = new Packet();
$packet->DataSetInt($user_id);
$packet->DataSetInt($is_basic);
$packet->DataSetInt($account['is_blocked']);
$packet->DataSetString($account_name);
$packet->DataSetDouble($account['balance']);
$packet->DataSetDouble($account['credit']);
$packet->DataSetInt($discount_period_id);
$packet->DataSetInt($account['dealer_account_id']);
$packet->DataSetDouble($account['comission_coefficient']);
$packet->DataSetDouble($account['default_comission_value']);
$packet->DataSetInt($account['is_dealer']);
$packet->DataSetDouble($account['vat_rate']);
$packet->DataSetDouble($account['sale_tax_rate']);
$packet->DataSetInt($account['int_status']);
urfa_send_param($packet);
if ($x = urfa_get_data()) {
$ret=$x->DataGetInt();
urfa_get_data();
}
return $ret;
}
ds, огромное человеческое спасибо!!!
Буду переводить свой UTMtray ( viewtopic.php?t=5713&highlight= ) с костыльного личного кабинета на вашу разработку.
И прошу опубликовать ваш WMZ для donate, ибо такой проект грех не поддержать![Smile :)](./images/smilies/icon_smile.gif)
Буду переводить свой UTMtray ( viewtopic.php?t=5713&highlight= ) с костыльного личного кабинета на вашу разработку.
И прошу опубликовать ваш WMZ для donate, ибо такой проект грех не поддержать
![Smile :)](./images/smilies/icon_smile.gif)
Кто нибудь, опубликуйте api.xml, поиск не помог, в моем дистр. его нет, а методом тыка тяжело осваивать урфу.
Еще вопрос, не работает rpcf_add_to_ipgroup, в дебаге Internal error.
Это ведь функция добавления связки IP&MAC пользователю, или я ошибаюсь.
Также не нашел как узнать кол-во предоплаченного трафика, или эта функция еще не реализована?
Еще вопрос, не работает rpcf_add_to_ipgroup, в дебаге Internal error.
Это ведь функция добавления связки IP&MAC пользователю, или я ошибаюсь.
Также не нашел как узнать кол-во предоплаченного трафика, или эта функция еще не реализована?
Не к пользователю, а к ip-группе, т.е. id указывать надо ip-группы. Проверил, работает.Еще вопрос, не работает rpcf_add_to_ipgroup, в дебаге Internal error.
Это ведь функция добавления связки IP&MAC пользователю, или я ошибаюсь.
Это она?Также не нашел как узнать кол-во предоплаченного трафика, или эта функция еще не реализована?
Код: Выделить всё
function rpcf_get_prepaid_units($slink_id) { //0x5500
$ret=array();
if (!urfa_call(0x5500)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($slink_id);
urfa_send_param($packet);
$x = urfa_get_data();
$ret['bytes_in_mbyte'] = $x->DataGetInt();
$x = urfa_get_data();
$ret['pinfo_size'] = $x->DataGetInt();
for($i=0;$i<$ret['pinfo_size'];$i++) {
$x = urfa_get_data();
$pinfo['id'] = $x->DataGetInt();
$pinfo['old'] = $x->DataGetLong();
$pinfo['cur'] = $x->DataGetLong();
$ret[]=$pinfo;
}
urfa_get_data();
return $ret;
}
![Smile :)](./images/smilies/icon_smile.gif)
Можете подсказать что означает max_time() например в rpcf_save_account :
<integer name="block_end_date" default="max_time()"/>
Добавил rpcf_add_user. $user и $param массив можно использовать из ф-ции rpcf_get_userinfo
И соответственно немного изменил rpcf_get_userinfo, для удобства разделил массивы user, accounts и parameters
<integer name="block_end_date" default="max_time()"/>
Добавил rpcf_add_user. $user и $param массив можно использовать из ф-ции rpcf_get_userinfo
Код: Выделить всё
function rpcf_add_user($user,$parameters) { //0x2005
$ret=array();
if (!urfa_call(0x2005)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($user['user_id']);
$packet->DataSetString($user['login']);
$packet->DataSetString($user['password']);
$packet->DataSetstring($user['full_name']);
if ($user['user_id'] == 0){
$unused = 0;
$packet->DataSetInt($unused);
}
$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(count($parameters));
foreach ($parameters as $array_item){
$packet->DataSetInt($array_item['id']);
$packet->DataSetString($array_item['value']);
}
urfa_send_param($packet);
$ret['user_id']=0;
if($x = urfa_get_data()){
$z_user_id = $x->DataGetInt();
$error_msg = $x->DataGetString();
$ret['user_id']=$z_user_id;
$ret['error_msg']=$error_msg;
urfa_get_data();
}
return $ret;
}
Код: Выделить всё
function rpcf_get_userinfo($user_id) { //0x2006
$ret=array();
if (!urfa_call(0x2006)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = new Packet();
$packet->DataSetInt($user_id);
urfa_send_param($packet);
$x = urfa_get_data();
$user = $x->DataGetInt();
if ($user!=0) {
$ret['user']['user_id']= $user;
$accounts_count = $x->DataGetInt();
$ret['accounts_count']= $accounts_count;
for($i=0;$i<$accounts_count;$i++) {
$accounts['id']=$x->DataGetInt();
$accounts['name']=$x->DataGetString();
$ret['accounts'][]=$accounts;
}
$ret['user']['login']=$x->DataGetString();
$ret['user']['password']=$x->DataGetString();
$ret['basic_account']=$x->DataGetInt();
$ret['user']['full_name']=$x->DataGetString();
$ret['user']['create_date']=$x->DataGetInt();
$ret['user']['last_change_date']=$x->DataGetInt();
$ret['user']['who_create']=$x->DataGetInt();
$ret['user']['who_change']=$x->DataGetInt();
$ret['user']['is_juridical']=$x->DataGetInt();
$ret['user']['jur_address']=$x->DataGetString();
$ret['user']['act_address']=$x->DataGetString();
$ret['user']['work_tel']=$x->DataGetString();
$ret['user']['home_tel']=$x->DataGetString();
$ret['user']['mob_tel']=$x->DataGetString();
$ret['user']['web_page']=$x->DataGetString();
$ret['user']['icq_number']=$x->DataGetString();
$ret['user']['tax_number']=$x->DataGetString();
$ret['user']['kpp_number']=$x->DataGetString();
$ret['user']['bank_id']=$x->DataGetInt();
$ret['user']['bank_account']=$x->DataGetString();
$ret['user']['comments']=$x->DataGetString();
$ret['user']['personal_manager']=$x->DataGetString();
$ret['user']['connect_date']=$x->DataGetInt();
$ret['user']['email']=$x->DataGetString();
$ret['user']['is_send_invoice']=$x->DataGetInt();
$ret['user']['advance_payment']=$x->DataGetInt();
$ret['user']['house_id']=$x->DataGetInt();
$ret['user']['flat_number']=$x->DataGetString();
$ret['user']['entrance']=$x->DataGetString();
$ret['user']['floor']=$x->DataGetString();
$ret['user']['district']=$x->DataGetString();
$ret['user']['building']=$x->DataGetString();
$ret['user']['passport']=$x->DataGetString();
$ret['parameters_count']=$x->DataGetInt();
for ($i=0; $i < $ret['parameters_count']; $i++ ) {
$parameters['id']=$x->DataGetInt();
$parameters['value']=$x->DataGetString();
$ret['parameters'][]=$parameters;
}
}
urfa_get_data();
return $ret;
}
Последний раз редактировалось ds Сб янв 10, 2009 20:38, всего редактировалось 1 раз.
Означает максимально возможное с точки зрения биллинга время 2037 год вообщемds писал(а):Можете подсказать что означает max_time() например в rpcf_save_account :
<integer name="block_end_date" default="max_time()"/>
![Smile :)](./images/smilies/icon_smile.gif)
Конкретно в этом случае означает:
выставить дату завершения блокировки (если не указано явно) в дофига
есть аналогичная переменная в апи now() = текущее время.