что такое ошибка парсинга данных в сбербанке

Сегодня в 11:00 не работает Сбербанк онлайн из-за кривого XML

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанкеТолько что, как стало нам известно, сегодня, 30.06.2014 в 11:00 по Мск. не работает Сбербанк онлайн. Именно не пускает пользователей в Личный кабинет. Причиной этого стала ошибка парсинга XML файла, в теле которого находится непонятный символ или просто не закрыта скобка. Косвенными признаками стало то, что я пытаясь зайти в ЛК Сбербанк онлайн — на их страничке увидел незавершённый текст, а именно: «Обратите внимание:» и далее пусто, так же как и в соседних вкладках. Я уже обратил внимание, а толку с этого. Далее, вводим логин и пароль и выскакивает окошко для ввода SMS-пароля, но смс не приходит! Всё потому, что XML-файл с ошибкой. Откуда я взял этот XML и почему? Смотрим принтскин N2. Я попытался зайти в корень сайта — тут явная ошибка. Очевидно, что часть новости, назовём её так — выводится по адресу: https://online.sberbank.ru/CSAFront/index.do и ничего не происходит. Если перейди в корень сайта — то там явный баг, со-стороны разрабов сайта. И это длилось 45 минут. что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанкеСбербанк сидит на деньгах, на миллиардах и не могут до-сих-пор систему резервного восстановления, блин, ну хоть сайта своего сделать. За что только деньги платим. А если так с карточками будет или банкоматами — отказавшими в один прекрасный момент? А? (Пока писал статью, сайт починили) Скрины в доказательство выкладываю. PS: И это за регламентом 15 минут!

Не а НЕ ПОЧИНИЛИ! Время 11:55! Смотрим скриншот N3: Ошибка синтаксического анализа XML: элемент не найден Адрес: https://online.sberbank.ru/PhizIC/CSAFrontLogin.do?AuthToken=2a1338ef19b5cf7557003242969bc34b
Строка 1, символ 1:

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

На морде сайта — всё вроде гуд более менее стало, ввожу логин, пароль, — вместо окна с смс — вываливается страница с такой ошибкой. Опять XML 🙂 Мдаааа.. А мне между прочим надо деньги платить, кредит на машину… А по чьей вине будут пени.

PS: Вот люди-то «порадуются», сейчас прайм-тайм настанет в обед, все платить будут — а Сбербанк онлайн валяется, не по детски. Попробуйте, войдите если можете в ЛК?

Источник

Что такое парсинг и как правильно парсить

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Что такое парсинг данных должен знать каждый владелец сайта, планирующий серьёзно развиваться в бизнесе. Это явление настолько распространено, что рано или поздно с парсингом может столкнуться любой. Либо как заказчик данной операции, либо как лицо, владеющее объектом для сбора информации, то есть ресурсом в Интернете.

К парсингу в российской бизнес-среде часто наблюдается негативное отношение. По принципу: если это не незаконно, то уж точно аморально. На самом деле из его грамотного и тактичного использования каждая компания может извлечь немало преимуществ.

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Что такое парсинг

Глагол “to parse” в дословном переводе не означает ничего плохого. Делать грамматический разбор или структурировать — действия полезные и нужные. На языке всех, кто работает с данными на сайтах это слово имеет свой оттенок.

Парсить — собирать и систематизировать информацию, размещенную на определенных сайтах, с помощью специальных программ, автоматизирующих процесс.

Если вы когда-либо задавались вопросом, что такое парсер сайта, то вот он ответ. Это программные продукты, основной функцией которых является получение необходимых данных, соответствующих заданным параметрам.

Законно ли использовать парсинг

После выяснения что такое парсинг, может показаться, что это нечто, не соответствующее нормам действующего законодательства. На самом деле это не так. Законом не преследуется парсинг. Зато запрещены:

Парсинг законен, если он касается сбора информации, находящейся в открытом доступе. То есть всего, что можно и так собрать вручную.

Парсеры просто позволяют ускорить процесс и избежать ошибок из-за человеческого фактора. Поэтому «незаконности» в процесс они не добавляют.

Другое дело, как владелец свежесобранной базы распорядится подобной информацией. Ответственность может наступить именно за последующие действия.

Для чего нужен парсинг

Что такое парсить сайт разобрались. Переходим к тому, зачем же это может понадобиться. Здесь открывается широкий простор для действий.

Основная проблема современного Интернета — избыток информации, которую человек не в состоянии систематизировать вручную.

Парсинг используется для:

Сквозная аналитика

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Достоинства парсинга

Они многочисленны. По сравнению с человеком парсеры могут:

Ограничения при парсинге

Есть несколько вариантов ограничений, которые могут затруднить работу парсера:

Какую информацию можно парсить

Спарсить можно всё, что есть на сайте в открытом доступе. Чаще всего требуются:

Изображения с сайтов технически спарсить тоже можно, но, как уже упоминалось выше, если они защищены авторским правом, лучше не нужно. Нельзя собирать с чужих сайтов личные данные их пользователей, которые те вводили в личных кабинетах

Модуль е-коммерс

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Алгоритм работы парсинга

Принцип действия программы зависит от целей. Но схематично он выглядит так:

Способы применения

Основных способов применения парсинга существует два:

Обычно оба варианта работают в тесной связке друг с другом. Например, анализ ценовых позиций у конкурентов отталкивается от имеющегося диапазона на собственном сайте, а обнаруженные новинки сопоставляются с собственной товарной базой и т. п.

Источник

Ошибка парсинга xml

Не получается подключиться к Яндекс-Маркету. При проверке файла Яндекс пишет: «Внимание! Прайс-лист содержит ошибки.

Что за ошибка парсинга?

Определена кодировка: windows-1251 (строка 0, столбец 0) Дата из файла: 2012-06-14 02:06 (строка 3, столбец 38) Ошибка: Обнаружен цикл в дереве категорий: категория 21 ссылается на категорию 21 (строка 8, столбец 7722) Фатальная ошибка: Фид отклонен»

При заполнении каталога была допущена ошибки и каталог А стал ссылаться на самого себя, что приводит к цикличности и ошибки проверки.

Размещение Вашего магазина было приостановлено за повторяющиеся ошибки в прайс-листе. Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Expected entity name for reference (строка 8817, столбец 320) Формат XML требует соблюдения правил заполнения описания товара.

Открываем свой файл для яндекс-маркета http://имя сайта/yml/yandex.php любым браузером. Нажимаем в меню браузера опцию «Просмотр исходного кода страницы» и переходит к указанной строке (у нас указано в ошибке строка 8817). В этой строке нарушен синтаксис XML. Пример:

Служебник. > Аналойный, церковнославянский язык, двухцветная печать.

Ошибку вызывает тег

Эта статья Вам помогла? ДА / НЕТ

Учащимся

Учителям

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Порядок наименования файла и структура Электронного Реестра

DBF
1.Электронный Реестр должен быть сформирован в формате dBaseIII (*.DBF) (кодировка MS – DOS — 866) и подписан электронной подписью Предприятия (Организации).
Наименование файла с Электронным Реестром получателей: fNNNNMMM.DBF1 где:

fспециализированный отличительный символ;
NNNNномер филиала ОАО «Сбербанк России» где открыты Счета карт, на которые должны быть зачислены суммы, указанные в Электронном Реестре;
MMMпорядковый номер Электронного Реестра.

Правила формирования порядкового номера Электронного Реестра устанавливаются Предприятием (Организацией) самостоятельно, при этом допускается использовать в номере как цифры, так и буквы латинского алфавита. В то же время, обязательным условием является обеспечение уникальности порядкового номера для каждого сформированного Электронного Реестра.
2.Структура Электронного Реестра приведена в приложении А.

Файл формата DBF содержит 7 столбцов с наименованиями A,B,C,D,E,F,G (первые 7 символов латинского алфавита в верхнем регистре). Тип всех полей одинаковый – символьный, длиной 30 (тридцать) символов.

Строки Электронного Реестра с 1 по 6 содержат заголовок. Местоположение элементов заголовка приведено в порядке их расположения в соответствующих ячейках таблицы DBF и должно строго соблюдаться при формировании Электронного Реестра.

Текст, заключенный в прямоугольные скобки (), обозначает переменную величину подлежащую заполнению. Текст, не заключенный в прямоугольные скобки, обозначает постоянную величину, присутствующую в каждом Электронном Реестре в соответствующих ячейках таблицы.

Ошибка разбора XML или XML Parsing Error в RSS-ленте, решения проблемы

