forum.bitel.ru http://forum.bitel.ru/ |
|
Открытие шлюза (CRM) http://forum.bitel.ru/viewtopic.php?f=7&t=9601 |
Страница 1 из 1 |
Автор: | billingist [ 21 авг 2014, 15:53 ] |
Заголовок сообщения: | Открытие шлюза |
Шлюз абонента блокируется первого числа на с открыт на заблокировано по задолженности (должником считается договор, остаток баланса которого менее абонплаты). По приходу платежа на счет баланс меняется, а шлюз так и остается заблокирован, статус договора при этом активен. status.after.unlock=0 |
Автор: | stark [ 21 авг 2014, 16:07 ] |
Заголовок сообщения: | Re: Открытие шлюза |
режим договора какой дебет или кредит ? |
Автор: | billingist [ 21 авг 2014, 16:14 ] |
Заголовок сообщения: | Re: Открытие шлюза |
дебет, обсчет логов, проверка шлюзов работает. |
Автор: | stark [ 21 авг 2014, 16:34 ] |
Заголовок сообщения: | Re: Открытие шлюза |
а версия какая ? |
Автор: | billingist [ 21 авг 2014, 18:02 ] |
Заголовок сообщения: | Re: Открытие шлюза |
Клиент: вер. 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 |
Автор: | stark [ 22 авг 2014, 11:25 ] |
Заголовок сообщения: | Re: Открытие шлюза |
billingist писал(а): Шлюз абонента блокируется первого числа на с открыт на заблокировано по задолженности (должником считается договор, остаток баланса которого менее абонплаты). По приходу платежа на счет баланс меняется, а шлюз так и остается заблокирован, статус договора при этом активен. status.after.unlock=0 А если подробнее. У вас закрыло статус договора с помощью маханизма дебетовых абонплат первого числа. И сразу же заблокировало шлюз IPN(статус IPN стал заблокирован). Потом по приходу платежа открыло статус договора, но не открыло статус IPN. Так ? |
Автор: | billingist [ 22 авг 2014, 11:37 ] |
Заголовок сообщения: | Re: Открытие шлюза |
статус договора все время "активен"... не меняется по приходу платежа статус IPN с заблокирован на открыт. |
Автор: | stark [ 22 авг 2014, 12:23 ] |
Заголовок сообщения: | Re: Открытие шлюза |
проверьте запросом вот эту таблицу: Цитата: select * from script_event_queue Есть в ней что-нибудь? |
Автор: | billingist [ 22 авг 2014, 14:46 ] |
Заголовок сообщения: | Re: Открытие шлюза |
пусто |
Автор: | stark [ 22 авг 2014, 14:48 ] |
Заголовок сообщения: | Re: Открытие шлюза |
Сервер биллинг с тех пор не перезагружали ? В вы ошибку на тестовом договоре можете воспроизвести сейчас ? |
Автор: | billingist [ 22 авг 2014, 17:21 ] |
Заголовок сообщения: | Re: Открытие шлюза |
сервер не перезагружался |
Автор: | stark [ 22 авг 2014, 17:50 ] |
Заголовок сообщения: | Re: Открытие шлюза |
Я у себя на 5.1 вашей версии на тестовом договоре, статус актвен,режим - дебет. Добавил расход, чтобы увести ниже лимита. Статус шлюза перевел вручную в заблокирован, чтобы не запускать задачу проверки шлюзов. Потом добавил платеж, чтолбы баланс стал больше лимита. Статус шлюза автоматически открылся. Если у вас это не работает, то давайте доступ - посмотрим. У вас никаких ошибок в логах сервера нет ? желательно логи сохранить для разбора. |
Автор: | stark [ 22 авг 2014, 17:52 ] |
Заголовок сообщения: | Re: Открытие шлюза |
покажите еще вкладку Шлюзы в договоре. |
Автор: | billingist [ 22 авг 2014, 18:17 ] |
Заголовок сообщения: | Re: Открытие шлюза |
ошибок в логах нет, оплата поступает по скрипту : #!/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; } } |
Автор: | stark [ 22 авг 2014, 19:00 ] |
Заголовок сообщения: | Re: Открытие шлюза |
billingist писал(а): ошибок в логах нет, оплата поступает по скрипту : Ну тогда понятно. Биллинг то никак не узнает о получении платежа. Ему нужно событие кинуть. Лучше бы вы платеж добавили с помощью hhtp-запроса. |
Автор: | billingist [ 26 авг 2014, 12:31 ] |
Заголовок сообщения: | Re: Открытие шлюза |
куда кидать событие? |
Автор: | stark [ 27 авг 2014, 11:32 ] |
Заголовок сообщения: | Re: Открытие шлюза |
billingist писал(а): куда кидать событие? Событие можно кидать из явовоского кода Код: EventProcessor.getProcessor().processEvent( con, new PaymentEvent( userID, payment ) ); В 5.1 событие, если послать его асинхронно, это строка в базе. Ну туда помещается серилизованный объект java. Поэтому опять же без Java не обойтись. Если нужно добавить платеж из внешней системы, то проще сделать это http-запросом, тогда и платеж корректно добавится и событие бросится. Чтобы знать какой запрос, запустите клиента в режиме debug (там файл *_debug есть), сделайте платеж и посмотрите в log-файле запрос. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |