Шёл 2013-й год. Я тихо занимался ремонтом компьютеров в сельской местности. Гоняя чаи и закусывая сезоном очередного сериала. Как-то раз мой начальник предложил заняться платёжными терминалами. Ему их практически даром отдавал знакомый предприниматель, плюс предлагал устанавливать в его же магазинах на безвозмездной основе. Они, кстати, там же и стояли, просто их хозяину надоело с ними возиться.
Вначале я был против них, нужно будет мотаться, попу отрывать от теплого кресла. Да и вообще, я считал возни будет много, а прибыли ноль. Так как они выгодны только владельцам магазинов для привлечения клиентов. А шеф грезил о миллионах, он уже несколько раз видел, как из них достают толстенные пачки денег. Сказал, что внутри там то же железо, что и на обычных компах, и тот же Windows.
— Ты же можешь это делать.
— Ну да.
— Ну и всё тогда, зарплату отдельно будешь получать.
Возразить было нечего, к тому же у меня уже был опыт поддержки подобной системы Windows XP, VPN, файло-помойка, плюс один удаленный клиент на wi-fi, где было важно, чтобы компьютер всегда был включен и доступен.
Первым делом их надо было привезти к нам, почистить, переставить систему, установить программы и проверить всё железо. Терминалы были тяжелые, в вандало- устойчивом корпусе, поэтому чтобы самим не таскать, шеф подрядил местных калдырей, что околачиваются рядом с магазинами в вечных поисках на опохмел. Было весело смотреть, как они несут эти тяжелые гробы и пытаются затащить по лестнице. Впоследствии мы уже сами наловчились и спокойно перетаскивали их вдвоем. До точки, естественно, везли на машине.
Терминалы под брендом QIWI. С ними я тоже знаком. Имелся кошелек и я очень долго и успешно им пользовался. Сама QIWI не занимается терминалами, она только предоставляет программную оболочку и готовые сборки. Так что в ближайшем крупном городе нашли их субдилера и заключили договор. От них же получили программы, ключи и пароли. Настраивали они всё сами, я лишь предоставлял им удаленный доступ. На первых порах это очень облегчало мне работу.
Через пару недель терминал уже работал и мы тестировали его у себя на точке, а ещё через пару дней отвезли его на свое родное место. Сперва платежей было мало, но потом он раскрутился и поток денег начал двигаться в нашу сторону. Появились ещё терминалы и я уже показывал шефу статистику по платежам за месяц-два. У QIWI есть свой сервер статистики, и я целыми днями следил за состоянием терминалов и за тем, где какие платежи проходят или не проходят. Это оказалось очень интересно, оказаться по ту сторону экрана. Раньше я лишь пользовался терминалом и слабо представлял, что там и как. Я даже настроил удаленный доступ через Radmin 2.2 (3.0 не пошел, видимо, какой то конфликт с QIWI программой возникает) + Hamachi = Любовь навеки. Если не было основной работы, часами наблюдал, как клиенты деньги кладут.
На все платежи мы установили единую комиссию, так как основная задача зарабатывать деньги. Но со временем стал замечать, что некоторые платежи проходят без комиссии. Оказалось, это мобильные кошельки, для них комиссии нет и не только для кошельков, а для всего, что проходит через них — кредиты, переводы и т.д. И таких платежей становилось все больше и больше. В нашем районе развилось кредитование. Дела стали ещё хуже, суммы большие. Многие умудрялись копить долги, а потом скопом проводить в наших терминалах. Таких платежей стало так много, что больше половины суммы, которую мы крутили на терминалах, бегала впустую. Нет, конечно, QIWI платила за такие платежи, но настолько мизерные проценты (сотые доли), что просто не покрывало наших расходов. В банк положить и то выгоднее.
Обратились к нашему дилеру, он подтвердил, что да, такая проблема есть и на них нельзя ставить комиссию. К тому же мы попали в то время, когда QIWI объявила всем «амнистию» и теперь все пополнения кошелька 0%. Дилер предложил, как вариант ограничить максимальную сумму платежа и пользоваться встроенным чёрным списком, блокировать особо наглых клиентов. На каждом терминале свой список и к каждому надо подойти и ввести злополучный номер. После этих новостей я окончательно перешел на тёмную сторону.
Для нас это фраза стала актуальна как никогда. Ограничили номинал в купюроприёмниках. Начал блокировать подряд всех не угодных, настоящая охота на ведьм, не щадил ни больших ни малых. Дилер рассказывал, как предприниматели жалуются на QIWI. У многих были километровые портянки с блокированными номерами. Это была война, жестокая и беспощадная, мы попали в самое пекло её. И проигрывали, на своём же поле. Каждое утро, приходя на работу, первым делом проверял вчерашние платежи и если там находились платежи на QIWI, тут же добавлял их в чёрный список.
Ходить к каждому терминалу и вбивать вручную я конечно не стал. В папке с программой я нашёл whiteblacklist.xml – это общий список для чёрного и белого. Сделал себе полный файловый доступ к каждому терминалу (hamachi рулит) и bat-файлом автоматически обновлял. Но это не помогало, люди у нас ушлые, они просто идут в салон, покупают новые симки и кладут на новый кошелек по 15000р. Черт, у нас оборота в день меньше было!
Но всё это, конечно, было мытарство. Ещё минус таких блокировок в том, что если добавляешь номер в список, то он блокируется везде. Т.е. клиент не мог уже даже на телефон себе положить. А на кредиты этот чёрный список вообще никак не влиял. Короче, куда не кинь, всюду клин. Так что стал искать способы сделать эту комиссию самому, либо вовсе блокировать такие платежи. Иначе у нас просто терялся смысл держать терминалы. Там же в папке с программой нашёл commission.xml – это было то, что мне нужно.
Запустил Delphi 7, он у меня уже давно сидит без дела, быстренько накидал программу, которая парсит этот файл и меняет все значения на то, что мне нужно. Поздно вечером я проверил свои догадки. И это сработало, комиссия на QIWI появилась. Но через несколько дней её не стало. Я снова посмотрел на файл и увидел, что всё вернулось, как было. Стало понятно, что программа следит за своими файлами и исправляет его при обновлении. Ну, ладно. Снова Delphi, кидаем таймер на форму, быстро набираем — и новая программа теперь читает этот файл каждую минуту, вычисляет CRC-сумму и если она не совпадает — парсит файл, меняет значения, запоминает новую CRC-сумму и заменяет файл на новый. Можно не парсить файл, а просто заменять на исправленную, но у QIWI часто появляются новые провайдеры, а старые исчезают. Так что парсить и править правильнее. Но радость моя была не долгой, ибо ею я поделился с нашим дилером. Он сказал, что в QIWI следят за платежами и если заметят наши манипуляции — их оштрафуют, а они нас. Всё пришлось свернуть. Конечно, у меня была ещё идея как заблокировать эти платежи, но… мне она тогда показалось настолько простой, очевидной, но вместе с тем глупой и невозможной, что я отбросил её.
Начал смотреть в другую сторону. А именно — мониторинг. Он мне не нравился, совсем. Там не только нужно каждый раз на сайт заходить, да ещё пользоваться специальным ключом. И всё время вручную заниматься обновлением странички, чтобы ничего не пропустить. Как вы понимаете, я тут же решил сделать свой мониторинг.
Но мне важнее всего получать сообщения о состоянии терминалов. Поэтому первым делом наладил смс. Нашёл специализированный сайт, в котором можно подключить свой номер и получать на него смс, просто отправляя письмо на почту. У каждого терминала свой почтовый адрес. Написал программу, которая проверяла эту почту, добавляла имя терминала и пересылала на почтовый адрес, который выдал этот сервис. Это нужно для того, чтобы знать, от какого терминала пришло сообщение. Можно просто добавить свой почтовый адрес на все терминалы, но в письме будет только номер терминала, который мне ни о чём не говорит. Параллельно такое же оповещение сделал и шефу.
Я расширял свой мониторинг. Сперва хотел соединяться с сервером QIWI и вытаскивать оттуда данные, но страница там защищённая и мне не удалось скачать данные с сайта. Всё слишком сложно и нет готовых решений.
Так что подошел к вопросу с другой стороны. Приложение QIWI в терминале всё подробно пишет в лог. Написал серверную часть, которая парсила этот лог и отбирала только нужные мне данные. А также клиента, чтобы принимать сообщения и показывать на экране. Один из терминалов стал главным, у него белый IP и все остальные терминалы отправляли данные ему.
Клиентская программа всё делала сама. В углу экрана висела маленькая форма поверх всех окон, показывала текущий баланс и цветом показывала состояние связи с сервером. Первым делом я её закинул шефу на компьютер и больше он уже не спрашивал, сколько денег осталось на счёте. Короткий взгляд на экран — и все ясно.
Дальше — больше. Теперь рядом с балансом появлялись строчки из лога: ошибки купюроприемника, какую купюру принял, на какого оператора, сумма платежа, комиссия и т.д. И при этом мне не нужно нажимать ни единой кнопки. Это очень удобно, тем более когда целый день за компьютером. Сразу видно, работают терминалы или зря электричество жрут. Если я надолго отходил от компа, то по приходу щелкал мышкой по форме и просматривал уже общий лог от всех терминалов.
Ещё во время написания мониторинга для компьютера мне пришла новая светлая идея. Написать клиент и для телефона на Android. Своя программа от QIWI неплохая, но она молчит. А я хочу при любых ошибках и просто о платежах получать звуковое оповещение. Попытки установить разные SDK не увенчались успехом, всем им чего-то не хватало. Да ещё не знания языка. И писать одновременно сервер и клиент для компьютера и ещё для телефона. В общем, решил немного ускорить процесс. Ага…
На 4pda.ru выложил идею своей программы и несколько человек откликнулись. Но первый, услышав мой бюджет, жёстко раскритиковал. Так что я приуныл. Но следующий согласился сделать хотя бы часть. Я был готов и на это. За обслуживание терминалов шеф платил мне три тысячи, так что эту сумму я и предложил в качестве оплаты. Отправил ему все мои пожелания и даже блок-схему нарисовал.
Я не стал ему говорить, что это программа для QIWI, сказал только общее назначение: слежение за компами, что в общем и было сутью программы. И так как бюджет у меня небольшой и из собственного кармана, я максимально упростил задачу, плюс сделал более универсальной. Её можно использовать в любом проекте, где нужно получать уведомления на телефон. Протокол общения простой: отправить код, получить строку, добавить в таблицу. Соединяется раз в 30 сек. Принцип приложения: программа — логер, показывает общий лог сообщений от всех терминалов в одной таблице. А так же проигрывает звуки. За сеанс каждый тип сообщения проигрывается только один раз, независимо от того, сколько таких сообщений было получено. Я разделил сообщения на разные типы: платеж, прием купюры, ошибки и т.д. У каждого типа свой звук. Например: на ошибки поставил звук как в Windows, а на принятый платеж звук падающей монеты. Мне даже не надо доставать телефон, по звукам можно определять, что происходит в терминалах.
На все ушло несколько месяцев (!). Как оказалось, программистам понять друг-друга ещё сложнее. Но в конечном итоге мы смогли его сделать и я наслаждался первыми звуками принимаемых платежей. Мне понравилось, что получилось в итоге. И я предложил дорабатывать программу дальше. Теперь нужно добавить ещё одну таблицу сверху, в ней будет показываться текущий статус терминалов в сети/не в сети и проч. ошибки, требующие немедленного внимания. Заплатил ему ещё столько же, и он всё доделал, ну и ещё исправил некоторые недочеты.
А теперь самое интересное. Так как на платежи QIWI не мог поставить комиссию, решил развлечься. Отметил их отдельным типом и назначил звук из сериала «Шерлок». Да, да, тот самый, который мисс Адлер поставила на его телефон. О! Вы не представляете, как забавно наблюдать за лицами людей, когда приходит сообщение и голос громко и четко звучит в комнате. Самое смешное, что даже я не мог сказать, когда он проиграет. Когда друзья и знакомые спрашивали «что это?», я с невозмутимым видом отвечал, что, мол, это по работе. И ведь в жизни не догадаешься, что это за работа такая.
Я нашёл себе новое развлечение. Что делает человек, когда терминал не берет крупную купюру? Правильно, идет на кассу в магазин и просит разменять. А что делаю я? Сижу за монитором. В этот момент вижу, как внизу сменяют друг друга строчки с ошибками. Их сразу видно, так как они красного цвета. Если там написано, что купюра отключена, то быстренько открываем программку и смотрим, куда пытаются положить денежку. И если это QIWI, то открываем другую программу и вносим номер в чёрный список, его тоже видно в логах. И запускаем на обновление. Кто успел, тот и выиграл! Конечно, все это можно автоматизировать в программе на сервере, она сама там всё может делать и намного быстрее меня…
Но как же это весело, когда ты по утрам сонный ещё попиваешь кофею, а телефон начинает сыпаться звуками ошибок. Ты с горящими глазами бежишь к компу, трясущимися руками лихорадочно щёлкаешь клавишами, набирая номер (копирование, конечно же, тебе тоже лень сделать). Наконец щёлкаешь заветную кнопку Enter. Мелькание окон с зелёными строчками на тёмном фоне… В общем, голливудские фильмы про хакеров отдыхают.
Ну, развлечение развлечениями, но хотелось ещё чего-нибудь. Хоть как-то использовать терминалы. Потому что вот они у меня в руках, я могу делать с ними всё что угодно, но при этом ничего не могу придумать. Несколько бессонных ночей ничего не дали, поиск в Google тоже. Либо никто этим не интересуется, либо как-то используют, но молчат. Единственное, что пришло мне в голову — это банальная реклама. Ну а что, у нас несколько разных магазинов, ремонт тот же, почему бы и нет. В день там сотни людей рядом проходит. QIWI там и так рекламу крутит, а мы чем хуже.
Обратился к дилеру со своим вопросом, как там и чего надо сделать, чтоб наша реклама появилась. Но он ответил, что QIWI этим заниматься не будет, они по всей России только работают. А мы слишком мелкая фирма для этого. Ну что ж, если гора не идет к Магомеду… Гору сами нарисуем!
Вывел в верхней части экрана плашку, на ней три контейнера для картинок с рекламой и они по кругу друг друга сменяли. Через несколько дней знакомый при встрече сказал, что видел нашу рекламу. Говорит, никому не интересна, никто её не смотрит. Не интересна, говоришь… Ну-ну. Переделал программу, теперь она висела скрытно и следила за мышью. При любом движении выскакивала, как черт из табакерки. И исчезала только через минуту — и то при условии, что мышь не дергаешь.
Однажды, когда очередной терминал стоял у нас в салоне, какой-то человек долго стоял возле терминала и что-то там делал. Я в это время наблюдал за ним в камеру, которая стоит в салоне. Мне всё показалось подозрительным, и я вышел в зал спросить, в чём дело. Оказалось, он пытался оплатить кредит, а моя реклама ему мешала. Раньше, говорит, там кнопка была и её можно было спрятать, а теперь вот приходится ждать. И ведь он ждал, и ждали все те, кто пытался оплатить кредит, ведь они все ещё светились у меня в логах…
Гореть мне в аду синим пламенем!
К нам обратилась хозяйка одного из магазинов с предложением поставить терминал у неё на точке. Она находилась в соседней деревне. Дорога туда хорошая, деревня богатая, живут лесом. Так что я начал собирать новый аппарат. Проводного интернета там нет, так что добавил в терминал USB-модем от «Мегафона». Родной модем, который шел в комплекте, мне не подходил, там только EDGE, а у меня трафик увеличенный, так что только 3G. В свое время я пользовался модемами и мне не нравилось, что программа вечно выскакивает на экран при обрывах. Поэтому написал bat-файл, который следил за сетью и сам переподключался при обрывах, при этом всё делал молча и не мешая. Так что она пригодилась и здесь. В итоге всё собрали и отвезли на точку.
Когда устанавливали на место, там были покупатели. Естественно, им было интересно, что это и зачем. Мы, конечно, объяснили, что они здесь смогут деньги класть на телефон. На что какая-то бабка нам заявила: А где вы там? Где живёте? Если деньги не придут, мы приедем и отпи… м вас! Мда… Если уж бабка старая, которая на ногах то не стоит, нам угрожает, что же ждать от остальных? Дикий народ. Что сказать.
Пару первых месяцев всё было нормально. А потом началось… Первым делом рухнула станция «Мегафон». Связи не было несколько дней. Ладно, это мы исправили, поставив модем от «Билайна». Потом и вовсе я модифицировал свою программу на bat, теперь она переключалась между модемами при обрывах. Но и это не работало. Модемы тупо зависали. Не могли сами переподключится с базовой станцией. Чтобы появилась связь, терминал нужно выключать, полностью минут на 15. И я часто звонил продавцам с просьбой выключить терминал, а потом включить.
Начали слетать настройки сенсора, застревать бумага в принтере, зажёвываться купюры. Мы мотались туда почти каждый день. Не могли понять, в чём же дело. Разобрали и почистили сенсор, поменяли принтер, купюроприёмник, даже сенсор вместе с монитором меняли. Поменяли блок питания внутри корпуса, поставили стабилизатор напряжения. Заземлили терминал, так как он бил током. Вбили в землю штырь, сделали дыру в раме окна и провели провод до терминала. Зависали процессы в системе, закидал туда кучу контролирующих скриптов. Bat на bat-е и taskkill-ом погоняет. Всё впустую.
Созвонились с дилером, рассказали нашу проблему. Они с таким не сталкивались, предложили поменять терминалы местами. Поменяли. На новой точке глючный терминал заработал как ни в чём не бывало. А на этом месте опять проблемы. Подумали, может местные что-то творят. Поставил web-камеру + Ivideon, но ничего такого не увидел. В шутку предложил вызвать священника и муллу на пару. Место явно проклято.
Мучились несколько месяцев. В итоге причину такого аномального поведения мы не выяснили. Но все решилось очень просто. Самое главное для нас — наладить связь, поэтому провели интернет ADSL. Всё. Все симптомы как рукой сняло. Очухались мы где-то через две недели. А терминал-то работает, без проблем. Пытаться экспериментировать и выяснять в чём дело я не стал, хватит. Вернулись к простой истине: работает — не трогай.
Конец 2014 года принес кризис и в мою обитель. Любовь виртуальная, как и любовь реальная, оказалась не такая уж и вечная. Hamachi приказал долго жить, закрыв все бесплатные аккаунты. И я долго ругал свою лень. Ведь знал, что этот день придет. Надо было готовить OpenVPN. Но чего нет, того нет.
Скачал новую версию OpenVPN и начал тестировать на одном из терминалов. GUI интерфейс они поменяли, но всё так же оставили её убогой. Неужели так сложно научить её следить за сетью и переподключаться при обрывах? Всё приходится делать самому. Опять пришлось писать bat-файл, который пингует сеть и если нет ответа, грохает все процессы openvpn.exe и запускает по новой. На полное восстановление сети ушло пару недель, ездил к терминалам только попутно с шефом. Сносил Hamachi и ставил OpenVPN. Также увеличили комиссию на всех терминалах.
У нас появились конкуренты, терминалы от хозяев новых магазинов и комиссий там нет. Они ставят их исключительно для привлечения клиентов. Так что для меня до сих пор остается загадкой, кто ж все эти люди, что кладут деньги в наших терминалах.
В начале этого года я ездил в город поговорить с дилером. Мне интересно писать программу для мониторинга QIWI и я спросил у дилера, как обстоят дела у других. Как они смотрят за своими терминалами. Нужна ли программа подобно той, что я написал. Он объяснил, что там, где много терминалов, сидят специальные люди и следят через сайт, так что им вряд ли это интересно. К тому же мою программу надо в каждый терминал отдельно ставить. Если всё так сложно, оно и даром не надо. Куда важнее им сейчас QIWI платежи – это головная боль всех владельцев.
Что ж, по приезду домой я уже полностью созрел и был готов реализовать любую безумную идею, которая способна блокировать платежи, лишь бы она работала.
И я приступил к делу. Вывел максимально прозрачную форму в правом нижнем углу. Размер такой, чтобы полностью закрывать появляющиеся там кнопки. Теперь любое нажатие в этом месте отслеживалось моей программой. При нажатии на форму она делала скриншот экрана, вырезала 2 части с изображения и сравнивала попиксельно с тем изображением, которое нужно блокировать. В данном случае интерфейс ввода номера кошелька QIWI. И если совпадала, то программа перемещала курсор мыши и нажимала на кнопки < Назад > и < На главную >. Думаю, клиенты слегка офигели от такого поведения мыши, форму то им не видно. Если ж не совпадало, то программа делала свою форму полностью прозрачной, тогда можно нажимать за формой. Собственно, сама и нажимала туда, куда хотел нажать клиент. Это работало, но не везде, причина оказалась в глубине цвета, которое указывается в свойствах экрана, но я их всех сделал одинаковыми.
Я перешёл в наступление, но тут оказалось, что не всё блокируется. Это были переводы, через тот же злополучный кошелек. Интерфейс там уже другой. Что ж, скрепя сердце добавил второе изображения для контроля. А там изображения в формате BMP по 3,5Мб! Но тут появилося третий интерфейс… Наступление провалилось, толком не начавшись.
Нужно искать другое решение, простое и менее ресурсоёмкое. И такое нашлось. Статья на Хабре — перцептивный хэш. Провозился с ним все выходные, засиживаясь до ночи. Но оно того стоило. В статье кода не было. И в гугле готового решения тоже. Но автор всё хорошо пошагово расписал. Так что часть поиском, часть своим умом я получил свой первый хеш, а дальше дело техники. Программу переписал, теперь стало намного легче. Она всё также вырезала из скриншота часть изображения, но теперь намного большую и одну, вычисляла хеш и сравнивала с готовым списком. Ещё вначале написании программы я научил её сохранять на диске все скриншоты в формате JPG и теперь с легкостью собрал все хеши. Для перцептивного хеша не имеет значения, в каком формате изображение и насколько оно сжато, результат всегда получался одинаковый. Программа всё пишет в лог: когда сделала скриншот, какой хеш. Так что даже если что-то пройдет мимо, я просто по времени найду это место и скопирую готовый хеш. Прежде чем снова вступать в бой, я решил всё проверить. Скопировал скриншоты с терминалов и сравнил все хеши с теми, что блокировал. Чтобы исключить ложное срабатывание. Все прошло отлично. Так же изменил реакцию программы на блокировку. Мышь теперь не трогал, а вместо этого выводил такую же надпись, как при блокированном номере. Для ушлого клиента выглядит так, как будто его номер в чёрном списке. Программу раскидал по терминалам и перезагрузил их.
Но всё опять не работало! После долгих мучений выяснилось, что виновата QIWI, а точнее то, как она запускалась. Ещё год назад, ратуя за безопасность, они поменяли способ запуска своей программы. Она замещала собой стандартный шелл Windows. И все программы, которые есть в Автозагрузке запускала сама. Возможно, там запуск программ несколько иначе, нежели в стандартном explorer.exe. А может из-за прозрачности моей формы. Выяснять не стал, просто отсрочил запуск своей программы. Написал простой bat-файл, который запускал её через минуту после себя. Всё заработало, как надо. На другой день я лично сходил к терминалу и проверил блокировку. Затем ещё несколько дней удаленно через Radmin созерцал работу своей программы. Это не обязательно, всё можно прочитать в логах, но лучше один раз увидеть, чем сто раз услышать. Программа всю работу выполняет четко. Задержка минимальная, и это притом, что я ничего не оптимизировал, даже поиск хеша в списке шел тупым перебором. Сейчас список маленький, но даже если там появится сотня записей, это не сильно повлияет на производительность.
Чёрный список был очищен от всех прокаженных, став девственно чистым. И я вернул покой в тёмную программерскую душу.
Что ж, мой рассказ заканчивается, но история продолжается. Мне надоело заниматься ремонтом, вытаскивать из системника дохлых мышей и бабочек и нюхать тонер, как заядлый кокаинщик. Меня ждет большой велопоход на юга, жаркое и длинное лето у друзей. Что-то вроде бессрочного отпуска. Но у меня осталась ещё одна задача, которую я перед собой поставил. Во время создания рекламы у меня была идея показывать видео на терминалах. Ту рекламу я уже убрал. Да, прошло много времени, прежде чем я понял, насколько она бесполезна. Так что теперь у меня новое направление. Позитив! Буду крутить смешное видео после каждой проведённой оплаты. Либо показывать весёлую картинку. Гении из QIWI сделали задержку перед тем, как печатать чек. Всё для того, чтобы удержать внимание на очередной рекламе. Спасибо вам, QIWI, я воспользуюсь этим моментом в своих целях…
Вначале я был против них, нужно будет мотаться, попу отрывать от теплого кресла. Да и вообще, я считал возни будет много, а прибыли ноль. Так как они выгодны только владельцам магазинов для привлечения клиентов. А шеф грезил о миллионах, он уже несколько раз видел, как из них достают толстенные пачки денег. Сказал, что внутри там то же железо, что и на обычных компах, и тот же Windows.
— Ты же можешь это делать.
— Ну да.
— Ну и всё тогда, зарплату отдельно будешь получать.
Возразить было нечего, к тому же у меня уже был опыт поддержки подобной системы Windows XP, VPN, файло-помойка, плюс один удаленный клиент на wi-fi, где было важно, чтобы компьютер всегда был включен и доступен.
Первым делом их надо было привезти к нам, почистить, переставить систему, установить программы и проверить всё железо. Терминалы были тяжелые, в вандало- устойчивом корпусе, поэтому чтобы самим не таскать, шеф подрядил местных калдырей, что околачиваются рядом с магазинами в вечных поисках на опохмел. Было весело смотреть, как они несут эти тяжелые гробы и пытаются затащить по лестнице. Впоследствии мы уже сами наловчились и спокойно перетаскивали их вдвоем. До точки, естественно, везли на машине.
Терминалы под брендом QIWI. С ними я тоже знаком. Имелся кошелек и я очень долго и успешно им пользовался. Сама QIWI не занимается терминалами, она только предоставляет программную оболочку и готовые сборки. Так что в ближайшем крупном городе нашли их субдилера и заключили договор. От них же получили программы, ключи и пароли. Настраивали они всё сами, я лишь предоставлял им удаленный доступ. На первых порах это очень облегчало мне работу.
Через пару недель терминал уже работал и мы тестировали его у себя на точке, а ещё через пару дней отвезли его на свое родное место. Сперва платежей было мало, но потом он раскрутился и поток денег начал двигаться в нашу сторону. Появились ещё терминалы и я уже показывал шефу статистику по платежам за месяц-два. У QIWI есть свой сервер статистики, и я целыми днями следил за состоянием терминалов и за тем, где какие платежи проходят или не проходят. Это оказалось очень интересно, оказаться по ту сторону экрана. Раньше я лишь пользовался терминалом и слабо представлял, что там и как. Я даже настроил удаленный доступ через Radmin 2.2 (3.0 не пошел, видимо, какой то конфликт с QIWI программой возникает) + Hamachi = Любовь навеки. Если не было основной работы, часами наблюдал, как клиенты деньги кладут.
Бочка дёгтя в ложке мёда
На все платежи мы установили единую комиссию, так как основная задача зарабатывать деньги. Но со временем стал замечать, что некоторые платежи проходят без комиссии. Оказалось, это мобильные кошельки, для них комиссии нет и не только для кошельков, а для всего, что проходит через них — кредиты, переводы и т.д. И таких платежей становилось все больше и больше. В нашем районе развилось кредитование. Дела стали ещё хуже, суммы большие. Многие умудрялись копить долги, а потом скопом проводить в наших терминалах. Таких платежей стало так много, что больше половины суммы, которую мы крутили на терминалах, бегала впустую. Нет, конечно, QIWI платила за такие платежи, но настолько мизерные проценты (сотые доли), что просто не покрывало наших расходов. В банк положить и то выгоднее.
Обратились к нашему дилеру, он подтвердил, что да, такая проблема есть и на них нельзя ставить комиссию. К тому же мы попали в то время, когда QIWI объявила всем «амнистию» и теперь все пополнения кошелька 0%. Дилер предложил, как вариант ограничить максимальную сумму платежа и пользоваться встроенным чёрным списком, блокировать особо наглых клиентов. На каждом терминале свой список и к каждому надо подойти и ввести злополучный номер. После этих новостей я окончательно перешел на тёмную сторону.
О героях
Вообще мне нравятся отрицательные герои в стиле Злой гений. У них есть внутренний стержень. Они упорны, трудолюбивы, уверенно идут к своей цели, несмотря на все неудачи. И готовы сражаться против всего Мира, ради достижения своих темных замыслов. Не то что эти смазливые Супергерои которые вечно занимаются самокопанием, ноют по любому поводу, устраивают истерики на пустом месте. И не могут сделать решительного шага, без хорошего пинка сзади.
Копейка рубль бережёт
Для нас это фраза стала актуальна как никогда. Ограничили номинал в купюроприёмниках. Начал блокировать подряд всех не угодных, настоящая охота на ведьм, не щадил ни больших ни малых. Дилер рассказывал, как предприниматели жалуются на QIWI. У многих были километровые портянки с блокированными номерами. Это была война, жестокая и беспощадная, мы попали в самое пекло её. И проигрывали, на своём же поле. Каждое утро, приходя на работу, первым делом проверял вчерашние платежи и если там находились платежи на QIWI, тут же добавлял их в чёрный список.
Ходить к каждому терминалу и вбивать вручную я конечно не стал. В папке с программой я нашёл whiteblacklist.xml – это общий список для чёрного и белого. Сделал себе полный файловый доступ к каждому терминалу (hamachi рулит) и bat-файлом автоматически обновлял. Но это не помогало, люди у нас ушлые, они просто идут в салон, покупают новые симки и кладут на новый кошелек по 15000р. Черт, у нас оборота в день меньше было!
Анекдот в тему
Умер программист. Попал на страшный суд. Судили-рядили — ни то, ни сё.
— Куда сам-то хочешь: в ад или в рай?
— А посмотреть можно?
Привели его в громаднейший ВЦ. Кругом машин всевозможных, сеток — видимо-невидимо.
— Вот это — рай, будешь здесь юзером.
— А ад?
— А ад здесь же — только системщиком...
— Куда сам-то хочешь: в ад или в рай?
— А посмотреть можно?
Привели его в громаднейший ВЦ. Кругом машин всевозможных, сеток — видимо-невидимо.
— Вот это — рай, будешь здесь юзером.
— А ад?
— А ад здесь же — только системщиком...
Светлый луч надежды, в тёмном царстве
Но всё это, конечно, было мытарство. Ещё минус таких блокировок в том, что если добавляешь номер в список, то он блокируется везде. Т.е. клиент не мог уже даже на телефон себе положить. А на кредиты этот чёрный список вообще никак не влиял. Короче, куда не кинь, всюду клин. Так что стал искать способы сделать эту комиссию самому, либо вовсе блокировать такие платежи. Иначе у нас просто терялся смысл держать терминалы. Там же в папке с программой нашёл commission.xml – это было то, что мне нужно.
Запустил Delphi 7, он у меня уже давно сидит без дела, быстренько накидал программу, которая парсит этот файл и меняет все значения на то, что мне нужно. Поздно вечером я проверил свои догадки. И это сработало, комиссия на QIWI появилась. Но через несколько дней её не стало. Я снова посмотрел на файл и увидел, что всё вернулось, как было. Стало понятно, что программа следит за своими файлами и исправляет его при обновлении. Ну, ладно. Снова Delphi, кидаем таймер на форму, быстро набираем — и новая программа теперь читает этот файл каждую минуту, вычисляет CRC-сумму и если она не совпадает — парсит файл, меняет значения, запоминает новую CRC-сумму и заменяет файл на новый. Можно не парсить файл, а просто заменять на исправленную, но у QIWI часто появляются новые провайдеры, а старые исчезают. Так что парсить и править правильнее. Но радость моя была не долгой, ибо ею я поделился с нашим дилером. Он сказал, что в QIWI следят за платежами и если заметят наши манипуляции — их оштрафуют, а они нас. Всё пришлось свернуть. Конечно, у меня была ещё идея как заблокировать эти платежи, но… мне она тогда показалось настолько простой, очевидной, но вместе с тем глупой и невозможной, что я отбросил её.
Мы сами себе создаем проблемы и тут же героически их преодолеваем
Начал смотреть в другую сторону. А именно — мониторинг. Он мне не нравился, совсем. Там не только нужно каждый раз на сайт заходить, да ещё пользоваться специальным ключом. И всё время вручную заниматься обновлением странички, чтобы ничего не пропустить. Как вы понимаете, я тут же решил сделать свой мониторинг.
Но мне важнее всего получать сообщения о состоянии терминалов. Поэтому первым делом наладил смс. Нашёл специализированный сайт, в котором можно подключить свой номер и получать на него смс, просто отправляя письмо на почту. У каждого терминала свой почтовый адрес. Написал программу, которая проверяла эту почту, добавляла имя терминала и пересылала на почтовый адрес, который выдал этот сервис. Это нужно для того, чтобы знать, от какого терминала пришло сообщение. Можно просто добавить свой почтовый адрес на все терминалы, но в письме будет только номер терминала, который мне ни о чём не говорит. Параллельно такое же оповещение сделал и шефу.
Я расширял свой мониторинг. Сперва хотел соединяться с сервером QIWI и вытаскивать оттуда данные, но страница там защищённая и мне не удалось скачать данные с сайта. Всё слишком сложно и нет готовых решений.
Так что подошел к вопросу с другой стороны. Приложение QIWI в терминале всё подробно пишет в лог. Написал серверную часть, которая парсила этот лог и отбирала только нужные мне данные. А также клиента, чтобы принимать сообщения и показывать на экране. Один из терминалов стал главным, у него белый IP и все остальные терминалы отправляли данные ему.
Клиентская программа всё делала сама. В углу экрана висела маленькая форма поверх всех окон, показывала текущий баланс и цветом показывала состояние связи с сервером. Первым делом я её закинул шефу на компьютер и больше он уже не спрашивал, сколько денег осталось на счёте. Короткий взгляд на экран — и все ясно.
Дальше — больше. Теперь рядом с балансом появлялись строчки из лога: ошибки купюроприемника, какую купюру принял, на какого оператора, сумма платежа, комиссия и т.д. И при этом мне не нужно нажимать ни единой кнопки. Это очень удобно, тем более когда целый день за компьютером. Сразу видно, работают терминалы или зря электричество жрут. Если я надолго отходил от компа, то по приходу щелкал мышкой по форме и просматривал уже общий лог от всех терминалов.
Чем бы дитя не тешилось, лишь бы не плакало
Ещё во время написания мониторинга для компьютера мне пришла новая светлая идея. Написать клиент и для телефона на Android. Своя программа от QIWI неплохая, но она молчит. А я хочу при любых ошибках и просто о платежах получать звуковое оповещение. Попытки установить разные SDK не увенчались успехом, всем им чего-то не хватало. Да ещё не знания языка. И писать одновременно сервер и клиент для компьютера и ещё для телефона. В общем, решил немного ускорить процесс. Ага…
На 4pda.ru выложил идею своей программы и несколько человек откликнулись. Но первый, услышав мой бюджет, жёстко раскритиковал. Так что я приуныл. Но следующий согласился сделать хотя бы часть. Я был готов и на это. За обслуживание терминалов шеф платил мне три тысячи, так что эту сумму я и предложил в качестве оплаты. Отправил ему все мои пожелания и даже блок-схему нарисовал.
Я не стал ему говорить, что это программа для QIWI, сказал только общее назначение: слежение за компами, что в общем и было сутью программы. И так как бюджет у меня небольшой и из собственного кармана, я максимально упростил задачу, плюс сделал более универсальной. Её можно использовать в любом проекте, где нужно получать уведомления на телефон. Протокол общения простой: отправить код, получить строку, добавить в таблицу. Соединяется раз в 30 сек. Принцип приложения: программа — логер, показывает общий лог сообщений от всех терминалов в одной таблице. А так же проигрывает звуки. За сеанс каждый тип сообщения проигрывается только один раз, независимо от того, сколько таких сообщений было получено. Я разделил сообщения на разные типы: платеж, прием купюры, ошибки и т.д. У каждого типа свой звук. Например: на ошибки поставил звук как в Windows, а на принятый платеж звук падающей монеты. Мне даже не надо доставать телефон, по звукам можно определять, что происходит в терминалах.
На все ушло несколько месяцев (!). Как оказалось, программистам понять друг-друга ещё сложнее. Но в конечном итоге мы смогли его сделать и я наслаждался первыми звуками принимаемых платежей. Мне понравилось, что получилось в итоге. И я предложил дорабатывать программу дальше. Теперь нужно добавить ещё одну таблицу сверху, в ней будет показываться текущий статус терминалов в сети/не в сети и проч. ошибки, требующие немедленного внимания. Заплатил ему ещё столько же, и он всё доделал, ну и ещё исправил некоторые недочеты.
А теперь самое интересное. Так как на платежи QIWI не мог поставить комиссию, решил развлечься. Отметил их отдельным типом и назначил звук из сериала «Шерлок». Да, да, тот самый, который мисс Адлер поставила на его телефон. О! Вы не представляете, как забавно наблюдать за лицами людей, когда приходит сообщение и голос громко и четко звучит в комнате. Самое смешное, что даже я не мог сказать, когда он проиграет. Когда друзья и знакомые спрашивали «что это?», я с невозмутимым видом отвечал, что, мол, это по работе. И ведь в жизни не догадаешься, что это за работа такая.
Делу время, а потехе час
Я нашёл себе новое развлечение. Что делает человек, когда терминал не берет крупную купюру? Правильно, идет на кассу в магазин и просит разменять. А что делаю я? Сижу за монитором. В этот момент вижу, как внизу сменяют друг друга строчки с ошибками. Их сразу видно, так как они красного цвета. Если там написано, что купюра отключена, то быстренько открываем программку и смотрим, куда пытаются положить денежку. И если это QIWI, то открываем другую программу и вносим номер в чёрный список, его тоже видно в логах. И запускаем на обновление. Кто успел, тот и выиграл! Конечно, все это можно автоматизировать в программе на сервере, она сама там всё может делать и намного быстрее меня…
Но как же это весело, когда ты по утрам сонный ещё попиваешь кофею, а телефон начинает сыпаться звуками ошибок. Ты с горящими глазами бежишь к компу, трясущимися руками лихорадочно щёлкаешь клавишами, набирая номер (копирование, конечно же, тебе тоже лень сделать). Наконец щёлкаешь заветную кнопку Enter. Мелькание окон с зелёными строчками на тёмном фоне… В общем, голливудские фильмы про хакеров отдыхают.
Реклама в QIWI
Ну, развлечение развлечениями, но хотелось ещё чего-нибудь. Хоть как-то использовать терминалы. Потому что вот они у меня в руках, я могу делать с ними всё что угодно, но при этом ничего не могу придумать. Несколько бессонных ночей ничего не дали, поиск в Google тоже. Либо никто этим не интересуется, либо как-то используют, но молчат. Единственное, что пришло мне в голову — это банальная реклама. Ну а что, у нас несколько разных магазинов, ремонт тот же, почему бы и нет. В день там сотни людей рядом проходит. QIWI там и так рекламу крутит, а мы чем хуже.
Обратился к дилеру со своим вопросом, как там и чего надо сделать, чтоб наша реклама появилась. Но он ответил, что QIWI этим заниматься не будет, они по всей России только работают. А мы слишком мелкая фирма для этого. Ну что ж, если гора не идет к Магомеду… Гору сами нарисуем!
Вывел в верхней части экрана плашку, на ней три контейнера для картинок с рекламой и они по кругу друг друга сменяли. Через несколько дней знакомый при встрече сказал, что видел нашу рекламу. Говорит, никому не интересна, никто её не смотрит. Не интересна, говоришь… Ну-ну. Переделал программу, теперь она висела скрытно и следила за мышью. При любом движении выскакивала, как черт из табакерки. И исчезала только через минуту — и то при условии, что мышь не дергаешь.
Однажды, когда очередной терминал стоял у нас в салоне, какой-то человек долго стоял возле терминала и что-то там делал. Я в это время наблюдал за ним в камеру, которая стоит в салоне. Мне всё показалось подозрительным, и я вышел в зал спросить, в чём дело. Оказалось, он пытался оплатить кредит, а моя реклама ему мешала. Раньше, говорит, там кнопка была и её можно было спрятать, а теперь вот приходится ждать. И ведь он ждал, и ждали все те, кто пытался оплатить кредит, ведь они все ещё светились у меня в логах…
Гореть мне в аду синим пламенем!
X-Files: Проклятие
К нам обратилась хозяйка одного из магазинов с предложением поставить терминал у неё на точке. Она находилась в соседней деревне. Дорога туда хорошая, деревня богатая, живут лесом. Так что я начал собирать новый аппарат. Проводного интернета там нет, так что добавил в терминал USB-модем от «Мегафона». Родной модем, который шел в комплекте, мне не подходил, там только EDGE, а у меня трафик увеличенный, так что только 3G. В свое время я пользовался модемами и мне не нравилось, что программа вечно выскакивает на экран при обрывах. Поэтому написал bat-файл, который следил за сетью и сам переподключался при обрывах, при этом всё делал молча и не мешая. Так что она пригодилась и здесь. В итоге всё собрали и отвезли на точку.
Когда устанавливали на место, там были покупатели. Естественно, им было интересно, что это и зачем. Мы, конечно, объяснили, что они здесь смогут деньги класть на телефон. На что какая-то бабка нам заявила: А где вы там? Где живёте? Если деньги не придут, мы приедем и отпи… м вас! Мда… Если уж бабка старая, которая на ногах то не стоит, нам угрожает, что же ждать от остальных? Дикий народ. Что сказать.
Пару первых месяцев всё было нормально. А потом началось… Первым делом рухнула станция «Мегафон». Связи не было несколько дней. Ладно, это мы исправили, поставив модем от «Билайна». Потом и вовсе я модифицировал свою программу на bat, теперь она переключалась между модемами при обрывах. Но и это не работало. Модемы тупо зависали. Не могли сами переподключится с базовой станцией. Чтобы появилась связь, терминал нужно выключать, полностью минут на 15. И я часто звонил продавцам с просьбой выключить терминал, а потом включить.
Начали слетать настройки сенсора, застревать бумага в принтере, зажёвываться купюры. Мы мотались туда почти каждый день. Не могли понять, в чём же дело. Разобрали и почистили сенсор, поменяли принтер, купюроприёмник, даже сенсор вместе с монитором меняли. Поменяли блок питания внутри корпуса, поставили стабилизатор напряжения. Заземлили терминал, так как он бил током. Вбили в землю штырь, сделали дыру в раме окна и провели провод до терминала. Зависали процессы в системе, закидал туда кучу контролирующих скриптов. Bat на bat-е и taskkill-ом погоняет. Всё впустую.
Созвонились с дилером, рассказали нашу проблему. Они с таким не сталкивались, предложили поменять терминалы местами. Поменяли. На новой точке глючный терминал заработал как ни в чём не бывало. А на этом месте опять проблемы. Подумали, может местные что-то творят. Поставил web-камеру + Ivideon, но ничего такого не увидел. В шутку предложил вызвать священника и муллу на пару. Место явно проклято.
Мучились несколько месяцев. В итоге причину такого аномального поведения мы не выяснили. Но все решилось очень просто. Самое главное для нас — наладить связь, поэтому провели интернет ADSL. Всё. Все симптомы как рукой сняло. Очухались мы где-то через две недели. А терминал-то работает, без проблем. Пытаться экспериментировать и выяснять в чём дело я не стал, хватит. Вернулись к простой истине: работает — не трогай.
Кризис
Конец 2014 года принес кризис и в мою обитель. Любовь виртуальная, как и любовь реальная, оказалась не такая уж и вечная. Hamachi приказал долго жить, закрыв все бесплатные аккаунты. И я долго ругал свою лень. Ведь знал, что этот день придет. Надо было готовить OpenVPN. Но чего нет, того нет.
Скачал новую версию OpenVPN и начал тестировать на одном из терминалов. GUI интерфейс они поменяли, но всё так же оставили её убогой. Неужели так сложно научить её следить за сетью и переподключаться при обрывах? Всё приходится делать самому. Опять пришлось писать bat-файл, который пингует сеть и если нет ответа, грохает все процессы openvpn.exe и запускает по новой. На полное восстановление сети ушло пару недель, ездил к терминалам только попутно с шефом. Сносил Hamachi и ставил OpenVPN. Также увеличили комиссию на всех терминалах.
У нас появились конкуренты, терминалы от хозяев новых магазинов и комиссий там нет. Они ставят их исключительно для привлечения клиентов. Так что для меня до сих пор остается загадкой, кто ж все эти люди, что кладут деньги в наших терминалах.
Империя наносит ответный удар
В начале этого года я ездил в город поговорить с дилером. Мне интересно писать программу для мониторинга QIWI и я спросил у дилера, как обстоят дела у других. Как они смотрят за своими терминалами. Нужна ли программа подобно той, что я написал. Он объяснил, что там, где много терминалов, сидят специальные люди и следят через сайт, так что им вряд ли это интересно. К тому же мою программу надо в каждый терминал отдельно ставить. Если всё так сложно, оно и даром не надо. Куда важнее им сейчас QIWI платежи – это головная боль всех владельцев.
Что ж, по приезду домой я уже полностью созрел и был готов реализовать любую безумную идею, которая способна блокировать платежи, лишь бы она работала.
И я приступил к делу. Вывел максимально прозрачную форму в правом нижнем углу. Размер такой, чтобы полностью закрывать появляющиеся там кнопки. Теперь любое нажатие в этом месте отслеживалось моей программой. При нажатии на форму она делала скриншот экрана, вырезала 2 части с изображения и сравнивала попиксельно с тем изображением, которое нужно блокировать. В данном случае интерфейс ввода номера кошелька QIWI. И если совпадала, то программа перемещала курсор мыши и нажимала на кнопки < Назад > и < На главную >. Думаю, клиенты слегка офигели от такого поведения мыши, форму то им не видно. Если ж не совпадало, то программа делала свою форму полностью прозрачной, тогда можно нажимать за формой. Собственно, сама и нажимала туда, куда хотел нажать клиент. Это работало, но не везде, причина оказалась в глубине цвета, которое указывается в свойствах экрана, но я их всех сделал одинаковыми.
Я перешёл в наступление, но тут оказалось, что не всё блокируется. Это были переводы, через тот же злополучный кошелек. Интерфейс там уже другой. Что ж, скрепя сердце добавил второе изображения для контроля. А там изображения в формате BMP по 3,5Мб! Но тут появилося третий интерфейс… Наступление провалилось, толком не начавшись.
Нож – это инструмент, им можно хлеб нарезать, а можно человека убить
Нужно искать другое решение, простое и менее ресурсоёмкое. И такое нашлось. Статья на Хабре — перцептивный хэш. Провозился с ним все выходные, засиживаясь до ночи. Но оно того стоило. В статье кода не было. И в гугле готового решения тоже. Но автор всё хорошо пошагово расписал. Так что часть поиском, часть своим умом я получил свой первый хеш, а дальше дело техники. Программу переписал, теперь стало намного легче. Она всё также вырезала из скриншота часть изображения, но теперь намного большую и одну, вычисляла хеш и сравнивала с готовым списком. Ещё вначале написании программы я научил её сохранять на диске все скриншоты в формате JPG и теперь с легкостью собрал все хеши. Для перцептивного хеша не имеет значения, в каком формате изображение и насколько оно сжато, результат всегда получался одинаковый. Программа всё пишет в лог: когда сделала скриншот, какой хеш. Так что даже если что-то пройдет мимо, я просто по времени найду это место и скопирую готовый хеш. Прежде чем снова вступать в бой, я решил всё проверить. Скопировал скриншоты с терминалов и сравнил все хеши с теми, что блокировал. Чтобы исключить ложное срабатывание. Все прошло отлично. Так же изменил реакцию программы на блокировку. Мышь теперь не трогал, а вместо этого выводил такую же надпись, как при блокированном номере. Для ушлого клиента выглядит так, как будто его номер в чёрном списке. Программу раскидал по терминалам и перезагрузил их.
Но всё опять не работало! После долгих мучений выяснилось, что виновата QIWI, а точнее то, как она запускалась. Ещё год назад, ратуя за безопасность, они поменяли способ запуска своей программы. Она замещала собой стандартный шелл Windows. И все программы, которые есть в Автозагрузке запускала сама. Возможно, там запуск программ несколько иначе, нежели в стандартном explorer.exe. А может из-за прозрачности моей формы. Выяснять не стал, просто отсрочил запуск своей программы. Написал простой bat-файл, который запускал её через минуту после себя. Всё заработало, как надо. На другой день я лично сходил к терминалу и проверил блокировку. Затем ещё несколько дней удаленно через Radmin созерцал работу своей программы. Это не обязательно, всё можно прочитать в логах, но лучше один раз увидеть, чем сто раз услышать. Программа всю работу выполняет четко. Задержка минимальная, и это притом, что я ничего не оптимизировал, даже поиск хеша в списке шел тупым перебором. Сейчас список маленький, но даже если там появится сотня записей, это не сильно повлияет на производительность.
Чёрный список был очищен от всех прокаженных, став девственно чистым. И я вернул покой в тёмную программерскую душу.
Хлеба и зрелищ!
Что ж, мой рассказ заканчивается, но история продолжается. Мне надоело заниматься ремонтом, вытаскивать из системника дохлых мышей и бабочек и нюхать тонер, как заядлый кокаинщик. Меня ждет большой велопоход на юга, жаркое и длинное лето у друзей. Что-то вроде бессрочного отпуска. Но у меня осталась ещё одна задача, которую я перед собой поставил. Во время создания рекламы у меня была идея показывать видео на терминалах. Ту рекламу я уже убрал. Да, прошло много времени, прежде чем я понял, насколько она бесполезна. Так что теперь у меня новое направление. Позитив! Буду крутить смешное видео после каждой проведённой оплаты. Либо показывать весёлую картинку. Гении из QIWI сделали задержку перед тем, как печатать чек. Всё для того, чтобы удержать внимание на очередной рекламе. Спасибо вам, QIWI, я воспользуюсь этим моментом в своих целях…