Данные о суммах, подлежащих зачислению на Счета карт, указываются начиная со строки 7, в соответствии с наименованиями столбцов Электронного Реестра, приведенных в строке 6.

Столбец “G” предназначен для использования в Банке, и Предприятием (Организацией) не заполняется.

В конце Электронного Реестра указывается итоговая сумма, подлежащая зачислению на Счета физических лиц (сумма по столбцу “F”, начиная со строки 7).

Местоположение элементов данных приведены в порядке их расположения в соответствующих ячейках таблицы DBF и должно строго соблюдаться при формировании Электронного Реестра.

Источник

Что делать, если парсинг не работает?

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Для начала в двух словах разберем как работает парсер:

На самом деле эти 4 простых пункта составляют 90% всех парсеров товаров. Внутри скрывается множество технических подробностей, но общий смысл именно такой. Что же может пойти не так?

Сайт не работает

Что делать? Просто подождать пока владелец сайта все исправит. Обычно это занимает от нескольких минут до суток.

На сайте обновляется каталог товаров

Мы всегда советуем пользователям не парсить сайты ночью по Москве. Это связано с тем, что очень многие поставщики обновляют свой каталог именно в это время.

Как правило, во время обновления каталог товаров не полный или вовсе не работает. Поэтому и парсинг перестает полноценно работать.

Что делать? Дождаться окончания обновления каталога. Обычно это занимает несколько часов на крупных каталогах.

Сайт изменил дизайн

Если дизайн изменился (даже незначительно), вполне вероятно, что правила парсинга перестанут работать и товары перестанут выгружаться.

Что делать? Написать нам в техподдержку, в чат или на почту. Как правило исправление занимает несколько часов, но если дизайн изменился очень сильно, то работы могут занять и больше дня.

Все остальное

Само-собой это не все причины, которые могут возникнуть. Если вы уверены, что сайтом, который вы парсите все в порядке, но все равно ничего не работает, обязательно напишите нам в техподдержку. Достаточно лишь указать сайт и сказать, что его парсинг не работает. Дальше наш специалист все проверит и сообщит вам возможные причины, а так же время на их устранение.

Источник

Сбербанк или туда и обратно

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

ГЛАВА 1. Нежданные гости

Все началось в то злополучное утро, когда Project Manager сообщил, что сроки реализации проекта должны быть быстро и решительно сокращены на месяц. Точнее говоря проект должен быть готов через 4 дня. Нет, наш PO не зверь, и ничуть не похож на сову (разве что чуть-чуть на ворона), просто так сложилось. Ну раз надо, так надо, тем более что команде (а я являюсь ведущим разработчиком команды «С») было обещано что-то вкусное. На часах и календаре был четверг, 11:00, к понедельнику проект должен быть готов.

Для начала, чем мы вообще занимаемся. Мы занимаемся автоматизацией кинотеатров — автоматическим и дистанционным управлением оборудования, автоматизацией кинопоказа, мониторингом, видеопанелями, а теперь еще и терминалами продажи билетов и бара. Конкретно последнему пункту и посвящена данная статья.

Сам проект, который нужно было завершить до понедельника представляет из себя некую прослойку между основным сервером на Scala и железным терминалом оплаты VeriFone VX 820 (на самом деле терминалов больше, но для примера возьмем только его). Понятно, что просто так проводить через него транзакции нам никто не даст, поэтому используются утилиты и библиотеки Сбербанка/Arcus и UCS. Таким образом схема работы в итоге должна быть следующей:

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Внешне он выглядит вот так:

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Также данная подсистема должна использоваться на стандартных кассовых машинах которые все видели в любом кинотеатре у кассиров.

Согласно внутренней традиции каждый проект нашей команды мы называем именем из древнескандинавской мифологии, для данной подсистемы было выбрано имя Gefjon — Имя богини плодородия и изобилия (неплохое название для сервера оплаты, разве нет? Ну и легенда о быках отрезающих остров идеально ложится на текущую архитектуру, отрезая работу с оборудованием от высокоуровневого языка).

Формат входящих и выходящих сообщений — HTTP сервер с JSON нагрузкой. Это оптимальный компромисс между Scala, которой сложно опуститься до вычленения бинарных данных из socket-потоков и C, которому трудно подняться до передачи объектов через сеть. Возможных операций, которыми необходимо оперировать не так много: оплата, отмена, возврат, разные типы отчетов, открытие сервисного меню и ping. С виду ничего сложного. Так как банковских систем целых три (а в последствии ожидается пополнение семейства), то было решено разделить проект на компоненты:

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Зеленым покрашены блоки, которые нам нужно было сделать, синим — те, которые нельзя поменять и которые предоставляет банк.

Так как основные проблемы возникли только с ПО от Сбербанка, то статья в целом будет посвящена подводным камням, которые мы пересчитали своей ладьей.

ГЛАВА 2. Баранье жаркое

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке
(фото: heaclub.ru)

… выглядит примерно так. Примерно так же выглядел код того прототипа, который был написан несколько месяцев назад для того, чтобы дать понять всем вышестоящим людям, что мы можем работать с банковскими приложениями.

Понятное дело, что для Production варианта это не годилось, поэтому нужно было по сути написать все заново.

Каждый банк, который предоставляет библиотеки для работы с терминалом обычно предоставляет два варианта подключения: через функции библиотеки (.so/.dll) или посредством готовой утилиты, которой всего-то нужно передать два значения — тип операции и сумму (когда нужно). В теории ничего сложного, всего-то

Результат операции при этом будет помещен в файл «e», а слип-чек — в файл «p». Просто отправим эти файлы на stdout с преобразованием в JSON, чтобы HTTP-сервер просто отправил их наверх как payload без размышлений о том, что там.

Но эта статья не вышла бы, если бы все было так просто.

ГЛАВА 4. Через гору и под горой

Первоначальный вариант реализации представлял из себя простой вызов приложения — HTTP-сервер вызывал нужную обертку с унифицированными параметрами (например X-отчет это 4), а утилита например gfj_pilot запускала sb_pilot с параметром, который требовался для это операции (например X-отчет это 9). Затем утилита-обертка читала из е-файла результат операции (например 2000 — «отказ оплаты, повторите операцию») и преобразовывала в универсальную ошибку (например 3 — «Ошибка чтения или процессинга карты/счета, повторите операцию»). После этого файл «p» преобразовывался в base64 для избежания ломания форматирования и отсылался вместе с результатом в stdout в виде JSON.

Все это прекрасно работало, пока в один прекрасный момент нам не сообщили, что…

… это не работает под Windows.

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Ну точнее у самого Windows проблем нет (кроме того, что слип генерируется в кодировке Cp-1251, а консоль работает в CP866). Просто не генерировался «е» файл. Запустили банковскую утилиту напрямую:

Действительно, «e»-файла нет. Камень в сторону Сбербанка #1. Пишем письмо в сбербанк (впоследствии получили ответ, что так и должно быть), а так как времени на переписку нет и надо запускаться вот прям уже, ищем обходные пути получения результата.

Ага, результат можно получить из лога sbkernelГГММ.log. Неудобно, плюс нет хеша карты чтобы впоследствии прикрутить «Спасибо» от сбербанка. Не годится.

Придется подключаться к библиотеке pilot_nt.dll и импортировать из нее функции. Все бы ничего, но… Камень в сторону Сбербанка #2: под Linux такой библиотеки нет, придется создавать два разных приложения под разные платформы — для linux вызывать утилиту sb_pilot (аналог loadparm.exe, кстати камень #3 за разное название утилиты под разными платформами), под windows подключаться к библиотеке pilot_nt.dll.

ГЛАВА 5. Загадки в темноте

Сбербанк — компания крупная, большинство программных решений производятся по ГОСТам и формальным документам. Залезаем в каталог, который поставляет Сбербанк вместе с библиотеками:

Куча добра, однако нас интересует только каталог для разработчиков:

Много макулатуры, на всякий случай еще раз перечитаем pilot_nt, из которой узнаем следующее:

Таблица 1. Поддерживаемые sb_pilot ОС.

ОСРазрядностьИмя модуля
Windows32sb_pilot.exe
Linux32sb_pilot
DOS16sb_pilot.exe

Передача результатов работы программы.

По окончании работы программы формируются два текстовых файла — файл обмена и файл чека.

Первый имеет имя e и предназначен для передачи вызывающей программе параметров совершенной операции. Первая строка в этом файле содержит код результата операции, и через запятую – поясняющее текстовой сообщение. Код 0 означает успешное проведение платежа, любое другое значение – отказ или невозможность проведения платежа.

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Лениво кидаем еще один камень и начинаем изучать документацию на подключение библиотеки напрямую.

При оплате (возврате) покупки по банковской карте кассовая программа должна вызвать из библиотеки Сбербанка функцию card_authorize(), заполнив поля TType и Amount и указав нулевые значения в остальных полях. По окончании работы функции необходимо проанализировать поле RCode. Если в нем содержится значение «0» или «00», авторизация считается успешно выполненной, в противном случае отклоненной. Кроме этого, необходимо проверить значение поля Check.

Если оно не равно NULL, его необходимо отправить на печать (в нефискальном режиме) и затем
удалить вызовом функции GlobalFree(). При закрытии смены кассовая программа должна вызвать из библиотеки Сбербанка функцию close_day(), заполнив поле TType = 7 и указав нулевые значения в остальных полях. По окончании работы функции необходимо проверить значение поля Check.

Если поле Check не равно NULL, его необходимо отправить на печать (в нефискальном режиме) и после этого удалить вызовом функции GlobaFree().

Звучит несложно, даже хэдер файл предоставлен. Что ж, подключаем его, компилируем и…

Эммм… Что? Открываем pilot_nt.h:

Сразу, не глядя камень за комментарии на русском в кодировке CP1251.

Ну и самый серьезный камень: дорогие разработчики на С++. Если вы пишете extern «C» — это означает, что код внутри блока должен компилироваться С-компилятором. Если вы НЕ сделали `typedef` структуры, то при каждом ее упоминании в качестве указания типа необходимо писать ключевое слово `struct`.

Патчим файл для разработчиков, подставляя везде, где нужно слово `struct`. Линкуемся с библиотекой `pilot_nt.dll`. Победа, не? Запускаем наше приложение.

ГЛАВА 6. Из огня да в полымя

Ну вы поняли, да? Приложение просто падает. Сразу, до main. Медитируем, добавляем NIH-аналог функции errno для windows: GetLastError (камень #3 в сторону Microsoft, первые два за кодировки).

0xc0000096? А разве GetLastError не должна возвращать адекватный код ошибки?

For a complete list of error codes provided by the operating system, see System Error Codes.

The following topics provide lists of system error codes. These values are defined in the WinError.h header file.

Отлично, мы получили незадокументированную ошибку, кидаем камень и открываем всезнающий google:

ГЛАВА 8. Пауки и мухи

22:00. На всякий случай возникает идея проверить, что это не из-за того, что мы используем кросскомпиляцию с Linux с помощью mingw. Параллельно понимаем, что Сбербанк поставляет только 32хбитное приложение, поэтому слинковаться с 64хбитным приложением не выйдет, ну ладно, но все равно запустим камень в сторону Сбербанка за 32-only версию в 2019м году.

Дано: установленная в virtualbox windows 7;
Необходимо: установить Visual Studio и скопилировать MVP.

Заходим на сайт Microsoft, качаем Visual Studio 2017. Берем лицензию сообщества, так как мы берем ее для проверки, для бизнеса лицензия будет куплена, если взлетит.
Скачиваем несколько сотен мегабайт и…

Видим, что наша версия ОС (Windows 7) не поддерживается.

Ок, идем на всякие непотребные сайты, ищем Visual Studio 2008, скачиваем несколько сотен мегабайт заново и…

Ладно, попытаемся установить Daemon Tools 10 (так как это та версия, которую предлагает сайт), чтобы вставить этот виртуальный диск.

И получаем оплеуху от Microsoft в виде сообщения:

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Яростно кидаем очень острый камень в сторону Microsoft, качаем с торрентов старый Daemon Tools, успешно распаковываем Visual Studio, устанавливаем, наконец-таки (00:00) компилируем MVP, получаем такую же ошибку. Что ж, хорошая была версия, но не срослось.

ГЛАВА 11. На пороге

Пишем второму программисту, который в этот момент в срочном порядке допиливает сервер и процедуру регистрации. Он вспоминает, есть гит-репозиторий, который на NT-подключает эту библиотеку и работает с ней.

Подозрительно глядя на репозиторий скачиваем его, компилируем и запускаем. Работает.

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Еще более подозрительно смотрим на код. Код идентичен, разве что написан на C++ а не С.
Понимаем, что язык тут не причем. Смотрим библиотеки сбербанка, которые тянет за собой код.
Видим последний коммит.

И вот тут нас поджидает очередной сюрприз.

Оказывается, что версии библиотеки Сбербанка могут быть разными. Последний коммит увеличивает версию с 23 до 27й. Копируем себе на тестовый компьютер версию из гита — РАБОТАЕТ!

Проверяем все архивы, которые присылал Сбербанк, сравниваем версии и строим табличку:

ВерсияРаботает
26.0.15 — Основнаянет
27.4.12 — Из репозиторияда
23.0.13 — Из репозиторияда
29.0.9 — Самая свежая от СБда
23.0.13 — С патчем для системы «Криптера»да

Отлично, вот теперь заживем. На тех системах где стоит 26 обновим до 29 или 27 и все взлетит.
Кидаем камень #9 в сторону Сбербанка за то, что сломали поведение на NT системах.

ГЛАВА 12. Что ждало их внутри

Не хватает «е» файла? Не беда, берем патченные заголовочники, динамически линкуемся с библиотекой чтобы корректно вернуть ошибку, пишем код, который просто запишет код возврата из функции в файл «е», назовем бинарь sb_pilot.exe и…

Работать-то оно работает.

Вот только на версии для системы «Криптера» не создается «р» файл.

Грустно смотрим на капающую по костяшкам кровь и на вмятину в стене.

Для начала, что такое система «Криптера».

Cryptera — это датская компания, выпускающая шифрующее оборудование/оборудование безопасности/ключи и пр. Думаю, что вы все видели один из экземпляров их продукции:

что такое ошибка парсинга данных в сбербанке. Смотреть фото что такое ошибка парсинга данных в сбербанке. Смотреть картинку что такое ошибка парсинга данных в сбербанке. Картинка про что такое ошибка парсинга данных в сбербанке. Фото что такое ошибка парсинга данных в сбербанке

Так вот Сбербанк использует их криптомодуль для пинпадов и выпускает специальную «патченную» библиотеку, в которой, как мы уже поняли, не создается файл «р». Пишем по этому поводу в Сбербанк и через несколько дней получим ответ, что «под оригинальной системой файл „р“ будет создаваться, а под патченной на Криптеру — нет». Выдадим им камень # 10 через несколько дней, ведь работать нужно уже сейчас.

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

О, отлично, чек уже есть, можем сами сохранить его в файл или сразу вывести в JSON…

И получаем падение приложение из-за обращения по невалидному указателю.

ГЛАВА 14. Огонь и вода

[out] образ чека, должен освобождаться GlobalFree в вызывающей программе

Что это нам дает? Очень многое. Во-первых то, что раз указатель требует очистки с помощью GlobalFree то его саллоцировали с помощью GlobalAlloc. Следовательно она выдает не указатель на память, как было в 16битной версии, а номер объекта с семантически объявленым типом HGLOBAL, который можно скормить в функции GlobalSize чтобы получить размер выделенного блока и GlobalLock чтобы заблокировать кусок памяти, но получить оригинальный указатель. Кстати, камень #6 в сторону Microsoft за NIH malloc и free, которые есть в стандартной библиотеке.

И все равно получаем падение. Окей, а что показывае GlobalSize? Ноль? Как-то странно.

Проверяем другие функции, которые тоже должны отдавать слип — видим ту же картину.

В голову приходит разве что самостоятельно сгенерировать слип по тем данным, которые может выдать самая крутая функция оплаты (да, у Сбербанка функции именуются card_authorize2..14, камень кидать за это не буду):

Пробуем подбирать поля… Выясняем, что от счастья нас отделяло всего одно — Фамилия и Имя носителя карты. Без них слип не считается законным:

Реквизиты: идентификатор банкомата, электронного терминала или другого технического средства, предназначенного для совершения операций с использованием платежных карт; вид операции; дата совершения операции; сумма операции; валюта операции; сумма комиссионного вознаграждения код авторизации; реквизиты платежной карты.

Жаль, но сформировать законный слип с теми данными, что у нас есть не получится.

Покопаемся в документации еще раз.

Находим пример, который Сбербанк поставляет в каталоге «examples»

Просто выводится текст, находящийся по указателю. Но ведь мы уже убедились, что так оно не работает… На всякий случай скомпилируем их пример и запустим. Вылет на строчке `file

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *