В прошлом году мы проводили похожую акцию, только с другой механикой: люди вводили коды с упаковки и заказывали подарки с сайта OZON. Из-за зависимости от третьей стороны и связанных с этим проблем акция получила много негативных отзывов. Поэтому для новой акции мы приняли решение просто возвращать cashback на мобильный телефон или банковскую карту.
Суть новой акции можно выразить таким алгоритмом: покупай продукцию Самсон – собирай упаковки – регистрируй QR-коды на сайте или в приложении – получай cashback.
Участники заново регистрируются на сайте, получают новые личные счета. Мы обнулили статистику и все данные по прошлой акции, начали с чистого листа. Задача по реализации механики акции разбилась на несколько подзадач.
Первая задача: создать на сайте возможность чтения QR кода
Сайт написан на php, поэтому сначала мы решили воспользоваться php-библиотеками, которые позволяют считывать код. В качестве теста загрузили часть распечатанных кодов, которые получили от типографии - все работало прекрасно. Но затем оказалось, что на готовых к продаже упаковках QR-код напечатан по-другому: серым цветом на неоднородном фоне. Наш сайт не мог прочитать ни один код с упаковок, другие похожие онлайн-ресурсы тоже не справились с этой задачей.
Тогда мы решили использовать для чтения кодов библиотеки Java. Поспешно установили Java на сервер, доработали функционал, и проблема, наконец, была решена.
Сейчас сайт исправно считывает коды и используется для этого гораздо чаще, чем мобильное приложение. И это несмотря на то, что зарегистрировать код в приложении намного проще.
Вторая задача: подключить вывод денег на счета пользователям
Мы связались с множеством банков и от каждого получили недоумевающее ответы: «какие выплаты? Только онлайн-оплата…». Уже почти отчаявшись, мы наткнулись на инструмент https://kassa.yandex.ru/payouts. Казалось, это то, что нужно: солидная компания, развернутое описание API и большие возможности.
Однако дальше нас ждал ряд трудностей. Первая – недостаток документации и примеров. Вторая – не очень быстрые ответы от специалистов тех.поддержки. После успешного проведения тестовых платежей мы попросили переключить нас в рабочий режим. Этот процесс тоже не прошел гладко: нам не сразу отправили полные актуальные настройки для перехода на боевой сервер. Мы потеряли несколько дней, пытаясь понять, почему все вдруг перестало работать, и только активные запросы в поддержку Яндекс помогли наконец получить подробную инструкцию по настройке.
Личный кабинет с доступом к статистике заработал только спустя неделю после перехода в рабочий режим, поэтому первые несколько дней акции мы работали вслепую. Кроме того, возникли небольшие проблемы с договором и зачислением на счет денежных средств.
Выяснилось, что некоторые запросы получают таймаут и средства не выводятся. Чтобы исправить ситуацию, мы написали скрипт, который посылает повторные запросы для получения итоговых данных о том, одобрен ли перевод. Если перевод прошел успешно, пользователь получает письмо с подтверждением вывода cashback.
В итоге, благодаря нашей настойчивой работе со службой поддержки Яндекс и дополнительному скрипту, получилось реализовать бесперебойный вывод cashback на баланс мобильного телефона и на банковскую карту.
Третья задача: обеспечить интеграцию сайта с мобильным приложением
Сайт и мобильное приложение обращаются к общей базе данных, поэтому для интеграции ресурсов и взаимодействия мы написали объемное API и создали инструменты для кроссплатформенной регистрации и авторизации. Сайт отправляет в приложение данные о балансе пользователя и историю вывода средств, с помощью API отправляются рецепты, акции, продукты и многое другое.
Такая схема работы экономит силы клиента: достаточно изменить информацию на сайте и она автоматически изменится в приложении. Благодаря единой базе данных каждый может выбирать более удобное устройство для участия в акции. Вывод средств реализован только на стороне сайта, но благодаря адаптивной верстке сайта и автоматической авторизации пользователь даже не замечает момент перехода из приложения на сайт.
На этом основная часть работы для поддержки акции была завершена. Мы протестировали все возможности, запустили их, поздравили друг другу с успешным релизом... а затем приступили к четвертой задаче.
Четвертая задача: избавиться от мошенников
Мы уже проходили подобное, запуская предыдущую акцию. Тогда, согласно правилам акции, участники получали бонусы на счет за регистрацию друзей, репосты и многое другое. Многие регистрировались несколько раз, чтобы получить как можно больше. Некоторые пользователи копили средства до самого конца акции, но так и не смогли воспользоваться ими, потому что банк акции был исчерпан. Это, разумеется, вызвало большой поток негатива с их стороны.
В новой акции мы минимизировали возможности копить средства: теперь они начисляются только при регистрация QR-кодов с упаковок. Кроме того, регистрация теперь возможна только через телефонный номер, на каждый номер можно зарегистрировать только один аккаунт. Участник получает пароль для доступа в личный кабинет по SMS.
Но недобросовестные пользователи пошли дальше: они начали регистрироваться на так называемые «виртуальные номера». Тогда мы создали жесткую привязку: cashback можно вывести только на реальный номер телефона, на который зарегистрирован аккаунт. При выводе на банковскую карту Яндекс отправляет запрос в банк, а специалисты банка проверяют паспортные данные прежде, чем одобрить перевод. Эти меры сделали жизнь мошенников намного сложнее.
Кроме того, мы добавили на главную страницу «банк акции» – счетчик, который показывает остаток акционных средств. Так мы стимулируем пользователей воспользоваться призом сразу, а не копить средства до конца акции.
Выводы и благодарности
Создавать инструменты для проведения подобных акций – интересная и познавательная задача. Мы хотим поблагодарить клиента, компанию «Самсон», за доверие и терпение. Это особенно важно в случаях, когда возникают проблемы на третьей стороне, которые напрямую не зависят от исполнителя.
Проведите конкурс среди участников CMS Magazine
Узнайте цены и сроки уже завтра. Это бесплатно и займет ≈5 минут.