Comments 108
Каждый программист, который хотя бы немного, хоть по касательной имел дело с клиент-банками, знает, что это на самом деле нормальное положение дел в банковском софте.

Немножко удивляет разве что то, что оно и в 2006 году всё было практически точно так же, как и сейчас. Но только немножко.
Эникейщик тоже.
Не помню уже что за софт, но что-то бухгалтерско-банковское.
Поддержка даёт инсталятор с инструкцией и говорит устанавливать СТРОГО по инструкции.
В инструкции строка: оставить папку для установки по умолчанию C:\Program Files\xxx
В инсталяторе папка по умолчанию C:\xxx

Подозреваю, что это не специфика сбера – см. выше ответ JustDont.
Но разбор от сбербанк интересен, да.

А зачем вам в 10 главе daemon tools? ISO файл прекрасно монтируется в virtualbox из коробки. Это же ISO.

Вот пока вы не напомнили я даже и не помнил, что когда-то уже монтировал так диски. Что поделать, ночь накладывает ограничения на когнитивные функции.
Аналогичный вопрос был и у меня, но когда 11 часов подряд пилишь костыли и workaround-ы, то простые пути исчезают из поля зрения.
А ещё у M$ был IMAPI v2 (ныне недоступен к загрузке, +1 камешек).
Устанавливается на Windows 7 и позволяет монтировать диски. В 8-10 встроен.
Вообще сама концепция распространения софта для установки которого вам нужен другой софт звучит и выглядит странно.

Ну как же древний анекдот? Драйвер для модема на CD, драйвер для CD в интернете

Не так давно имели проблему установки Windows 7 на thinkpad — с флешки устанавливаться отказывается ссылаясь на то, что USB3.0 драйверов нет, CD-привода нет, в биосе перевести USB на 2.0 нельзя. Решили вытаскиванием жесткого и установкой на другой машине. Был бы распаянный SSD — не решили бы.
Но ведь есть куча инструкций по интеграции драйверов в дистрибутив. В том числе на оф. сайте — support.microsoft.com/en-us/help/2345135. Судя по статье вы даже умеете пользоваться Google. Так в чём проблема?
Берем любой лайв-сд(USB) с десяткой. Тот же стрелец. Грузимся с него. Кидаем драйвера на жесткий. Ставим как обычно.
Вот только без USB клавиатура с мышь/тачпадом не работает. И при всей доступности драйверов загрузить их не выйдет.
На всех нормальных ноутах клава идет напрямую в мультиконтроллер и работает всегда. Она никак не завязана на USB. Есть исключения вроде недобуков Prestigio — собранных на планшетной плате, но туда лучше лить заводской образ. А так дрова на хард скинули и tab/alt+tab/enter достаточно, чтобы поставить дрова.
А это не анекдот. Где-то в 98-99 году был куплен какой-то CDD, драйвер от которого был любезно вложен на CD. Пришлось ехать до товарищей.
ну это нормально.
Чтобы что-то поставить, нужен менеджер пакетов.
А ещё iso распаковывается архиватором вроде 7zip. И в данном случае это бы прокатило:)
Еще его можно просто распаковать каким-нибудь 7-zip, обычно установка заработает и в распакованном виде.

P.S. Я буду дочитывать ветки до конца перед ответом. Возможно. Когда-нибудь.
На проект нужно было месяц(20 дней примерно если я правильно понимаю) вы уложились за 4 дня, получили ли вы премию в размере 16 рабочих дней?
получили ли вы премию в размере 16 рабочих дней

16 рабочих дней это оплата, а премия должна быть за седые волосы.

Я себе представил, если бы к нам так пришёл PO. Сразу бы встретил вопросы:


  • кто берёт на себя все возможные риски;
  • как оплачивается сверхурочная работа.
    И только после достижения договорённости по этим пунктам с командой принималось бы решение. В противном случае PO отправляется туда, откуда пришёл. У людей семьи, личная жизнь, диета, фитнесс, планы. Никто просто так подрываться не станет.
