forum.bitel.ru http://forum.bitel.ru/ |
|
Загрузка платежа из файла http://forum.bitel.ru/viewtopic.php?f=22&t=4077 |
Страница 1 из 2 |
Автор: | Sirrin [ 25 май 2010, 15:50 ] |
Заголовок сообщения: | Загрузка платежа из файла |
Приветствую! Помогите разобраться в сабже. Содержимое файла имеет следующий вид: 18052010|294|1|1000|||2010051877630776300220000396 Интересует, как будет выглядеть regexp строки: payment.load.pattern.1.regexp= Ориентиры: 294 - название договора 1000 - сумма платежа regexp не знаю, пока что... |
Автор: | Администратор [ 31 май 2010, 18:14 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Ну как-то так попробуйте: Код: payment.load.pattern.1.regexp=(\d+)\|(\d+)\|(\d+)\|(\d+)\|+(\d+)
|
Автор: | Sirrin [ 01 июн 2010, 10:03 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Ясно. Спасибо. Пока ждал ответа уже сам пришёл к примерно такому же варианту. Почитал регэкспы.Однако, оказалось, что ещё нужно перед 2-мя последними цифрами ставить точку, т.е., прилетает цифра 1000, а биллинг должен понять, что это выглядит как 10.00 и принять платёж. Умеют ли регэкспы вставлять символ "точка" ? Пока не знаю. |
Автор: | Sirrin [ 01 июн 2010, 16:57 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
И ещё, понадобилось, чтобы биллинг понимал буквы и символы в названии договора: я написал регэксп вида: Код: (\d+)\|([А-ЯA-Z]{1,}.?\d+|[А-ЯA-Z]{1,}.?|\d+)\|(\d+)\|(\d+)\|+([\d]+) Однако биллинг отказывается его понимать. Зато мой первый вариант: Код: (\d+)\|(\d+)\|(\d+)\|(\d+)\|{1,3}([\d]+) рабочий. Кстати, очень похож на Ваш. Почему мой регэксп, биллинг не понимает?
|
Автор: | skn [ 01 июн 2010, 17:13 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
а какие договора у вас буквами, пример можете дать... |
Автор: | Sirrin [ 02 июн 2010, 08:10 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Пример: СКПТм-2056, Ц-249 |
Автор: | snark [ 03 июн 2010, 01:23 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
слово "Мама" не попадет под регексп Код: [А-Я] а вот слово "МАМА" попадет ... чтобы попадали оба слова, регексп должен быть таким: Код: [А-Яа-я] как то встречалось что буквы "Ё" и "Й" не попадают под регексп, так что, если такие договора есть, регексп стоит сделать таким: Код: [А-Яа-яЁёЙй] если есть буква "Ю" или еще какая другая, которая не "ловится" регекспом - впишите ее как выше вписаны "Ё" или "Й" |
Автор: | stark [ 03 июн 2010, 10:50 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Sirrin писал(а): Спасибо! Помогло. Ещё есть ньюанс такой когда жму кнопку "Загрузить", появляется ошибка. На приложенном скриншоте её видно. Как её исправить? Ошибки в логах сервера при этом покажите |
Автор: | Sirrin [ 03 июн 2010, 12:39 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
stark писал(а): Sirrin писал(а): Спасибо! Помогло. Ещё есть ньюанс такой когда жму кнопку "Загрузить", появляется ошибка. На приложенном скриншоте её видно. Как её исправить? Ошибки в логах сервера при этом покажите Код: server 06-03/13:38:42 ERROR [http-8080-7] server - Exception in Executer (ActionRegisterItemTable)
java.io.IOException: The character '' is an invalid XML character at org.apache.xml.serialize.BaseMarkupSerializer.fatalError(Unknown Source) at org.apache.xml.serialize.BaseMarkupSerializer.surrogates(Unknown Source) at org.apache.xml.serialize.XMLSerializer.printEscaped(Unknown Source) at org.apache.xml.serialize.XMLSerializer.printAttribute(Unknown Source) at org.apache.xml.serialize.XMLSerializer.serializeElement(Unknown Source) at org.apache.xml.serialize.BaseMarkupSerializer.serializeNode(Unknown Source) at org.apache.xml.serialize.XMLSerializer.serializeElement(Unknown Source) at org.apache.xml.serialize.BaseMarkupSerializer.serializeNode(Unknown Source) at org.apache.xml.serialize.XMLSerializer.serializeElement(Unknown Source) at org.apache.xml.serialize.BaseMarkupSerializer.serializeNode(Unknown Source) at org.apache.xml.serialize.BaseMarkupSerializer.serialize(Unknown Source) at bitel.billing.server.Executer.A(Unknown Source) at bitel.billing.server.Executer.doPost(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at bitel.billing.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:37) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source) |
Автор: | stark [ 03 июн 2010, 12:40 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
а покажите содержимое файла ? он в какой кодировке ? |
Автор: | Sirrin [ 03 июн 2010, 13:14 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Код: 18052010|11|1|1000|||2010051877630776300220000396 18052010|12|1|1000|||2010051877630776300220000396 =|1|1000 °йwпTтІ†ЦiГsїч±M2хњдЁҐєёiДЛe DA “ЁЩ6qDh4А,eS*ѓЈJ‚\бч”RЦ432B0457aagF6Ђ‘ ЃЁ««ЁҐва N1 BICS Я так понял, что биллинг ругается на этот символ Код: содержащийся в файле. Убрал последнюю строчку платёж прошёл без ошибки. Убрал сивол Код: Биллинг стал ругаться на символ Код: Мало ли какие у сбербанка ещё будут файлы-реестры содержащие всякие символы. Попробую с помощью регэкспов заставить биллинг не читать последние лишние 2-е строки. Кодировка как говорит Notepad++ - ANSI. В описании сбербанковского формата реестра написано следующее: Формат файла текстовый, кодировка windows-1251, каждая строка файла означает одну запись, разделитель полей “|” (ASCII-код 124), после последнего поля разделитель не ставится. Файл подписывается ЭЦП ПУ. |
Автор: | stark [ 03 июн 2010, 18:24 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
т.е у вас в файле идет какая0то левая информация последней строкой , которая никак не используется при занесении платежа ..а зачем она нужна ? И у нас загрузка поддерживает 2 кодировки всего |
Автор: | Sirrin [ 04 июн 2010, 09:51 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Последние 2 строки - это ЭЦП (Электронная Цифровая Подпись). От неё никуда не деться. Насколько я понимаю, для биллинга она не нужна. А 3-я строка снизу =|1|1000 это количество и сумма всех платежей. Она тоже биллингу не нужна. Поэтому в примере: Код: 18052010|11|1|1000|||2010051877630776300220000396 18052010|12|1|1000|||2010051877630776300220000396 =|1|1000 °йwпTтІ†ЦiГsїч±M2хњдЁҐєёiДЛe DA “ЁЩ6qDh4А,eS*ѓЈJ‚\бч”RЦ432B0457aagF6Ђ‘ ЃЁ««ЁҐва N1 BICS строка =|1|1000 указана неверно. Должно быть так =|2|2000. Из-за того, что я иногда меняю содержимое файла, учу регэкспы. ![]() Но это так, лирика. |
Автор: | restart [ 16 июн 2010, 11:32 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Может просто перед тем, как биллингу кормить файл, проще делать его копию и грохать там последние три (насколько я понял) строки? Дело в том, что ответ от сервера в виде XML отдается, а там некоторые символы некорретными считаются. ЭЦП ведь по сути бинарна и символьное его представление достаточно специфично, в т.ч. могут попадаться и некорректные для XML символы - соответственно вся XML невалидна, и отсюда ошибка. |
Автор: | Владимир [ 02 июл 2010, 15:58 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Добрый день. к нам ежедневно от банка приходят реестор оплаты через терминал, возможно ли сделать загрузку платежей с отбором на физиков и юриков, т.е. если юрик оплатил через терминал, и я делаю загрузку платежей и сумма ставиться без НДС (т.е. вычетаеться НДС), а у физиков нет? или это только вручную делать? ![]() |
Автор: | stark [ 05 июл 2010, 19:11 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
в текущем функционале загрузки платежей такого нет |
Автор: | snark [ 05 июл 2010, 19:30 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
пардон, а при чем тут платежи и НДС? НДС надо проставлять в тарифах, чтобы деньги сразу считались с учетом НДС ... зачем НДС в платежах то? |
Автор: | spa [ 02 сен 2010, 09:32 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
up! Сбербанк в конце файла платежей подставляет ЭЦП. И при загрузке файла биллинг (v 5.0) выдает ошибку - "Ошибка авторизации". Конечно если затереть ЭЦП, то загрузка нормально проходит. Но хотелось бы обойтись без редактирования файла. Есть ли такая возможность? |
Автор: | snark [ 02 сен 2010, 14:59 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
поищите, тут уже как то было про сбербанковские файлы, ЕМНИМС |
Автор: | restart [ 06 сен 2010, 18:02 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
spa писал(а): up! Сбербанк в конце файла платежей подставляет ЭЦП. И при загрузке файла биллинг (v 5.0) выдает ошибку - "Ошибка авторизации". Конечно если затереть ЭЦП, то загрузка нормально проходит. Но хотелось бы обойтись без редактирования файла. Есть ли такая возможность? Нету такой возможности, потому что Вы задаете шаблон и даете документ, которому он не соответствует. Вы, например, тому же сбербанку тоже отправляете различные документы с каракулями внизу, когда их там быть не должно? ![]() |
Автор: | spa [ 07 сен 2010, 06:26 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
restart писал(а): Нету такой возможности, потому что Вы задаете шаблон и даете документ, которому он не соответствует. Вы, например, тому же сбербанку тоже отправляете различные документы с каракулями внизу, когда их там быть не должно? ![]() Так-то оно так... Но если строка в файле не соответствует шаблону, то она не обрабатывается попросту и выводится предупреждение, как в случае с контрольной строкой из того же файла. А вот каракули вызывают "Ошибку авторизации" и загрузка вообще не происходит. Так я и спрашивал, есть ли возможность изменить такое поведение? Чтобы информационные строки обрабатывались, ну а ЭЦП попросту игнорировалась бы, как несоответствующая шаблону, наподобие контрольной строки. |
Автор: | restart [ 07 сен 2010, 14:34 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
spa писал(а): restart писал(а): Нету такой возможности, потому что Вы задаете шаблон и даете документ, которому он не соответствует. Вы, например, тому же сбербанку тоже отправляете различные документы с каракулями внизу, когда их там быть не должно? ![]() Так-то оно так... Но если строка в файле не соответствует шаблону, то она не обрабатывается попросту и выводится предупреждение, как в случае с контрольной строкой из того же файла. А вот каракули вызывают "Ошибку авторизации" и загрузка вообще не происходит. Так я и спрашивал, есть ли возможность изменить такое поведение? Чтобы информационные строки обрабатывались, ну а ЭЦП попросту игнорировалась бы, как несоответствующая шаблону, наподобие контрольной строки. Здесь ошибка кроется в том, что ответ от сервера приходит в виде XML-файла, а в XML-файлах не все символы, скажем так, валидны. А так как ЭЦП бинарна, то там могут попадаться любые символы (если смотреть ее как текст), в том числе и те, которые являются "неправильными" для XML. И вот в этом случае при попытке чтения этой XML-ки ничего не получается, и клиент думает, что-то не так с сервером. |
Автор: | skn [ 07 сен 2010, 16:39 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
попробуйте последни билд 5.1 - возможно проблема решится |
Автор: | MrLir [ 08 сен 2010, 03:42 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Добрый день! Помогите пожалуйста победить однофамильцев ![]() Формат строки: 91501;500.0;Иванов;62625;07.09.10 1 - Номер договора 2 - сумма 3 - Фамилия Шаблон: payment.load.pattern.1=Импорт платежей из 1С payment.load.pattern.1.type=1 payment.load.pattern.1.encoding=Cp1251 payment.load.pattern.1.payment_type=9 payment.load.pattern.1.regexp=(\w+);([\d\.\s]+);([а-яА-ЯюЮйЙёЁ\s]+);([а-яА-Я\s\w]+);([\d\.]+) payment.load.pattern.1.position_sum=2 payment.load.pattern.1.position_comment=4 payment.load.pattern.1.position_id=4 payment.load.pattern.1.position_date=5 payment.load.pattern.1.date_format=dd.MM.yy payment.load.pattern.1.search.mode=and payment.load.pattern.1.search.1.type=contract payment.load.pattern.1.search.1.pos=1 payment.load.pattern.1.search.1.regime=1 payment.load.pattern.1.search.2.type=comment payment.load.pattern.1.search.2.pos=3 payment.load.pattern.1.search.2.regime=2 payment.load.pattern.1.search.2.replace=\s*([а-яА-ЯюЮйЙёЁ]+)\s*=>%$1% Т.е. происходит проверка по номеру договора и фамилии. Проблема в том, что если есть однофамильцы, то платеж не проходит. Спасибо! |
Автор: | skn [ 08 сен 2010, 14:50 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
1) создал два договора с разными номерами, одинаковыми фамилиями, но разными именами 2) создал реестр как ваш с двумя записями с разными договорами и индентификаторами 3) загрузил ваш конфиг. 4) загрузил реестр результат Код: Обработано строк => 2; из них комментариев => 0, ошибочных => 0, загружено => 2 Итого загружено платежей => 2 Время обработки: 0 d 00:41:07 у вас какой результат? |
Автор: | MrLir [ 09 сен 2010, 03:49 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Похоже проблема только с Ивановыми ![]() С другими фамилиями проходит нормально. 1. вот 4 договора: 91501 Иванов Игорь Сергеевич | id=1394 91778 Иванов Евгений Петрович | id=762 92076 Иванов Григорий Иванович | id=1113 92175 Иванов Сергей Валерьевич | id=1214 2. файл платежа: 91501;500.0;Иванов;62621;07.09.10 91778;500.0;Иванов;62622;07.09.10 92076;500.0;Иванов;62623;07.09.10 92175;500.0;Иванов;62624;07.09.10 3. Получаю: (1) 91501;500.0;Иванов;62621;07.09.10 => договор не найден поз. 1 искомое значение 91501 дата 07.09.2010;поз. 3 искомое значение %Иванов% дата 07.09.2010 (3) 92076;500.0;Иванов;62623;07.09.10 => договор не найден поз. 1 искомое значение 92076 дата 07.09.2010;поз. 3 искомое значение %Иванов% дата 07.09.2010 (4) 92175;500.0;Иванов;62624;07.09.10 => договор не найден поз. 1 искомое значение 92175 дата 07.09.2010;поз. 3 искомое значение %Иванов% дата 07.09.2010 Обработано строк => 4; из них комментариев => 0, ошибочных => 3, загружено => 1 Итого загружено платежей => 1 Время обработки: 0 d 00:00:09 ==== Прошла только вторая строка с наименьшим ID договора. Запрос: select * from contract where comment like '%Иванов%' and title = '91501' вернул строку , т.е. заведено в базу правильно. Если делать запрос: select * from contract where comment like '%Иванов%' то получаю много записей, т.к. попадют Иванов/Иванова/Иванович/Ивановна Версия биллинга: 4,6 сборка 686 |
Автор: | skn [ 09 сен 2010, 15:19 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
посмотри дату создания и закрытия договоров с Ивановыми а также не стоит ли галка СКРЫТЫЙ |
Автор: | MrLir [ 10 сен 2010, 04:02 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
Договор открыт, дата создания - прошлый год, не скрытый. Провел еще эксперимент: заменил на payment.load.pattern.1.search.2.replace=\s*([а-яА-ЯюЮйЙёЁ ]+)\s*=>%$1% и загрузил 91501;500.0;Иванов Игорь Сергеевич;124;07.09.10 Все успешно загрузилось! А есть возможность посмотреть дебаг процесса загрузки платежей? |
Автор: | skn [ 10 сен 2010, 19:14 ] |
Заголовок сообщения: | Re: Загрузка платежа из файла |
дебага для парсинга нету. |
Страница 1 из 2 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |