превью
превью

Представьте парк аттракционов, фуд‑корт на фестивале, корпоративную столовую или сеть автомоек. Что их объединяет? Всем им нужна своя закрытая платёжная система или внутренняя программа лояльности (клубные карты).

Обычно внедрение такой системы — это боль. Нужно покупать дорогие терминалы, нанимать интеграторов и пилить самописный софт. А что делать, если система нужна «на один раз» (для трёхдневного фестиваля) или у малого бизнеса просто нет бюджета?

Меня зовут Никита, и я решил закрыть эту боль, заодно прокачав своё портфолио. Я разработал легковесную, open‑source альтернативу закрытым платёжкам, которая работает прямо в браузере, не требует скачивания приложений и сложного железа.

Под капотом — классический стек React + Node.js и капелька технологии в виде WebNFC.

? Архитектура и технические костыли (с пользой для юзера)

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

Основной упор был сделан на технологию WebNFC, которая позволяет считывать физические NFC‑метки и карты прямо из браузера. Но тут мы сразу сталкиваемся с суровой реальностью: WebNFC сейчас поддерживается только в Chrome на Android.

if (!("NDEFReader" in window)) {
      alert(
        "Ошибка: Web NFC не поддерживается. Используйте Chrome на Android и HTTPS.",
      );
      return;
    }
    ndef.current = new NDEFReader();
    ndef.current.onreading = async ({ message, serialNumber }) => {
      if (readingLock.current) return;
      setIsReading(true);
      readingLock.current = true;
      let cardObject = null;

      try {
        setUid(serialNumber);
        for (const record of message.records) {
          if (record.recordType !== "text") continue;
          const decoder = new TextDecoder();

          const textData = decoder.decode(record.data);
          try {
            cardObject = JSON.parse(textData);
            setCardData(cardObject);
          } catch {
            console.log("Not JSON");
            return;
          }

          console.log(
            `UID: ${serialNumber} \n Balance: ${cardObject.balance}  \n Name: ${cardObject.name}`,
          );
          addLog("read", serialNumber, cardObject.balance);
        }
      } catch (e) {
        console.log("ошибка в карте", e);
      } finally {
        setIsReading(false);
        readingLock.current = false;
      }
    };

Оставлять пользователей iOS за бортом было нельзя, поэтому я придумал элегантный фолбек:

  • Для Android: Терминал (смартфон администратора/кассира) считывает карту клиента в один клик через WebNFC по её уникальному идентификатору (UID).

  • Для iOS: На карте генерируется или печатается QR‑код, содержащий тот же UID. Кассир просто сканирует его камерой внутри того же веб‑приложения.

Как ходят данные:

На этапе MVP я не стал перегружать архитектуру тяжелыми СУБД, поэтому схема выглядит максимально лаконично:

Frontend (React) — отправляет UID карты и сумму ‑> Backend (Node.js) — парсит данные и проводит транзакцию ‑> JSON DB (быстрое файловое хранилище на первое время).

? В чём профит для бизнеса?

Зачем владельцу условной автомойки или кофейни внедрять такое решение вместо обычного банковского эквайринга? Я выделил 5 главных причин:

  • Деньги сразу в обороте. Клиент покупает локальную валюту или абонемент заранее. Деньги уже у вас в кассе, а услугу вы окажете потом. Это гарантирует, что клиент вернётся именно к вам, а не к конкурентам.

  • Психология «виртуальных денег». Тратить внутренние баллы или баланс с клубной карты психологически гораздо проще, чем расставаться с реальными рублями на балансе банка. Это кратно поднимает средний чек.

  • Прощай, грабительский эквайринг. Меньше транзакций через банк — меньше комиссий платежным системам. Бизнес экономит на каждом чихе.

  • Доступность «из коробки». Не нужно покупать терминалы за десятки тысяч рублей и оплачивать лицензии на софт. Нужен только копеечный набор NFC‑карт (или распечатанных QR‑кодов) и любой смартфон.

  • Прозрачный контроль. В систему встроен удобный лог для отслеживания всех операций с возможностью моментального экспорта в Excel для бухгалтерии.


? Что дальше и где посмотреть код?

Получилась гибкая open‑source система, которую можно развернуть за полчаса и адаптировать под задачи конкретного локального бизнеса или мероприятия.

В планах — прикрутить полноценную базу данных (MongoDB) вместо JSON‑файлов, расширить ролевую модель (суперадмин, кассир, клиент) и добавить более красивую аналитику в реальном времени.

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

? Ссылка на мой GitHub

Буду рад фидбеку в комментариях: взлетит ли такая альтернатива «на коленке» для мелкого бизнеса или WebNFC в вебе — всё ещё слишком нестабильная история?

Комментарии (5)


  1. lov4ble
    26.09.2026 16:48

    Привет, интересный проект)) Если хочешь найти потенциальных контрибьютеров или пользователей то тебе бы в сообщество опенсорс разрабов: t.me/OpenSource_Chat. Там как раз можно поделится своим проектом, думаю заинтересуются )


    1. lqdope Автор
      26.09.2026 16:48

      Привет, спасибо!)


  1. Freeman_RU
    26.09.2026 16:48

    А как на это смотрят бухгалтера и налоговая? Что-то мне кажется в закондательную базу РФ это вообще никак не ложится.


  1. dzhiharev
    26.09.2026 16:48

    Поздравляю, вы изобрели систему лояльности с предоплаченными картами. Не смотря на то, что open source решений для лояльности хватает, еще одна имеет право на жизнь - возможно она попадет в свою нишу. Однако такая реализация годится для какого-нибудь мелкого торговца (из разряда тех, у кого карты лояльности - это просто несколько цифр на пластике) и не взлетит на масштабах.

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

    Кроме того имеем проблемы с безопасностью - весь депозит клиента висит на обычном UID, который элементарно считать и так же элементарно подделать. Даже предоплаченные карты метрополитена имеют защиту большую на несколько порядков (там используется честная криптография), хотя там стоимость носителя сравнима со стоимостью баланса, который он хранит.

    Для бизнеса гораздо проще установить на телефон SoftPOS решение от какого-нибудь провайдера:
    1. работает и на iOS и на Android
    2. принимает обычные карты
    3. деньги сразу поступают на счет и проводятся по бухгалтерии привычным способом
    4. безопасное сертифицированное решение
    5. стоимость обслуживания будет сравнима со стоимостью выпуска nfc меток
    6. размер комиссии будет таким же - насколько я знаю (могу ошибаться) для бизнеса часто комиссия за транзакцию в процентах без фиксированной части, т.е. нет разницы провести одну большую транзакцию пополнения предоплаченной карты или кучу маленьких оплат с той же карты.

    Не скажу про российский рынок SoftPOS решений, но думаю там найдутся провайдеры с недорогими предложениями. Кроме того для российского рынка можно принимать оплату по СБП (что и делают например люди сдающие квартиры посуточно) - там вообще большинство переводов для физиков без комиссии.

    Вообщем, как демонстрация практического применения WebNFC - сгодится, как платежная система - вряд ли...


    1. nixooyase
      26.09.2026 16:48

      Не могу дать вам плюс, но не понимаю, за что вам дали минус)