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

Страница проверки баланса подарочной карты имеет одну задачу: быстро и без путаницы показать, сколько денег осталось на карте. Ею пользуются прямо перед покупкой, сразу после получения карты или после недавней покупки.
Эта страница обычно обслуживает две аудитории:
Будьте конкретны в том, что означает «код» в вашем магазине. Это может быть отпечатанный номер на обратной стороне физической карты, код из письма или что‑то, отображаемое в приложении. В некоторых программах также требуется PIN или участок для стирания. Если системе нужны и номер карты, и PIN, укажите это сразу, чтобы люди не тратили время.
Хороший опыт ощущается предсказуемым: явное место для ввода кода, одна очевидная кнопка «Check balance» и легко читаемый результат (валюта плюс время «последнего обновления»). Когда что‑то идёт не так, страница должна объяснить, как восстановиться, не оставляя человека в тупике.
Точность — это главная цель. Если страница показывает неправильную сумму, возникают конфликты на кассе, больше обращений в поддержку и теряется доверие.
Страница проверки баланса выполняет две задачи: помочь клиентам подтвердить оставшуюся сумму и дать сотрудникам безопасный способ обновлять баланс при изменениях на кассе. Лучшие решения держат вид для клиента простым, а мощные действия — за экраном только для сотрудников.
Со стороны клиента поток должен ощущаться как проверка чека: введите код, нажмите «Check balance», получите понятный ответ. Показывайте оставшийся баланс в валюте магазина и указывайте время «последнего обновления», чтобы люди знали, что результат актуален.
Со стороны сотрудников — поиск, верификация и корректировка. Сотрудники должны находить карту по коду (и позже, если захотите, по сканированию), просматривать текущий баланс и недавнюю активность, затем добавлять значение (пополнение) или вычитать значение (ручное погашение или исправление). Каждое изменение должно требовать короткой причины и, по возможности, ссылки, например номера чека.
Большинство команд выпускает первую версию с:
Пример: кафе продаёт подарочные карты по $25. Клиент вводит код и видит «$13.40 remaining, updated 2 minutes ago». Позже сотрудник обнаруживает, что касса пропустила погашение, находит тот же код, вычитает $4.60 и сохраняет заметку «latte, receipt 887.»
Краевые случаи порождают обращения в поддержку, поэтому обрабатывайте их спокойно:
Страница проверки баланса должна быть быстрой, спокойной и простой в использовании. Многие клиенты пользуются телефоном, стоят у кассы и не хотят задерживать очередь.
Сделайте ввод простым. Используйте одно поле для кода с видимой подписью (не только плейсхолдер). Добавьте короткий пример формата вроде «Пример: ABCD-EFGH-IJKL» и сделайте поле удобным для вставки. Избегайте неожиданных преобразований формата, которые меняют введённое пользователем значение.
Сделайте действие очевидным. «Check balance» понятнее, чем «Submit». После нажатия показывайте состояние загрузки («Checking…») и отключайте кнопку, чтобы запрос не отправлялся дважды.
Сообщения об ошибках должны помогать честным пользователям восстановиться, раскрывая как можно меньше информации тем, кто подбирает коды. На публичной странице держите ошибки общими. Подробные причины (expired, blocked, not found) показывайте на экране сотрудников после верификации клиента.
Короткий чеклист UX, который предотвращает большую часть путаницы:
Доступность важна даже на небольшой странице. Свяжите подпись с полем ввода, сделайте кнопку доступной для клавиатуры, обеспечьте видимые контуры фокуса и высокий контраст для яркого освещения в магазине.
Хороший админ‑экран для сотрудников скучен в лучшем смысле слова. Он помогает сотрудникам решить проблему с картой за секунды и оставляет понятный след для последующей проверки.
Начните с входа сотрудников и простых ролей. Большинство сотрудников должно иметь возможность находить карту и просматривать историю, а менять баланс — только менеджеры или небольшой доверенный круг. Если у вас несколько локаций, помечайте изменения по магазину/локации.
Сделайте поиск быстрым и терпимым к ошибкам. Пробелы и дефисы не должны ломать поиск. В реальных случаях, когда код повреждён или нечитаем, вы можете предлагать дополнительные способы поиска только для сотрудников и только если это безопасно — например по номеру чека/заказа или по email/телефону клиента, если вы их уже собираете.
Когда карта найдена, показывайте текущий баланс и недавнюю активность до любых контролов редактирования. Это снижает классическую ошибку: корректировка не той карты из‑за открытых нескольких вкладок.
Держите форму корректировки структурированной, а не свободным текстом:
После ввода суммы покажите превью результата: «Current balance: $40.00. New balance: $15.00.» Добавьте подтверждение для крупных изменений (например, любые изменения свыше $100 или более 25% от текущего баланса). Для рискованных изменений требуйте PIN менеджера или повторного ввода суммы.
Страница проверки баланса кажется простой, но она привлекает подборы, злоупотребления и честные ошибки. Цель — не абсолютная безопасность, а устранение простых атак и упрощение обнаружения и исправления проблем.
Относитесь к кодам подарочных карт как к паролям. Если кто‑то получит список кодов, он сможет быстро обнулить карты.
Два базовых шага дают большую пользу: храните коды безопасно и усложняйте массовую проверку. Многие системы избегают хранения «сырых» кодов в открытом виде и сохраняют защищённую форму (например, односторонний хеш), чтобы утечка базы не дала злоумышленникам рабочих кодов.
На клиентской странице избегайте полного отображения кода после поиска. Показывайте замаскированный вариант (например, только последние 4 символа), чтобы снимки экрана и подглядывание имели меньший вред.
Ограничения по частоте тоже важны. Без них бот сможет перебрать тысячи комбинаций. Сделайте так:
Большая часть реальных потерь связана не с хакерскими атаками, а с неконтролируемыми корректировками со стороны сотрудников. Каждое изменение баланса должно создавать журнал аудита: кто, когда, какую сумму и почему.
Держите доступ сотрудников узким. Не всем нужен доступ к изменению баланса. Избегайте общих логинов — они делают журнал бесполезным.
Определите, как возвраты и отмены влияют на подарочные карты, и запишите это как простое внутреннее правило. Например: возвраты по возможности возвращают средства на исходную карту; если карта уже потрачена, случай помечается для проверки.
Страница кажется простой, но данные за ней должны быть проверяемы. Безопасный подход — не полагаться на одно редактируемое поле «баланс» без истории транзакций, которая это объясняет.
Обычная структура использует три таблицы:
Считайте таблицу транзакций источником истины. Типичные типы транзакций: issuance (первичная загрузка), redemption (покупка), adjustment (корректировка сотрудника) и refund (отмена погашения). Текущий баланс можно вычислять как сумму транзакций или хранить кешированный баланс в записи карты и обновлять его аккуратно.
Чтобы предотвратить двойное списание при повторных нажатиях на медленном устройстве, используйте idempotency key для каждой записи. Это даёт каждому действию уникальный ID операции, и повторные отправки игнорируются.
Для аудита и поддержки несколько полей окупают себя:
Решите, что увидит клиент, прежде чем что‑то строить. Страница должна объяснять, где найти код, что означает «баланс» в вашем магазине и что делать при ошибке поиска. На экране результата показывайте баланс, валюту и понятное время «последнего обновления».
Определите правила кода и валидируйте их на раннем этапе. Выберите фиксированную длину и разрешённые символы, которые вы реально печатаете. Валидируйте при вводе и снова при отправке, чтобы быстро отлавливать опечатки, не раскрывая лишних деталей.
Постройте поток поиска клиента по шагам: создайте экран ввода, при отправке вызывайте бэкенд, затем обработайте три варианта — найдено, не найдено/ неверно, временно недоступно.
Затем добавьте сторону сотрудников. Сотрудники должны войти перед любыми изменениями, и каждое изменение должно требовать явной причины. Добавьте шаг подтверждения, который повторяет код и сумму.
После того как правки работают, добавьте историю. Каждая подарочная карта должна показывать список транзакций и журнал аудита с информацией, кто что и когда изменил.
Наконец, протестируйте реальные сценарии перед релизом: опечатку, нулевой баланс, частичное погашение, возврат, который восстанавливает сумму, и двух сотрудников, меняющих одну карту в течение нескольких минут.
Большая часть обращений в поддержку связана с двумя вещами: неясной обратной связью для честных клиентов и отсутствием записей для действий сотрудников.
Одна распространённая ловушка — слишком подробные публичные сообщения об ошибках. Детали вроде «код существует, но не активен» облегчают подбор действительных кодов. Держите сообщение для клиентов нейтральным, а подробности показывайте только в инструментах сотрудников после верификации.
Другой источник обращений — когда сотрудники меняют балансы без контекста. Когда клиент говорит «Вчера на карте было $50», вам нужен быстрый ответ. Тихие правки создают спорную ситуацию.
Часто встречающиеся ошибки, которые особенно вредят:
Пример: кассир списывает $25, планшет подвисает, он снова нажимает «Confirm». Без защиты система фиксирует два списания. Исправьте это, делая каждое изменение одноразовым событием и делая кнопку «Confirm» безопасной при повторном нажатии.
Перед публикацией сторителайте «я покупатель» и «я сотрудник».
Проверки как клиент:
Проверки как сотрудник:
Также проверьте формулировки. Не смешивайте «баланс подарочной карты» и «кредит магазина», если они реально не равнозначны. Если есть ограничения (сроки действия, только в магазине), скажите это одним коротким предложением.
Представьте маленький сувенирный магазин, который продаёт физические подарочные карты на кассе. Клиенты могут проверить баланс дома, а сотрудники погашают карты в магазине.
В воскресенье вечером Майя находит карту в ящике. Она открывает страницу проверки баланса, вводит код с обратной стороны карты и видит простой результат: текущий баланс, время последнего обновления и короткое напоминание держать код в секрете. Учётная запись не требуется.
В понедельник Майя покупает товары на $38.50 и платит подарочной картой. На кассе сотрудник открывает админ‑экран, ищет тот же код и частично погашает сумму. Сотрудник видит больше деталей, включая историю и поле для заметки.
Позже в тот же день Майя возвращает одну вещь на $12.00. Сотрудник фиксирует возврат с явной ссылкой. Когда кто‑то спрашивает, почему изменился баланс, ответ — одна строчка в истории, а не попытка восстановить события по памяти.
Выберите небольшой надёжный релиз. Для большинства магазинов минимальный набор — клиентский проверщик баланса и инструмент для сотрудников, который может корректировать баланс с причиной и журналом транзакций.
Практичный v1 включает поиск по коду для клиента, вход сотрудников, правки с обязательной причиной, журнал транзакций для каждого изменения и базовые ограничения (плюс подтверждение для крупных изменений).
Перед расширением функциональности пропишите короткое внутреннее правило для сложных случаев вроде возвратов и споров, затем обучите сотрудников на двух‑трёх реальных примерах. После запуска еженедельно просматривайте обращения в поддержку и исправляйте самые болезненные точки в первую очередь.
Если вы уже используете Koder.ai (koder.ai) для сборки внутренних инструментов, разделение клиентского поиска и редактирования сотрудниками на отдельные экраны с разными правами с первого дня упрощает дальнейшую поддержку и развитие.
Сделайте акцент на одной задаче: ввести код подарочной карты и увидеть оставшуюся сумму. Покажите баланс в валюте магазина и чёткое время «последнего обновления», чтобы результат вызывал доверие.
Просите то, что реально требуется вашей программе, и говорите об этом сразу. Если нужны и номер карты, и PIN (или защитный слой для стирания), показывайте оба поля сразу, чтобы люди не тратили время зря.
Держите всё просто и удобным для вставки: одно подписанное поле, пример формата и одна кнопка «Check balance». После отправки показывайте короткий индикатор загрузки и отключайте кнопку, чтобы предотвратить повторные запросы.
Покажите баланс, валюту и отметку «последнее обновление». Замаскируйте код в результате (например, оставьте видимыми только последние 4 символа), чтобы снимки экрана и подглядывание раскрывали меньше информации.
На публичной странице используйте нейтральное сообщение типа «Мы не смогли подтвердить этот код. Пожалуйста, проверьте и попробуйте снова.» Подробности вроде «истек» или «заблокирован» сохраняйте для интерфейса сотрудников после верификации клиента.
Не рассматривайте это как ошибку. Показывайте «$0.00 remaining» (с отметкой времени последнего обновления), чтобы клиент понял, что карта действительна, но пустая.
Разделите публичную страницу и панель сотрудников и требуйте входа для сотрудников. Большинство сотрудников должны только просматривать, а небольшая группа (например, менеджеры) — иметь право корректировать баланс; каждое изменение должно записываться в журнал аудита.
Требуйте причину и по возможности ссылку (например, номер чека или заказа), и фиксируйте, кто и когда сделал изменение. Показывайте предварение типа «Текущий баланс» и «Новый баланс» до окончательной подтверждающей операции, чтобы сократить ошибки.
Фиксируйте каждое изменение как запись истории транзакций, а не просто редактируемое поле баланса. Выпуск, погашение, возврат и ручные корректировки должны создавать отдельные записи, чтобы позже можно было объяснить любой баланс.
Добавьте ограничения по частоте и паузу после повторных неудачных попыток, чтобы боты не могли быстро перебирать коды. Храните коды в защищённой форме и не показывайте полный код обратно пользователю.