Терминалы Киви. Как Максимально Эффективно Использовать Простые Технологии



Терминалы КИВИ.
</p><p>
 Как максимально эффективно использовать простые технологии

В начале 2017 года мы, команда разработчиков программного обеспечения для Терминалов QIWI, собрали пожелания подразделений компании — выяснили, какие глобальные проблемы хотели бы решить с нашей помощью наши коллеги, чтобы облегчить жизнь.

Больше всего меня порадовал запрос от службы поддержки, которая занимается звонками и претензиями от плательщиков: «Есть проблема: клиент совершает платеж на терминале, но до обработки он так и не доходит — либо терминал завис, либо отвалился интернет, работающий через GSM-модем.

И получается, что чек у клиента есть, а платежа нет в системе.

В таких случаях было бы хорошо научиться доставлять платежи на QIWI. Есть и группа тревожных клиентов, которые сразу после совершения платежа набирают номер колл-центра, чтобы убедиться, что с ним все в порядке.

Было бы здорово снизить стоимость таких звонков».

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

Дело ясное.

Мы начали искать решение, удобное для клиента и без рисков безопасности.

Заказчик, по традиции, предложил свой вариант - напечатать на чеке последовательность символов, которую плательщик мог бы сообщить оператору, а тот, в свою очередь, поймет, наш это платеж или нет, отфильтрует мошенничество.

или выполните операцию вручную.

Концепция идеи была ясна, но нереализуема, поэтому мы пошли немного дальше: решили встроить данные платежа в QR-код, распечатать на чеке и для верности продублировать на экране QIWI Терминала.

Сканируя QR-код камерой своего устройства, клиент может узнать статус операции.

А если платеж не появится в QIWI, система автоматически создаст его.

Таким образом, клиент не только узнает, поступили ли деньги, но и тратит их самостоятельно, независимо от состояния терминала.

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

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

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

Стали подбрасывать дополнительные возможности, в том числе помимо платежных данных разместить в QR-коде логотип, слоган и даже рекламу:

Терминалы КИВИ.
</p><p>
 Как максимально эффективно использовать простые технологии

Проект на пару спринтов, не более.

Не так.



Первое разочарование

Мы взяли существующий платеж и сгенерировали для него QR-код:

Терминалы КИВИ.
</p><p>
 Как максимально эффективно использовать простые технологии

В результате даже последний на тот момент iPhone7 не смог на это рассчитывать.

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

Это было первое печальное событие.

Необходимо было решить две основные задачи:

  • уменьшить количество символов в запросе на оплату, т.е.

    придумать решение, при котором мы сможем отойти от существующего xml-запроса к более компактному;

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

Критерий оценки оптимального количества символов для QR-кода был только один: его должны читать камеры большинства мобильных телефонов.

После пары рабочих встреч решение наконец было найдено:

  • вместо xml-запроса мы решили использовать get-запрос с параметрами платежа и разделителями между ними;
  • построил подпись на эллиптических кривых, чтобы уменьшить длину.

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

Чтобы уменьшить размер запроса на получение, нам пришлось заменить названия параметров разделителями.

В результате комплекса действий запрос на оплату сократился примерно с 1100 до 200 символов.

Плюс нам пришлось применить самый низкий уровень исправления ошибок QR-кода — L. Для его реализации необходимо было разработать в системе компоненты:

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

К существующей схеме работы:

Терминалы КИВИ.
</p><p>
 Как максимально эффективно использовать простые технологии

Мы планировали добавить альтернативу:

Терминалы КИВИ.
</p><p>
 Как максимально эффективно использовать простые технологии

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



UX-исследования или работа пришла из неожиданных мест

Мне хотелось сделать все как люди, поэтому для реализации проекта были привлечены UX-специалисты для решения проблем:
  • в какой части экрана QIWI Терминала следует разместить QR-код и как объяснить клиенту его полезность?
  • где разместить QR-код на чеке и как вставить подобные пояснения?
  • Как сделать макет страницы со статусом платежа, чтобы он был понятен из гайдов компании?
Очевидно, что для продвинутой части клиентов дополнительные пояснения по поводу QR-кода не требуются; им просто нужно указать результат. Но мы хотели охватить ту часть клиентов, для которых QR-код — магическая аббревиатура или просто «черный квадрат».

Именно они фактически отрезали линию колл-центра.

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



Краткость – двоюродная сестра экономии

Получилось нечто ужасное — нужная нам аудитория не всегда понимала значение слова «Сканировать» и его производных.

Поэтому от исходной формулировки «Сканируй и узнай статус» пришлось отказаться.

Решением стала техническая возможность отправить фото QR-кода по электронной почте.

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

В результате проверка теперь выглядит так:

Терминалы КИВИ.
</p><p>
 Как максимально эффективно использовать простые технологии

Что касается отображения QR-кода на экране терминала, то он был размещен на конечной странице оплаты — самой последней в сценарии оплаты.

Он отображается при распечатке квитанции и по сути представляет собой электронную копию распечатанного QR-кода.



Электронная почта повсюду

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

Функция распознавания QR-кода перенесена в микросервис.

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

Мы попробовали поиграть с обесцвечиванием и увеличением контраста — это дало примерно +20% успешных распознаваний.

Вишенкой на торте в проблеме распознавания фотографий QR-кода стало внедрение «естественного интеллекта» для сложных, плохо распознаваемых случаев — создание приложений и их обработка стали осуществляться вручную:

Терминалы КИВИ.
</p><p>
 Как максимально эффективно использовать простые технологии



Технические вещи не тривиальны

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

QIWI активно переходит на микросервисную архитектуру, чтобы не трогать массивный движок.

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

Итак, через пару месяцев мы написали свой собственный.

Мы повесили на него все основные новые разработки, которые можно было сделать:

  • проксирование запросов путем синтаксического анализа и анализа входящих запросов get, преобразования их в xml для обработки,
  • функционал по ограничению входящих запросов от терминалов,
  • функция распознавания QR-кода,
  • сбор статистики для дальнейшего анализа.

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

Функционал по их формированию перенесен из основного ядра программы в плагин.

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

Задача печати QR-кода, которая, на первый взгляд, кажется довольно простой и сводится к печати картинки на чеке, на самом деле не такова.

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

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

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

Для тестирования мы решили выбрать 6 основных моделей, охватывающих 91% агентской сети.

И, конечно же, при проведении выборочных испытаний в боевой обстановке выяснилось, что именно на древних принтерах, охватывающих около 5% агентурной сети, были обнаружены проблемы с печатью чеков.

Модели были настолько старыми, что их уже нельзя было купить даже на рынке.

Пришлось искать партнеров.

Сейчас проект охватывает 96% сети.

Уже немного ближе к идеалу :)

Не просто чек

Параллельно с размещением информации о QR-коде на чеке и конечной странице проведения платежа возникла еще одна задача — приведение этой самой страницы к универсальному виду для всех терминальных проектов: «На страницах завершения платежа в QIWI Терминалах все было достаточно архаично: реклама, баннеры и отправка электронного чека.

Из пяти страниц ребята сделали одну, универсальную для всех платежей».

— Ведущий программист команды.

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

Таким образом, была решена проблема десятилетней давности, которая так и не была решена.

Таких долгосрочных задач было несколько.



— Где деньги, Зин? или каков итог

Проект, рассчитанный на пару спринтов, занял полгода, затронув ресурсы 10 сотрудников и преимущество аутсорсингового агентства.

В итоге, реализовав проект на 85% терминальной сети, мы удивили и себя, и заказчика – сервисную службу.

На третий день использования QR-кода коллеги подумали, что закралась системная ошибка — статистика количества обращений в колл-центр с вопросом «Где мой платежЭ» уже упал на 20%.

Клиенты стали сканировать QR-код и присылать фотографии чеков по электронной почте, узнавая статус и самостоятельно осуществляя оплату.

И это уже второй месяц.

Надо сказать, что клиенты начали понимать, что такое «черный квадрат» и чем он полезен.

Проект с QR-кодом понравился всем, кому о нем рассказали — это была синергия интересов: с одной стороны, они упростили жизнь клиента, с другой — решили нестандартную техническую задачу.

Проверка статуса платежа и его обработка «на бумаге» простым сканированием QR-кода QIWI – это нечто новое.

Было здорово взять известные и простые технологии и сделать полезный проект. В целом проект не только улучшил навыки, но и улучшил коммуникацию внутри самой команды.

И это чуть ли не главный плюс в карму.

Теги: #Qiwi #распознавание изображений #Микросервисы #qr-коды #платежные системы #Обработка изображений #Управление разработкой

Вместе с данным постом часто просматривают: