В начале 2017 года мы, команда разработчиков программного обеспечения для Терминалов QIWI, собрали пожелания подразделений компании — выяснили, какие глобальные проблемы хотели бы решить с нашей помощью наши коллеги, чтобы облегчить жизнь.
Больше всего меня порадовал запрос от службы поддержки, которая занимается звонками и претензиями от плательщиков: «Есть проблема: клиент совершает платеж на терминале, но до обработки он так и не доходит — либо терминал завис, либо отвалился интернет, работающий через GSM-модем.
И получается, что чек у клиента есть, а платежа нет в системе.
В таких случаях было бы хорошо научиться доставлять платежи на QIWI. Есть и группа тревожных клиентов, которые сразу после совершения платежа набирают номер колл-центра, чтобы убедиться, что с ним все в порядке.
Было бы здорово снизить стоимость таких звонков».
Поэтому перед нами стояла сложная задача: научиться формировать платеж в случае обрыва связи с терминалом и сократить количество входящих звонков от клиентов, придумав инструмент самообслуживания для проверки статуса платежа.
Дело ясное.
Мы начали искать решение, удобное для клиента и без рисков безопасности.
Заказчик, по традиции, предложил свой вариант - напечатать на чеке последовательность символов, которую плательщик мог бы сообщить оператору, а тот, в свою очередь, поймет, наш это платеж или нет, отфильтрует мошенничество.
или выполните операцию вручную.
Концепция идеи была ясна, но нереализуема, поэтому мы пошли немного дальше: решили встроить данные платежа в QR-код, распечатать на чеке и для верности продублировать на экране QIWI Терминала.
Сканируя QR-код камерой своего устройства, клиент может узнать статус операции.
А если платеж не появится в QIWI, система автоматически создаст его.
Таким образом, клиент не только узнает, поступили ли деньги, но и тратит их самостоятельно, независимо от состояния терминала.
На первый взгляд решение было очевидным: взять существующий запрос на оплату, обернуть его QR-кодом, написать веб-страницу с информацией о транзакции и микросервис, который проксирует запросы между терминалом, процессингом и сетью.
Предполагалось, что проект будет работать над существующими методами аутентификации терминалов и использовать существующие методы обработки платежей.
Идея сразу взлетела, раскрыв творческий потенциал команды.
Стали подбрасывать дополнительные возможности, в том числе помимо платежных данных разместить в QR-коде логотип, слоган и даже рекламу:
Проект на пару спринтов, не более.
Не так.
Первое разочарование
Мы взяли существующий платеж и сгенерировали для него QR-код:В результате даже последний на тот момент iPhone7 не смог на это рассчитывать.
На чеке QR-код, состоящий только из данных платежа и подписи, едва умещался на половине листа А4. Строка запроса платежа была слишком длинной.
Это было первое печальное событие.
Необходимо было решить две основные задачи:
- уменьшить количество символов в запросе на оплату, т.е.
придумать решение, при котором мы сможем отойти от существующего xml-запроса к более компактному;
- выберите алгоритм шифрования и длину ключа, которые обеспечат высокую криптостойкость и надежность при меньшем размере подписи.
После пары рабочих встреч решение наконец было найдено:
- вместо xml-запроса мы решили использовать get-запрос с параметрами платежа и разделителями между ними;
- построил подпись на эллиптических кривых, чтобы уменьшить длину.
Чтобы уменьшить размер запроса на получение, нам пришлось заменить названия параметров разделителями.
В результате комплекса действий запрос на оплату сократился примерно с 1100 до 200 символов.
Плюс нам пришлось применить самый низкий уровень исправления ошибок QR-кода — L. Для его реализации необходимо было разработать в системе компоненты:
- создать новый API для осуществления платежей через QR-код;
- внедрить новый механизм работы с криптографическими ключами между терминалом и процессингом;
- реализовать микросервис, который будет поддерживать функционал проксирования запросов, проверки целостности полученных данных, а также функцию блокировки подозрительных запросов и сбора статистики операций;
- разработать веб-страницу для отображения платежной информации;
- разработать систему лимитов и проверок для нового платежного канала.
Мы планировали добавить альтернативу:
По мере реализации проекта возникали, казалось бы, небольшие проблемы, требующие решения, что на самом деле занимало много времени, отодвигая дату запуска.
UX-исследования или работа пришла из неожиданных мест
Мне хотелось сделать все как люди, поэтому для реализации проекта были привлечены UX-специалисты для решения проблем:- в какой части экрана QIWI Терминала следует разместить QR-код и как объяснить клиенту его полезность?
- где разместить QR-код на чеке и как вставить подобные пояснения?
- Как сделать макет страницы со статусом платежа, чтобы он был понятен из гайдов компании?
Именно они фактически отрезали линию колл-центра.
Чтобы было красиво и понятно, в рамках интересующей нас фокус-группы было проведено интервью с неожиданными результатами.
Краткость – двоюродная сестра экономии
Получилось нечто ужасное — нужная нам аудитория не всегда понимала значение слова «Сканировать» и его производных.Поэтому от исходной формулировки «Сканируй и узнай статус» пришлось отказаться.
Решением стала техническая возможность отправить фото QR-кода по электронной почте.
И об этом тоже нужно было сказать кратко и ясно, потому что квитанционная лента – это расходный материал для владельцев терминалов и наша забота о бизнесе этих людей заключается в ее сохранении.
В результате проверка теперь выглядит так:
Что касается отображения QR-кода на экране терминала, то он был размещен на конечной странице оплаты — самой последней в сценарии оплаты.
Он отображается при распечатке квитанции и по сути представляет собой электронную копию распечатанного QR-кода.
Электронная почта повсюду
В связи с появлением нового канала обработки QR-кодов в виде электронной почты возникла необходимость разработки механики с функцией распознавания QR-кодов, встроенных в письмо, и генерации ответа со статусом платежа.Функция распознавания QR-кода перенесена в микросервис.
При первоначальном внедрении уровень распознавания составил около 65% на представленной выборке фотографий.
Мы попробовали поиграть с обесцвечиванием и увеличением контраста — это дало примерно +20% успешных распознаваний.
Вишенкой на торте в проблеме распознавания фотографий QR-кода стало внедрение «естественного интеллекта» для сложных, плохо распознаваемых случаев — создание приложений и их обработка стали осуществляться вручную:
Технические вещи не тривиальны
Основные разработки по этому проекту, конечно же, касались самого микросервиса и терминального ПО.QIWI активно переходит на микросервисную архитектуру, чтобы не трогать массивный движок.
Микросервис позволяет быстро вносить изменения в проекты, проводить тесты и выпускать релизы.
Итак, через пару месяцев мы написали свой собственный.
Мы повесили на него все основные новые разработки, которые можно было сделать:
- проксирование запросов путем синтаксического анализа и анализа входящих запросов get, преобразования их в xml для обработки,
- функционал по ограничению входящих запросов от терминалов,
- функция распознавания QR-кода,
- сбор статистики для дальнейшего анализа.
Функционал по их формированию перенесен из основного ядра программы в плагин.
Теперь мы могли оперативно вносить изменения в чек, не влияя на работу терминала в целом.
Задача печати QR-кода, которая, на первый взгляд, кажется довольно простой и сводится к печати картинки на чеке, на самом деле не такова.
Это связано с тем, что у наших терминальных агентов-владельцев в сети представлено около 20 моделей самых разнообразных принтеров, а мы печатаем около 40 видов чеков.
Когда мы начали это реализовывать, вылезло много нюансов: то линии и расположение объектов в шаблоне проверки начинали плавать при добавлении картинки, то некоторые команды оказывались чувствительными к расположению, и тогда разрыв строки превращался в вкладка.
Мы начали тестирование и поняли необходимость компромисса — пришлось исключить некоторые модели принтеров, так как тестирование всех конфигураций приводило к бесконечному количеству случаев.
Для тестирования мы решили выбрать 6 основных моделей, охватывающих 91% агентской сети.
И, конечно же, при проведении выборочных испытаний в боевой обстановке выяснилось, что именно на древних принтерах, охватывающих около 5% агентурной сети, были обнаружены проблемы с печатью чеков.
Модели были настолько старыми, что их уже нельзя было купить даже на рынке.
Пришлось искать партнеров.
Сейчас проект охватывает 96% сети.
Уже немного ближе к идеалу :)
Не просто чек
Параллельно с размещением информации о QR-коде на чеке и конечной странице проведения платежа возникла еще одна задача — приведение этой самой страницы к универсальному виду для всех терминальных проектов: «На страницах завершения платежа в QIWI Терминалах все было достаточно архаично: реклама, баннеры и отправка электронного чека.Из пяти страниц ребята сделали одну, универсальную для всех платежей».
— Ведущий программист команды.
Теперь эту универсальную страницу используют в разных интерпретациях, не нарушая правил построения скриптов, закрыв кармический долг команды разработчиков.
Таким образом, была решена проблема десятилетней давности, которая так и не была решена.
Таких долгосрочных задач было несколько.
— Где деньги, Зин? или каков итог
Проект, рассчитанный на пару спринтов, занял полгода, затронув ресурсы 10 сотрудников и преимущество аутсорсингового агентства.В итоге, реализовав проект на 85% терминальной сети, мы удивили и себя, и заказчика – сервисную службу.
На третий день использования QR-кода коллеги подумали, что закралась системная ошибка — статистика количества обращений в колл-центр с вопросом «Где мой платежЭ» уже упал на 20%.
Клиенты стали сканировать QR-код и присылать фотографии чеков по электронной почте, узнавая статус и самостоятельно осуществляя оплату.
И это уже второй месяц.
Надо сказать, что клиенты начали понимать, что такое «черный квадрат» и чем он полезен.
Проект с QR-кодом понравился всем, кому о нем рассказали — это была синергия интересов: с одной стороны, они упростили жизнь клиента, с другой — решили нестандартную техническую задачу.
Проверка статуса платежа и его обработка «на бумаге» простым сканированием QR-кода QIWI – это нечто новое.
Было здорово взять известные и простые технологии и сделать полезный проект. В целом проект не только улучшил навыки, но и улучшил коммуникацию внутри самой команды.
И это чуть ли не главный плюс в карму.
Теги: #Qiwi #распознавание изображений #Микросервисы #qr-коды #платежные системы #Обработка изображений #Управление разработкой
-
Что Такое Спам?
19 Oct, 24 -
Рунет Пишет Книгу О России
19 Oct, 24