Никто просто так подрываться не станет.

Я сейчас скажу очень гадкую вещь. Но полно тех кто станет, и будут считать что это норм, мол в выходные им делать нечего, а тут сделали «доброе дело».
Лично с такими сталкивался. Сон 3-5 часов, а все остальное время (включая не оплачиваемые выходные) кодить на контору (я бы еще понял на самого себя) — норма. Без особых доп. плюшек за это со стороны компании разумеется.

Мне кажется пару лет в таком ритме и это будет тотальное выгорание.

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

Даже если найду. Сегодня я хочу делать одно, а завтра — другое. Тоже самое и с прибылью. Сегодня для прибыли надо делать одно, а завтра — другое. В сфере разработки ПО всё это меняется очень стремительно

Простите, если не по основной теме статьи, но хочу спросить.
А что плохого что команда в данной истории решила ради «блага фирмы» поработать много и плотно (возможно, чтобы минимизировать возможные убытки)?
Речь не идет о случаях типа как у меня — скотина дома не кормлена и попросить
положить сена некого, а ты на работе сидишь. Если смотреть в отрыве от таких случаев «польза фирме с сильным вредом себе», то чем плохо?
Мне кажется что у хорошего работодателя (правда это не про мой завод, у нас овертаймы конкретно IT-отделу не оплачиваются, скорее спросят «почему допустили?») это оценят и при сокращениях/премировании/повышении и в целом лояльным отношением?
Просто очень хочу понять, лично я (видимо наивно) испытываю чувство удовлетворения от успешно завершенного овертайма, и от пользы которая в итоге пришла от затраченных усилий на какой-нибудь квест типа как в статье.
А можно я отвечу. Вообще ничего плохого, но есть одно но(да в хорошой фирме так никогда не будет):
1. Команда выполнила работу быстрей изначальных планов, значит в следующий раз это может стать нормой.
2. Когда в следующий раз «вдруг» придётся сократить сроки, то вы не скажете просто так что вы не можете, из за пункт 1, это уже норма.
3. Как так получилось что вдруг сократили срок на разработку, я достаточно давно работаю в этой отрасли и не помню что заказчик брал и урезал сроки. А значит как то это уже сделано по договоренности, у ИТ отдела при этом никто не спросил, им сказали надо.
4. «А что плохого что команда в данной истории решила ради «блага фирмы» поработать много и плотно (возможно, чтобы минимизировать возможные убытки)?» Откуда убытки если всё делалось в срок?
5. У всех есть раcпорядок: рабочие дни, выходные, праздники итд, но по воле Project Manager(которому возможно была обещана премия больше чем получили потом все программисты вместе взятые) все должны наплевать на свои планы и пойти работать на чужие балага фирмы. Можно сказать конечно что никто всех не заставлял, но по факту если в коллективе 25% согласилось на это, то скорей всего подтянутся остальные чтобы криво на них никто не смотрел(в особенности начальство).
6. Вышел ли на сверхурочную работу начальник фирмы и PM 90% что нет, они свою премию получат за то что они заставили за печеньки работать других.
7. «это оценят и при сокращениях/премировании/повышении и в целом лояльным отношением?» в пока ещё хорошей фирме да оценят, только когда вышел весь отдел, это не кто то отличился и поработал на благо, а все сделали одно дело. Всех не повысишь, при сокращениях тоже выделить некого, лояльней ко всем относится тоже не понятно как все ведь одинаковый вклад сделали. Премию да можно и дать, например в размере двойного оклада на время переработки(ну или чуть больше чтобы особо вредные не вякали).
Просто очень хочу понять, лично я (видимо наивно) испытываю чувство удовлетворения от успешно завершенного овертайма, и от пользы которая в итоге пришла от затраченных усилий на какой-нибудь квест типа как в статье.

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

