BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 28 мар 2024, 14:50

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: Открытие шлюза
СообщениеДобавлено: 21 авг 2014, 15:53 
Не в сети

Зарегистрирован: 27 май 2014, 16:27
Сообщения: 12
Карма: 0
Шлюз абонента блокируется первого числа на с открыт на заблокировано по задолженности (должником считается договор, остаток баланса которого менее абонплаты). По приходу платежа на счет баланс меняется, а шлюз так и остается заблокирован, статус договора при этом активен.
status.after.unlock=0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 21 авг 2014, 16:07 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
режим договора какой дебет или кредит ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 21 авг 2014, 16:14 
Не в сети

Зарегистрирован: 27 май 2014, 16:27
Сообщения: 12
Карма: 0
дебет, обсчет логов, проверка шлюзов работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 21 авг 2014, 16:34 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
а версия какая ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 21 авг 2014, 18:02 
Не в сети

Зарегистрирован: 27 май 2014, 16:27
Сообщения: 12
Карма: 0
Клиент: вер. 5.1 сборка 696 от 24.03.2014 18:08:15
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_45
Сервер: вер. 5.1 сборка 862 от 24.03.2014 18:08:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_23
ipn вер. 5.1 сборка 263 от 12.02.2013 15:02:12


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 11:25 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
billingist писал(а):
Шлюз абонента блокируется первого числа на с открыт на заблокировано по задолженности (должником считается договор, остаток баланса которого менее абонплаты). По приходу платежа на счет баланс меняется, а шлюз так и остается заблокирован, статус договора при этом активен.
status.after.unlock=0


А если подробнее. У вас закрыло статус договора с помощью маханизма дебетовых абонплат первого числа. И сразу же заблокировало шлюз IPN(статус IPN стал заблокирован). Потом по приходу платежа открыло статус договора, но не открыло статус IPN. Так ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 11:37 
Не в сети

Зарегистрирован: 27 май 2014, 16:27
Сообщения: 12
Карма: 0
статус договора все время "активен"... не меняется по приходу платежа статус IPN с заблокирован на открыт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 12:23 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
проверьте запросом вот эту таблицу:
Цитата:
select * from script_event_queue


Есть в ней что-нибудь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 14:46 
Не в сети

Зарегистрирован: 27 май 2014, 16:27
Сообщения: 12
Карма: 0
пусто


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 14:48 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Сервер биллинг с тех пор не перезагружали ? В вы ошибку на тестовом договоре можете воспроизвести сейчас ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 17:21 
Не в сети

Зарегистрирован: 27 май 2014, 16:27
Сообщения: 12
Карма: 0
сервер не перезагружался


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 17:50 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Я у себя на 5.1 вашей версии на тестовом договоре, статус актвен,режим - дебет. Добавил расход, чтобы увести ниже лимита. Статус шлюза перевел вручную в заблокирован, чтобы не запускать задачу проверки шлюзов. Потом добавил платеж, чтолбы баланс стал больше лимита. Статус шлюза автоматически открылся. Если у вас это не работает, то давайте доступ - посмотрим.

У вас никаких ошибок в логах сервера нет ? желательно логи сохранить для разбора.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 17:52 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
покажите еще вкладку Шлюзы в договоре.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 18:17 
Не в сети

Зарегистрирован: 27 май 2014, 16:27
Сообщения: 12
Карма: 0
ошибок в логах нет, оплата поступает по скрипту :

#!/usr/bin/perl

use Time::localtime;
use Date::Calc qw(Add_Delta_Days);
use DBI;

$delta_days_now = @ARGV[0];
$delta_days_next = @ARGV[1];

if($delta_days_now eq ""){
$delta_days_now=0;
}
if($delta_days_next eq ""){
$delta_days_next=1;
}
##
$date_mssql_now = return_delta_time($tm_yy,$tm_mm,$tm_dd,$delta_days_now);
$date_mssql_next = return_delta_time($tm_yy,$tm_mm,$tm_dd,$delta_days_next);

$result_no = 0;
$result_ok = 1;
$result_not_found = 2;
$status_ok = 7;
$pt = 39;
$uid = 1;
$error = 0;
$file = "/usr/local/BGBIllingServer/script/terminal_payment/terminal_payment.log";
##

##Настройки отправки отчета
open(FILE,"< mailto.txt");
while(<FILE>){
if(($_ eq "") or ($_ =~/\#/)){
next;
}
chomp;

push(@mailto,$_);
}
close FILE;

$smtpemailfrom="bgbilling\.....";
$subject="Терминал платеж";
$body="Сообщение сгенерировано автоматически";
$attachment=$file;
$smtpserver=".....";
$smtplogin="bgbilling\......";
$smtppass="BGBilling.......";
##

open(FILE,"> $file");
flock(FILE,2);

#Данные для коннекта к MS SQL (....)
$ms_sql="DBI:Sybase:server=.....:1091;database=Terminals";
$user="bill";
$password="billing";

#Данные для коннекта к MySQL (......)
$db_host = "localhost";
$db_base = "bgbilling";
$db_user = "root";
$db_pass = "......";
$dsn = "DBI:mysql:$db_base:$db_host";
$dbh_mysql = DBI->connect($dsn, $db_user, $db_pass);
$dbh_mysql -> do("SET NAMES cp1251");

$dbh_mssql = DBI->connect("$ms_sql",$user,$password);

$sql_mssql = "SELECT PaymentID,SessionNumber,TerminalID,convert(varchar(20),
PaymentDateTime,20),
StatusID,ErrorCode,Params,Amount,OperatorID,InitialSessionNumber,AmountAll,
Notes FROM dbo.Payments
WHERE PaymentDateTime >= convert(datetime,?,104) AND PaymentDateTime < convert(datetime,?,104) ORDER BY PaymentID" ;

$sth_mssql = $dbh_mssql -> prepare($sql_mssql) or ($error = 1);
$sth_mssql -> execute($date_mssql_now,$date_mssql_next);

if($error == 0){
while (@mssql = $sth_mssql -> fetchrow_array()) {
$sql_mysql = "SELECT COUNT(*) FROM `terminal_payment` WHERE `paymentid`=?";
$sth_mysql = $dbh_mysql -> prepare($sql_mysql) or ($error = 1);
$sth_mysql -> execute($mssql[0]);
if($error == 0){
$count = $sth_mysql -> fetchrow_array();
if($count == 0){
$cid = return_cid($mssql[6]);
$sql_mysql_ins = "INSERT INTO `terminal_payment` VALUES('$mssql[0]','$mssql[1]','$mssql[2]','$mssql[3]','$mssql[4]','$mssql[5]','$cid','$mssql[7]','$mssql[8]','$mssql[9]','$mssql[10]','$mssql[11]','$mssql[12]')";
$dbh_mysql -> do($sql_mysql_ins);
}
else{
next;
}
}
else{
print FILE "MySQL: Ошибка выборки количества записей из таблицы terminal_payment\t";
}
}
}
else{
print FILE "MSSQL: Ошибка выборки записей из таблицы dbo.Payments\t";
}
$dbh_mssql -> disconnect;

$sql_mysql = "SELECT paymentdatetime,cid,amountall,paymentid,operatorid FROM `terminal_payment` WHERE `result`=? AND `statusid`=?";
$sth_mysql = $dbh_mysql -> prepare($sql_mysql);
$sth_mysql -> execute($result_no,$status_ok);
while (@mysql = $sth_mysql -> fetchrow_array()){
$dt = return_data($mysql[0]);
$comment = "Терминал (автоматический платеж id=$mysql[3])";
if(control_cid($mysql[1])){
$sql_mysql = "INSERT INTO `contract_payment`(`dt`,`cid`,`pt`,`uid`,`summa`,`comment`,`time_change`) VALUES('$dt','$mysql[1]','$pt','$uid','$mysql[2]','$comment','$mysql[0]')";
$dbh_mysql -> do($sql_mysql) or ($error=1);
if($error == 0){
($yy,$mm,$dd) = split(/\-/,$dt);
$sql_mysql1 = "SELECT SUM(summa) FROM `contract_payment` WHERE `cid`='$mysql[1]' AND `dt` LIKE '$yy-$mm-%'";
$sth_mysql1 = $dbh_mysql -> prepare($sql_mysql1);
$sth_mysql1 -> execute();
$summa_tmp = $sth_mysql1 -> fetchrow_array();
$sql_mysql = "UPDATE `contract_balance` SET `summa2`='$summa_tmp' WHERE `cid`='$mysql[1]' AND `yy`='$yy' AND `mm`='$mm'";
$dbh_mysql -> do($sql_mysql);
$sql_mysql = "UPDATE `terminal_payment` SET `result`='$result_ok' WHERE `paymentid`='$mysql[3]'";
$dbh_mysql -> do($sql_mysql);
print FILE "Платеж: дата($mysql[0])\tID($mysql[1])\tСумма($mysql[2])\tуспешно внесен\n";
}
else{
$sql_mysql = "UPDATE `terminal_payment` SET `result`='$result_not_found' WHERE `paymentid`='$mysql[3]'";
$dbh_mysql -> do($sql_mysql);
print FILE "Платеж: дата($mysql[0])\tID($mysql[1])\tСумма($mysql[2])\tошибка ввода(причина не определена)\n";


$comment = "Ошибочный л\/с $mysql[1]";

if($mysql[4] == 600){
$mysql[1] = "9962";
}
if($mysql[4] == 601){
$mysql[1] = "14707";
}

$sql_mysql = "INSERT INTO `contract_payment`(`dt`,`cid`,`pt`,`uid`,`summa`,`comment`,`time_change`) VALUES('$dt','$mysql[1]','$pt','$uid','$mysql[2]','$comment','$mysql[0]')";
$dbh_mysql -> do($sql_mysql) or ($error=1);
if($error == 0){
($yy,$mm,$dd) = split(/\-/,$dt);
$sql_mysql1 = "SELECT SUM(summa) FROM `contract_payment` WHERE `cid`='$mysql[1]' AND `dt` LIKE '$yy-$mm-%'";
$sth_mysql1 = $dbh_mysql -> prepare($sql_mysql1);
$sth_mysql1 -> execute();
$summa_tmp = $sth_mysql1 -> fetchrow_array();
$sql_mysql = "UPDATE `contract_balance` SET `summa2`='$summa_tmp' WHERE `cid`='$mysql[1]' AND `yy`='$yy' AND `mm`='$mm'";
$dbh_mysql -> do($sql_mysql);



}
}
}
else{
$sql_mysql = "UPDATE `terminal_payment` SET `result`='$result_not_found' WHERE `paymentid`='$mysql[3]'";
$dbh_mysql -> do($sql_mysql);
print FILE "Платеж: дата($mysql[0])\tID($mysql[1])\tСумма($mysql[2])\tошибка ввода(не найден ID)\n";
$comment = "Ошибочный л\/с $mysql[1]";

if($mysql[4] == 600){
$mysql[1] = "9962";
}
if($mysql[4] == 601){
$mysql[1] = "14707";
}

$sql_mysql = "INSERT INTO `contract_payment`(`dt`,`cid`,`pt`,`uid`,`summa`,`comment`,`time_change`) VALUES('$dt','$mysql[1]','$pt','$uid','$mysql[2]','$comment','$mysql[0]')";
$dbh_mysql -> do($sql_mysql) or ($error=1);
if($error == 0){
($yy,$mm,$dd) = split(/\-/,$dt);
$sql_mysql1 = "SELECT SUM(summa) FROM `contract_payment` WHERE `cid`='$mysql[1]' AND `dt` LIKE '$yy-$mm-%'";
$sth_mysql1 = $dbh_mysql -> prepare($sql_mysql1);
$sth_mysql1 -> execute();
$summa_tmp = $sth_mysql1 -> fetchrow_array();
$sql_mysql = "UPDATE `contract_balance` SET `summa2`='$summa_tmp' WHERE `cid`='$mysql[1]' AND `yy`='$yy' AND `mm`='$mm'";
$dbh_mysql -> do($sql_mysql);
}
}
}

#$dbh_mysql -> disconnect;

close FILE;
flock(FILE,8);

if( -s($file)){
foreach $mailto(@mailto){
system("/usr/bin/sendEmail -f $smtpemailfrom -t $mailto -u $subject -m $body -a $attachment -s $smtpserver:25 -xu $smtplogin -xp $smtppass");
}
}


#Обработка и возврат даты в формате дд.мм.гггг
sub return_delta_time{
$tm = localtime;
($tm_dd, $tm_mm, $tm_yy) = ($tm -> mday, $tm -> mon + 1, $tm -> year + 1900);
($tm_yy, $tm_mm, $tm_dd)= Add_Delta_Days($_[0], $_[1], $_[2], $_[3]);
if($tm_mm < 10){
$tm_mm = "0$tm_mm";
}
return "$tm_dd.$tm_mm.$tm_yy";
}
#Выборка cid
sub return_cid{
my ($a,$b,$cid);
($a,$b)=split(/\&/,$_[0]);
($a,$cid)=split(/\=/,$b);
return $cid;
}
#Выборка даты
sub return_data{
my($a,$b);
($a,$b)=split(/\s/,$_[0]);
return $a;
}
#проверка cid
sub control_cid{
my($sql_mysql,$result,$sth_mysql);
$sql_mysql = "SELECT COUNT(*) FROM `contract` WHERE `id`=?";
$sth_mysql = $dbh_mysql->prepare($sql_mysql);
$sth_mysql -> execute($_[0]);
$result = $sth_mysql -> fetchrow_array();
if($result == 0){
return 0;
}
else{
return 1;
}
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 22 авг 2014, 19:00 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
billingist писал(а):
ошибок в логах нет, оплата поступает по скрипту :


Ну тогда понятно. Биллинг то никак не узнает о получении платежа. Ему нужно событие кинуть. Лучше бы вы платеж добавили с помощью hhtp-запроса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 26 авг 2014, 12:31 
Не в сети

Зарегистрирован: 27 май 2014, 16:27
Сообщения: 12
Карма: 0
куда кидать событие?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Открытие шлюза
СообщениеДобавлено: 27 авг 2014, 11:32 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
billingist писал(а):
куда кидать событие?




Событие можно кидать из явовоского кода
Код:
EventProcessor.getProcessor().processEvent( con, new PaymentEvent( userID, payment ) );


В 5.1 событие, если послать его асинхронно, это строка в базе. Ну туда помещается серилизованный объект java. Поэтому опять же без Java не обойтись.


Если нужно добавить платеж из внешней системы, то проще сделать это http-запросом, тогда и платеж корректно добавится и событие бросится. Чтобы знать какой запрос, запустите клиента в режиме debug (там файл *_debug есть), сделайте платеж и посмотрите в log-файле запрос.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.100s | 53 Queries | GZIP : On ]