Биллинговая система Nodeny
25 Ноября 2024, 22:46:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: тимчасовий платіж  (Прочитано 15166 раз)
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« : 10 Ноября 2010, 14:22:13 »

поставив модуль "Обіцяний платіж" щоб користувач сам міг себе включати з особистого кабінету, на його рахунок вноситься тимчасова сума, ніби все ок, але чомусь він автоматично не включається, навіть після рестарту ядра нодені, а коли вручну йому внести тимчасово гроші, то включається автоматично, в чому може бути проблема ??
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #1 : 10 Ноября 2010, 14:28:39 »

Я так думаю в модуле.
Вот как делается при добавлении платежа в нодени:
pays.pl
Код:
 735     # Проверим, отключен ли юзер имея положительный баланс или баланс выше границы отключения.
 736     # Если да, то напомним, что неплохо бы включить (или сами включим если настроки указывают)
 737     # Не забываем что может быть ситуация когда основная запись включена, а алиасная выключена
 738     {
 739       $p->{block_if_limit} or last;
....
 755       if( $auto_on==2 )
 756       {  # разрешим доступ
 757          &sql_do($dbh,"UPDATE users SET state='on' WHERE id=$Fmid OR mid=$Fmid");
 758          $pay_made_mess.=$br2.'Доступ в интернет разрешен - баланс выше установленного лимита.';
 759          $state_off=" После осуществления платежа доступ в интернет был открыт";
 760       }else
 761       {
 762          $pay_made_mess.=$br2.'Не забудьте разрешить доступ в интернет - баланс выше установленного лимита.';
 763          $state_off=" Необходимо включить доступ в интернет";
 764       }
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #2 : 10 Ноября 2010, 14:38:16 »

якщо чесно то я в перлі не дуже розбираюся, куда вставляти цей код ?
ось сам модуль:


Код:
#!/usr/bin/perl
# ------------------- NoDeny ------------------
# Copyright (с) Volik Stanislav, 2008, 2009
# Copyright (с) smallcms, 2010
# Read license http://nodeny.com.ua/license.txt
# ---------------------------------------------
$VER=49.32;

sub PROMI_main
{
 $promisepaylivedays = 1; #если 0 - не учитываем параметр, срок действия временного платежа в днях
 $promisepaymaxinmonth = 2; #если 0 - не учитываем параметр, максимально допустимое количество пользования услогой в месяц (начиная с первого числа)
 $promisepayforpay = 500; #если 0 - не учитываем параметр, сумма списания за пользование услугой
 $promisepayminimumpay = 1000 + $promisepayforpay; #минимальная сумма временного платежа + сумма снятия за услугу
 $promisepaymaximumpay = 20000; #максимальная сумма временного платежа
 $prmpay=$F{prmpay};
 $form=&div('cntr',
   &form('!'=>1,
     ($promisepayforpay > 0 ? 'Если Ваш баланс близок к нулю, а пополнить счет возможности нет, воспользуйтесь услугой «Обещанный платеж». По Вашему запросу Вам будет зачислен временный платеж, и Вы сможете продолжать пользоваться нашими услугами. Не забудьте пополнить счет до истечения срока действия «обещанного платежа». Через ' . $promisepaylivedays . ' дней после активации, сумма «обещанного платежа» будет автоматически полностью списана с Вашего счета. ' . $br .
         &bold('Введите сумму обещанного платежа (минимум ' . $promisepayminimumpay . ' ' . $gr . '): ').&input_t('prmpay',$prmpay,20,18,' autocomplete="off"')
         .$br2 . 'Дополнительно за использование услуги «Обещанный платеж» с платежа будет списана сумма в размере ' . $promisepayforpay . ' ' . $gr :
         'Если Ваш баланс близок к нулю, а пополнить счет возможности нет, воспользуйтесь услугой «Обещанный платеж». По Вашему запросу Вам будет зачислен временный платеж, и Вы сможете продолжать пользоваться нашими услугами. Не забудьте пополнить счет до истечения срока действия «обещанного платежа». Через ' . $promisepaylivedays . ' дней после активации, сумма «обещанного платежа» будет автоматически полностью списана с Вашего счета. ' . $br .
         &bold('Введите сумму обещанного платежа (минимум ' . $promisepayminimumpay . ' ' . $gr . '): ').&input_t('prmpay',$prmpay,20,18,' autocomplete="off"')
     ).$br2.&submit_a('Пополнить')
   )
 );

 #выборка количества использований услуги за последние promisepaylivedays дней
 $countprmpaysql1=&sql_select_line($dbh,"SELECT COUNT(*) FROM pays WHERE `mid`=$Mid AND `type` =50 AND `category` =900 AND `time` > UNIX_TIMESTAMP( SUBDATE( NOW( ) , $promisepaylivedays ) )");
 &Error('проблема с БД.') unless $countprmpaysql1;
 #считаем количество использований услуги
 $countprmpays1=$countprmpaysql1->{'COUNT(*)'};
 #выводим сообщение пользователю, который вконец потерял совесть
 &Error('Вы уже использовали услугу «Обещанный платеж» менее, чем ' . $promisepaylivedays . ' дней назад.') if $countprmpays1 > 0 && $promisepaylivedays != 0;

 #выборка количества использований услуги в этом месяце
 $countprmpaysql2=&sql_select_line($dbh,"SELECT COUNT(*) FROM pays WHERE `mid`=$Mid AND `type` =50 AND `category` =900 AND `time` > UNIX_TIMESTAMP( DATE_FORMAT( NOW( ) , '%Y-%m-01' ) )");
 &Error('проблема с БД.') unless $countprmpaysql2;
 #считаем количество использований услуги
 $countprmpays2=$countprmpaysql2->{'COUNT(*)'};
 #выводим сообщение пользователю, который вконец потерял совесть
 &Error('Вы уже использовали услугу «Обещанный платеж» в этом месяце максимально допустимое количество раз.') if $countprmpays2 >= $promisepaymaxinmonth && $promisepaymaxinmonth != 0;

 #если из браузера клиента не пришла сумма
 unless (defined $F{prmpay})
   {
    #Показываем форму ввода клиенту
    $OUT.=&MessX($form,1);
    return;
   }

 #проверка на длину символов
 &Error('Вы ввели неправильное количество символов в сумме обещанного платежа.',$EOUT) if length($prmpay)<1 || length($prmpay)>20;
 #проверка на корректность (работаем только с цифрами)
 &Error('Использованы недопостимые символы.',$EOUT) if $prmpay!~/^[0-9]+$/;
 #проверка на минимальный платёж
 &Error('Сумма обещанного платежа указана меньше минимально допустимой.',$EOUT) if $prmpay<$promisepayminimumpay;
 #проверка на максимальный платёж
 &Error('Сумма обещанного платежа указана больше максимально допустимой (' . $promisepaymaximumpay . ').',$EOUT) if $prmpay>$promisepaymaximumpay;

 #всё нормально

 #если указано списывать сумму за услугу
 if ($promisepayforpay > 0)
   {
    #списываем сумму в размере promisepayforpay за услугу Обещанный платеж
    $sql="INSERT INTO pays (mid,cash,type,bonus,category,admin_id,admin_ip,reason,coment,time) ".
         "VALUES($Mid,$promisepayforpay,10,'',600,$Adm{id},INET_ATON('$RealIp'),'','За услугу Обещанный платеж',$t)";
    $rows=&sql_do($dbh,$sql);
    &ToLog("! mid $Mid использовал услугу Обещанный платеж (запись списания) $prmpay $gr, но произошла ошибка внесения платежа в таблицу платежей.") if $rows<1;
   }

 #начинаем формировать временный платёж
 #создаём переменную времени окончания платежа (текущее время + количество суток из конфига)
 #если нужно удвоить, утроить срок - цифры ниже. множте, плюсуйте
 $time=$t+$promisepaylivedays*3600*24;
 #отнимаем от суммы платежа стоимость услуги, т.к. сняли за услугу ранее
 $prmpaytmp = $prmpay - $promisepayforpay;
 $sql="INSERT INTO pays (mid,cash,type,bonus,category,admin_id,admin_ip,reason,coment,time) ".
      "VALUES($Mid,$prmpaytmp,20,'y',1000,$Adm{id},INET_ATON('$RealIp'),'','Обещанный платеж',$time)";
 $rows=&sql_do($dbh,$sql);
 &ToLog("! mid $Mid использовал услугу Обещанный платеж $prmpay $gr, но произошла ошибка внесения платежа в таблицу платежей.") if $rows<1;

 #начинаем формировать собитие 900, которое будет блокировать повторные злоупотребления модулем
 $sql="INSERT INTO pays (mid,cash,type,bonus,category,admin_id,admin_ip,reason,coment,time) ".
      "VALUES($Mid,'',50,'',900,$Adm{id},INET_ATON('$RealIp'),'','Обещанный платеж',$t)";
 $rows=&sql_do($dbh,$sql);
 &ToLog("! mid $Mid использовал услугу Обещанный платеж (блокирующая запись) $prmpay $gr, но произошла ошибка внесения платежа в таблицу платежей.") if $rows<1;

 #начинаем формировать внесение в таблицу платежей
 $rows=&sql_do($dbh,"UPDATE users SET balance=balance+($prmpay) WHERE id=$Mid LIMIT 1");
 if ($rows<1)
   {
    &ToLog("! mid $Mid использовал услугу Обещанный платеж $prmpay $gr, но после внесения платежа в таблицу платежей произошла ошибка изменения баланса клиента");
    &Error("Произошла ошибка пополнения счета. Обратитесь к администрации.",$EOUT);
   }

 #сообщаем клиенту, что всё нормально
 &OkMess(&bold_br($promisepayforpay!=0 ? "Ваш счет пополнен на $prmpay $gr из них $promisepayforpay удержано на оплату услуги «Обещанный платеж»" : "Ваш счет пополнен на $prmpay $gr").'Если текущих средств достаточно для включения доступа в интернет - доступ будет включен в течение нескольких минут.'.$br2);

}

1;
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #3 : 10 Ноября 2010, 15:16:34 »

Я не знаю, что хотелось сказать вот этим:
Код:
&OkMess(&bold_br($promisepayforpay!=0 ? "Ваш счет пополнен на $prmpay $gr из них $promisepayforpay удержано на оплату услуги «Обещанный платеж»" : "Ваш счет пополнен на $prmpay $gr").'Если текущих средств достаточно для включения доступа в интернет - доступ будет включен в течение нескольких минут.'.$br2);
Откуда беруться эти несколько мин. не пойму.
в строке 1019 nodeny.pl это при удалении временного платежа.

Код:
./web/pays.pl:740:      $p=&sql_select_line($dbh,"SELECT * FROM users WHERE (id=$Fmid OR mid=$Fmid) AND state='off' LIMIT 1",'Åñòü ëè õîòÿ áû îäíà çàáëîêèðîâàííàÿ çàïèñü ó êëèåíòà?');
./web/pays.pl:757:         &sql_do($dbh,"UPDATE users SET state='on' WHERE id=$Fmid OR mid=$Fmid");
./web/Scards.pl:109: &sql_do($dbh,"UPDATE users SET state='on' WHERE id=$Mid OR mid=$Mid");
./web/listuser.pl:330:  '3' => ["$sel_from_users state='off'", 'Êîìó çàïðåùåí äîñòóï'],
./nodeny.pl:90:$now_on_sql="(auth IN ('on','ong','off') OR lstate=1) AND state='on'";
./nodeny.pl:92:# $Udeny{$id} óñòàíîâëåí, åñëè äîñòóï äëÿ $id çàïðåùåí æåñòêî, ò.å â ÁÄ ïîëå state='off'
./nodeny.pl:684: $rows=&sqldo("UPDATE users SET state='off' WHERE id=$id LIMIT 1");
./nodeny.pl:1019:     $sql=$cash<0? ", state='on'" : '';
./nodeny.pl:1886:         $rows=$dbh->do("UPDATE users SET state='off' WHERE id=$id LIMIT 1");
./nodeny.orig.pl:89:$now_on_sql="(auth IN ('on','ong','off') OR lstate=1) AND state='on'";

Потому предлагаю сделать так:
перед:
Код:
#сообщаем клиенту, что всё нормально
вставить такое:
Код:
&sql_do($dbh,"UPDATE users SET state='on' WHERE id=$Mid AND blance > limit_balance",'Включаем если баланс больше лимита');
#сообщаем клиенту, что всё нормально
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #4 : 10 Ноября 2010, 17:20:12 »

зробив як ви написали але нічого не змінилося - дальше не включає після поповнення
Записан
Aivanzipper
NoDeny
Старожил
*

Карма: 62
Offline Offline

Сообщений: 387


206967443
Просмотр профиля
« Ответ #5 : 10 Ноября 2010, 17:53:24 »

blance в sql-запросе правильно написан?
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #6 : 10 Ноября 2010, 18:13:20 »

все запрацювало, дякую!
« Последнее редактирование: 10 Ноября 2010, 18:17:39 от Андрій » Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #7 : 10 Ноября 2010, 18:42:38 »

Copy-paste -- рулит!
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #8 : 10 Ноября 2010, 18:51:56 »

 Улыбающийся тепер буду уважніший при копіюванні
Записан
smallcms
NoDeny
Старожил
*

Карма: 64
Offline Offline

Сообщений: 279



Просмотр профиля WWW
« Ответ #9 : 10 Ноября 2010, 21:00:10 »

Улыбающийся тепер буду уважніший при копіюванні
Я так понял вы пользуете очень сырую (одну из первых версий) модуля, который начинал разрабатывать я.

попробуйте скачать новую версию: http://code.google.com/p/nodeny49modules/ , т.к. по функционалу последние версии уходят далеко вперёд в отличии от той версии, которую вы сейчас используете...
Записан

Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #10 : 11 Ноября 2010, 14:06:03 »

коли ставлю останню версію то не заходить в статистиці в цей пункт, пише ErrorDocument 500 , коли вертаю стару версію то все ок
Записан
Aivanzipper
NoDeny
Старожил
*

Карма: 62
Offline Offline

Сообщений: 387


206967443
Просмотр профиля
« Ответ #11 : 11 Ноября 2010, 14:34:51 »

Смотрите логи апача.
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #12 : 11 Ноября 2010, 14:36:40 »

Последняя это вот эта: http://code.google.com/p/nodeny49modules/downloads/detail?name=Spromisedpay0.06.zip&can=2&q=?
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #13 : 11 Ноября 2010, 14:49:40 »

ось що в логах апача:


Код:
[Thu Nov 11 14:46:05 2010] [error] [client 10.1.1.5] Undefined subroutine &main::PROMI_main called at /usr/local/www/apache22/cgi-bin/adm/stat.pl line 413., referer: https://10.1.1.1/cgi-bin/adm/stat.pl?pp=T1-303579853oz9sVMve9kxcrmqxPIoENg&a=101&id=77&a=119
[Thu Nov 11 14:46:05 2010] [error] [client 10.1.1.5] Premature end of script headers: stat.pl, referer: https://10.1.1.1/cgi-bin/adm/stat.pl?pp=T1-303579853oz9sVMve9kxcrmqxPIoENg&a=101&id=77&a=119

що це означає ?
Записан
Aivanzipper
NoDeny
Старожил
*

Карма: 62
Offline Offline

Сообщений: 387


206967443
Просмотр профиля
« Ответ #14 : 11 Ноября 2010, 14:52:09 »

Ругается на субрутину PROMI_main. Посмотрите, как она называется в новой версии скрипта и внесите соответствующие поправки в реестр плагинов.
Записан
Страниц: [1] 2
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!