Чтобы кратко подвести итог:
1. Соглашаясь на переработку ты подставляешь своих коллег, которым она не надо, но они почти вынуждены её делать.
2. Ты обесцениваешь свой труд и труд своих коллег(на проект было 20 дней вы сделали за 4 получили как за 8 вроде все в плюсе, но по факту получить должны были как за 20).
3. Ты загоняешь себя и своих коллег в кабалу постоянных переработок, потому что вы уже показали что можете, а этим грех не воспользоваться.
PS. Всё что я описал сильно передернуто, у вас в фирме такое ещё не случилось.

Ну тогда это волонтёрство какое-то. Имхо, мухи от котлет надо отделять.

POSы — это всегда весело в части работы с ним.
Помню как пытался срастить этот верифон с win системой на тему того, чтобы он корректно работал и loadparm грузился. Стабильная версия ПО отказывалась работать у меня на компе, завелся только снапшот, а вот у коллеги все работало ок. Так и не смогли выяснить причину :)
Возможно как раз таки дело было в прямом доступе к порту, который запрещен на NT, но который использовался в одной из версий loadparm. Что касается работы у коллеги, возможно причина в том, что у него в системе стоял какой-нибудь драйвер, установленный вместе с какой-нибудь VisualStudio или какой-нибудь пачкой банковского софта, который перехватывал доступ.
char Hash[CARD_HASH_LEN]; /**< [in, out] хеш SHA1 от номера карты ...

Это настоящий sha1 от номера карты?
Если это так, то можно восстановить номер карты, который нельзя раскрывать организациям, у которых нет PCI DSS.

В теории — настоящий. Не проверяли. Возможно соленый, но при слабой соли можно и подобрать, ели известен номер карты и этот хэш. Даже если тут можно получить номер карты, (а радужка займет 999 999 999 999 999 номеров x 20 байт на SHA1 = 177 Петабайт и при условии что хэш нигде не повторится) без CVV/C вы не сделаете покупку.

Цифр меньше, всего 11:


  • Последние 4 цифры номера карты нам возвращают.
  • Первую цифру легко восстановить по AID

Производительно одной Nvidia 1080 около 1 GH/s для sha-1 https://gist.github.com/epixoip/a83d38f412b4737e99bbef804a270c40 Примерно 27 дней на одну карту.


Есть точки, которые не требуют CVV.

не проще взять BIN и подбирать остальные 9 цифр, из которых реальных номеров будет десятки тысяч?

Насколько я понял, терминалы Сбербанка не возвращают BIN, только последние 4 цифры.

Речь идёт о нарушении безопасности.
Если, конечно, там обычный sha-1 без использования MAC-функции с секретным ключом (например, CBC-MAC).

нарушение безопасности что бы что? В чем суть атаки?
27 дней подбирать номер одной карты, на которой денег только на билет в кино?

На Radeon RX 5500 TX номер карты восстанавливается по этому хэшу за 30 секунд:


  • это обычный sha-1 от номера карты, что запрещено по PCI DSS
  • всего нужно подобрать 11 цифр, так как последние четыре цифры
    возвращаются терминалом, а первая цифра восстанавливается по типу карты (Visa, Mastercard и т.д.)
Еще можно получить 4 первые цифры и 4 последние (но терминал должен иметь настройки по-умолчанию).
Да и зачем подбирать прямо здесь и сейчас, если есть радужные таблицы?
количество BIN всетаки не большое. Тоесть можно вначле перебирать популярные BIN номера.
И не 11 а можно считать что 2 по 10.
Так-как первая цифры с 90% это либо 4 либо 5.
Поделите 24 дня на 10, последняя цифра в номере карты — контрольная сумма других цифр.
без CVV/C вы не сделаете покупку.

Смотря где. На том же Амазоне не просят его. Но строго говоря, там и делать бессмысленно: насколько знаю, Амазон отменяет по любому чиху

да, настоящий, он используется для бонусной программы. Учитывая, что терминал возвращает 10 цифр номера из 16, брутфорс по хэшу выполняется за доли секунды
Для бонусной программы «спасибо от СБ» используется урезанный хеш. Что конкретно там урезано — не помню (в понедельник могу доки глянуть) но по тому хешу номер карты вы не восстановите.
Забавно, что в доках про хэши ни слова:
DWORD spasibo(dynamic_function function)
{
  auth_answer9 argument;

  memset(&argument,0,sizeof(argument));
  argument.ans.TType = OP_PURCHASE;
  argument.ans.Amount = 100000;
  std::cout << "Let's try to pay!" << std::endl;
  DWORD result = function(NULL,&argument);
  // after call 'argument' contains card hash which required for second call
  if (result == 4353)
  {
    std::cout << "Sberbank Spasibo detected!" << std::endl;
    // KKM code can change amount (payment by spasibo)
    argument.ans.Amount = 90000;
    result = function(NULL,&argument);
  }
  
  std::cout << "Operation completed with code '" << result << "'!" << std::endl;
  return result;
}

Хеш тут только для видимости, он по сути эквивалентен номеру карты, так как из 16 цифр первые 6 — это BIN, их список для Сбербанка при желании можно найти (хотя список официально не публикуется), и еще одна цифра — контрольное число. То есть остается 9 цифр энтропии, которые перебираются на раз.


Напишу на всякий случай: хеш от данных с малым числом вариаций: номера телефона, паспорта, ФИО, почтового адреса легко обращается и эквивалентен самим данным.


Поэтому это хеширование, конечно, число символично.

В первой половине 2000х несколько лет работал в ритейле, вспоминал как страшный сон.
такой концентрации говнокода, говонософта, костылей и велосипедов не видел нигде.
После того как ушел, вспоминал как страшный сон и радовался

В этом году скинули новый проект связанный с ритейлом, пришлось окунуться
Ничего не изменилось. Встретил даже windows2000 в продакшене в 2к19 ))))
Я не так давно в налоговой видел DOS не в CMD, так что не удивлен, что где-то есть Windows2000.
Использовать loadparm.exe, утилиту для тестирования и техобслуживания, вместо sb_pilot.exe — это сильно. Хотя использовать надо отличную библиотеку sbrf.dll (почему все хватаются за неудобную pilot_nt.dll?). Удобство стоит написания разного кода под Windows и Linux. Специфичного кода там будет немного.
Читайте доки ДО кодинга, а не после, и будет вам счастье.
1) Я рекомендую вам перечитать статью, где вы увидите, что sb_pilot.exe для windows в последних сборках сбербанка попросту отсутствует.
2)
Хотя использовать надо отличную библиотеку sbrf.dll (почему все хватаются за неудобную pilot_nt.dll?).

Ну, наверное потому, что sbrf.dll согласно документации работает черезх OLE объекты (в 2019м году) а еще, наверное, потому, что OLE объектов под linux нет?
Удобство стоит написания разного кода под Windows и Linux

Не вижу ничего неудобного в чтении данных из структуры, а не из Sberbank.OLEObjects(«payment»).OLEObjects(«amount»).Object.Value. Два разных приложения под разные платформы — это в два раза больше времени на разработку, в два раза больше проблем при поддержке кода и в два раза больше FAQ записей для NOC при поддержке продукта.

Ну и еще, наверное, потому, что в официальной поставке хэдеры для работы с библиотеками есть только под pilot_nt. Под sbrf предлагается только пара примеров работы через visual basic для отдельных функций.
Да нет никакого sb_pilot.exe для Винды! И не было никогда, sb_pilot — только для Linux и DOS. А за отсутствием нужного ПО, использовать утилиту для тестирования — это как вместо туалетной бумаги взять наждачную.

Да, в Linux нет OLE. Но откуда «в два раза больше времени на разработку»? Семь-десять строчек кода — это безумно много? Сделать обёртку и запилить условную компиляцию — это просто. И это более правильно, чем надевать штаны через голову использовать ПО для DOS в Винде.
Между прочим, фунционал sb_pilot.exe не будет расширяться, ибо он уже не лезет в нижнюю память 640K, «которой хватит всем».

Насчёт документации. Она есть, и там описана работа со всеми интерфейсами под Винду. Для каждой либы — свой документ, с примерами. Просто запросите новый релиз UPOS, и не «огрызок» папку PC_STUB, а полный архив.
Я уже второй раз вас прошу — перечитайте еще раз статью; loadparm.exe НЕ используется.
Семь-десять строчек кода — это безумно много?

gefjon$ cloc .
     312 text files.
     291 unique files.                                          
    2083 files ignored.

http://cloc.sourceforge.net v 1.60  T=5.97 s (45.4 files/s, 5132.2 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                              112           3130            691          13099
C/C++ Header                   132           1316           1758           9306
Bourne Shell                     8            114             75            684
ASP.Net                         17            105              0            291
Perl                             2             17              4             74
-------------------------------------------------------------------------------
SUM:                           271           4682           2528          23454
-------------------------------------------------------------------------------


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

};
extern "C"
{
    void f(tst *a){ }
}
int main()
{
    tst A;
    f(&A);
    return 0;
}
и

extern "C"
{
    struct tst
    {

    };
    void f(tst *a){ }
}
int main()
{
    tst A;
    f(&A);
    return 0;
}


прокатывают, во втором случае clang выдаёт warning: empty struct has size 0 in C, size 1 in C++ [-Wextern-c-compat]
extern «C» не даёт C++ компилятору уродовать имя, а компилируется всё по прежнему в C++ режиме.
$ gcc file.c -o file.o
file.c:15:3: error: unknown type name ‘auth_answer’
   auth_answer auth_answ;
   ^
                  ^
$ cat file.c
#ifdef __cplusplus
extern "C"{
#endif

struct auth_answer{
   int TType;             
   unsigned long Amount;  
   char RCode[3];      
   char AMessage[16];  
   int  CType;         
   char* Check;        
};

struct auth_answer7{
  auth_answer auth_answ;
  char   AuthCode[5];
  char   CardID [5];  
  int    SberOwnCard;           
};

#ifdef __cplusplus
}
#endif
Ага, теперь понятно. Выглядит как будто пытались, но протестить на чистом C не смогли.
А когда-то сбер вытащил с рынка всех программистов, вообще было не найти никого и они написали вот это в итоге?
Они это поддерживали. Уверен, корни этого кода уходят в нулевые, если не раньше. Чего одна версия для 16 бит стоит.
Так переписать не проще? Все мы так делали и проект становился лучше(ну в редких случаях только не помогало).
А куда девать миллионы касс и терминалов, которые разбросаны по всей стране и работают на MS-DOS/windows 98/Windows XP/Windows 7/Windows 8/Windows 10/Linux?
Подскажите пожалуйста, не сталкивались ли вы с ошибкой «2002; Описание: Превышено время ожидания;»? Какое её правильное описание? Может лечится как-то?

Так как по долгу службы я работаю в сфере технического сопровождения кассового П.О. под управлением OS Ubuntu GNU/Linux в одной из розничных сетей… Так вот Данная ошибка встречается мной очень часто и раздражает меня уже не первый год. После выполнения операции оплаты sb_pilot возвращает в p файл слип в котором написано «ОДОБРЕННО» а в e файл эту ошибку с указанным выше описанием. При этом деньги с клиента списываются и судя по сверке итогов операция в банке считается успешной, но само кассовое П.О. парсит этот статус и считает что ошибка есть ошибка и блокирует продажу…
Конечно Я мог бы поставить костыль и игнорировать это дело, но это же всё же банковские документы, потому хотелось бы лишний раз их не трогать…
На тестовых терминалах — не сталкивались.
Согласно документации:
2002
Превышено время ожидания
Повторить операцию. На ввод ПИНа дается 1 минута.

Точно ли деньги списываются? Судя по описанию похоже на ситуацию когда кто-то прошляпил время ввода пин-кода.

Конечно Я мог бы поставить костыль и игнорировать это дело, но это же всё же банковские документы, потому хотелось бы лишний раз их не трогать…

*шепотом*: у Альфа-Банка (точнее UCS-терминалов которые они используют) есть ошибка I6, при который НЕ печатается слип, кассиру выводится сообщение об ошибке, однако оплата проходит и клиенту нужно сказать что все хорошо, но бумажки он не получит.
Точно ли деньги списываются?

Точно, слип выходит, проверяли и не раз, у и банка запрашивали корректность всех операций они говорят всё ОК. Я нахожусь в патовой ситуации, так как СберБанк утверждает что всё нормально и они никогда с данными ошибками не сталкивались, а разработчики кассового П.О, говорят что Мы не можем игнорировать ошибки и обязаны по ним отработать…
Тогда скорее всего это ошибка не связи с банком и подтверждения операции, а ошибка связи с самим пинпадом после совершения платежа.

Могу предложить следующий путь решения — запустить тестовую транзакцию, и дождаться автоотмены по таймауту (не вводить ПИН).
*Если будет ошибка 2008 — то в реальных условиях ориентироваться на наличие слип-чека.
*Если будет НЕ ошибка 2008 — то игнорировать 2008 в реальных условиях.

Это все если пытаться решить самостоятельно. Если хочется официального решения — то надо писать в Сбербанк, давать им запись с видеонаблюдения того момента когда оно выдало 2008 (чтобы они могли задетектить например должгое ожидание), давать им sbkernel.log за то число с указанием времени проблемы и описание. Раз у вас есть их терминал, то у вас есть полное право затребовать поддержку.
да, есть такой баг, если не ошибаюсь, проявляется при бесконтактной оплате
Ни в коем случае не делайте костыль на коды возврата UPOS. Это плохо закончится.
Если эта ошибка лезет постоянно, и на разных ККМ, попробуйте следующее.
1) не отменяется ли операция, когда Вы делаете следующую операцию?
2) обновите ПО UPOS на одной группе ККМ. Перед этим позвоните в техподдержку и закажите удалённую загрузку ПО на эту группу терминалов;
3) выдайте права «777» на папку с UPOS и файлы в ней;
4) проверьте настройки терминала (TlvEdit.exe --> Ctrl+F6 --> дождаться выгрузки настроек из терминала --> Дополнительные опции):
Порядок выполнения операции — По команде от ККМ, с печатью чека на кассе
Подтверждение результата кассиром — Никогда
Возвращать промежуточный код ответа — Не возвращать
Ожидать изъятия карты после операции — Ожидать.

Если Вы не сможете разобраться с настройками сами, выгрузите настройки в файл *.TLV и вышлите его для анализа в техподдержку Сбера, снабдив логом и комментарием про ошибку 2002.

Кстати, можете выслать настройки мне. Напишите мне письмо, я Вам вышлю свой служебный адрес, куда можно выслать настройки и логи.

Интересно, а Сбербанк не даёт описание протокола, как общаться через USB или rs-232 с терминалом?
Тогда было бы намного проще интегрироваться.

Не дает. Потому что это требует другой уровень сертификации в PA DSS, поскольку идет работа с незашифрованными данными пользователей.

Терминал не должен по USB или по rs-232 выдавать чувствительные данные (PAN, PIN block).
Поэтому здесь нарушения стандарта PCI нет.

В последний раз пришлось испытать нечто подобное при попытке завести .NET Core на linux (и windows кстати тоже), причем на уровне запуска хеллоуворд приложения. С интервалом в год (стало еще хуже). Ну не любит MS linux, и самих себя тоже не особо жалуют.
Настолько не любит, что свежая версия десятки будет включать в себя ядро Линукс :) могу только предположить, что MS и сами далеко не всегда в восторге от своей продукции, но у тёмной стороны очень уж много печенек…
Мне, если честно, сложно представить как вы так пытались его завести что он у вас не завелся с полпинка. Сижу на .NET Core со времен 1.0 release candidate и не помню чтобы у меня были проблемы с установкой SDK и Runtime'ов и компиляцией приложений как на винде так и на линуксе.
Хотел писать статью тогда (с камнями, как тут). Там на каждом шагу были какие-то несоместимости, основная цель была подружить это все с Азуром из VS code. Даже пол-года назад (когда уже была релизная версия «стабильная») впечатление было, как будто все это даже не бета еще, не знаю как вам удалось без запинки все завести с release candidate…
Ну может конкретно с Азуром там какие-то косяки по деплою были, я все что с ним связанно не ковырял особо так как не было необходимости. Но с компиляцией и запуском локально точно проблем не было в различных комбинациях деплоя (self-contained/framework-dependent) и платформ (win/linux).
3 года назад внедрили терминалы сбера. Через gate.dll все работает, особых проблем не возникло. Правда не завелось из-под сервисной сессии, но это оказалось для нас некритично.
Судя по их документации работа под gate.dll отличается от pilot_nt только названием функций, остально практически дословно:
in.in_struct = &InDetail;
out.out_struct = &OutDetail;
out.Reserved = &outExtra;
outExtra.size = sizeof(outExtra);
inExtra.size = sizeof(inExtra);
in.Reserved = &inExtra;

Для linux она опять же не поставляется, для нас это было критично.
Вот список багов с которыми сталкивались:
1) Иногда терминал возвращает неверный виртуальный номер отдела и соотвественно мерчант. Возвращает тот, который в списке отделов стоит первым. Но деньги уходят правильно, в сверке итогов все корректно
2) Как писали выше, при бесконтактной оплате при сумме больше 1000, если не ввести пинкод за 1 минуту, деньги все равно списываются. Возвращается код ошибки 2002.
3) При бесконтактной оплате cardholder name не отражается в слип-чеке.
4) У них обновление конфигурации терминалов при сверке итогов, которое может закачать неверную конфигурацию терминала. После такого кривого обновления в лучшем случае терминал встанет, в худшем — деньги пойдут не туда, куда нужно
при бесконтактной оплате при сумме больше 1000, если не ввести пинкод за 1 минуту, деньги все равно списываются

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

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

Дак в том и фишка, что если можно снять любую сумму, то не будет «N покупок без пин-кода», будет одна большая

Блин, я думал у нас все плохо…
P.S. тоже ритейл, но более мелкий и специализированный.

Интересная статья, но я не могу понять особенность чисел 3, 7, 9, 10, 13, 15 и 16. Почему они были изгнаны?
Все названия глав взяты (как и частично название статьи) из произведения Д.Р.Р.Толкина «Хоббит или туда и обратно». Те главы, названия которых не подходили по смыслу повествования были исключены.
сообщил, что сроки реализации проекта должны быть быстро и решительно сокращены на месяц. Точнее говоря проект должен быть готов через 4 дня.

Похоже, вы друг друга стоите. :)

[стеб] М-м-м, что? Visual Studio 2017 не поддерживается на Windows 7 32bit? Ха-ха-ха. Может там у вас ARM? Или 1ГБ оперативной памяти? А может просто «лагает» на 4ГБ… Ой, бедные. Клик, кому интересно, что за машина у меня. [/стеб]
Я уже 3-й год программирую на таком конфиге. И я не помню случаев, где кроме битности системы что-то мешало. Лаги не в счет.
Вот это техно-детектив. Я, как c# разраб, половины не понял, но было интересно!
Спасибо!
команде было обещано что-то вкусное
Вы там за еду что-ли работаете?
А если серьёзно, то меня пугает эта тенденция что сроки спускаются сверху… обычно это заканчивается тем, что профессионалы уходят.
Мы занимаемся автоматизацией кинотеатров — автоматическим и дистанционным управлением оборудования, автоматизацией кинопоказа, мониторингом, видеопанелями, а теперь еще и терминалами продажи билетов и бара.
«Киноплан»?

P.S. Зачем вы мне снова напомнили про эти ваши кинотеатры? Я лишь недавно — спустя полгода после увольнения из одного из них (кстати, из того, который у вас на одном из фото изображён) — начал забывать этот ужас.
Only those users with full accounts are able to leave comments. Log in, please.