Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

Как мы создали Open-Source альтернативу закрытым платёжным системам на React, Node.js и WebNFC

Дата публикации: 26-09-2026 11:44:47

Представьте парк аттракционов, фуд-корт на фестивале, корпоративную столовую или сеть автомоек. Что их объединяет? Всем им нужна своя закрытая платёжная система или внутренняя программа лояльности (клубные карты).Обычно внедрение такой системы — это боль. Нужно покупать дорогие терминалы, нанимать интеграторов и пилить самописный софт. А что делать, если система нужна «на один раз» (для трёхдневного фестиваля) или у малого бизнеса просто нет бюджета?Меня зовут Никита, и я решил закрыть эту боль, заодно прокачав своё портфолио. Я разработал легковесную, open-source альтернативу закрытым платёжкам, которая работает прямо в браузере, не требует скачивания приложений и сложного железа.Под капотом — классический стек React + Node.js и капелька технологии в виде WebNFC. Читать далее

Основное содержимое страницы с новостью.

Уровень сложностиПростой

Время на прочтение3 мин

Охват и читатели4.6K

Обзор

превью

превью

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

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

Меня зовут Никита, и я решил закрыть эту боль, заодно прокачав своё портфолио. Я разработал легковесную, 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. Кассир просто сканирует его камерой внутри того же веб-приложения.

eaea00728de1a328eecab09658ad3132.png

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

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

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

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

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

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

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

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

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

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

    bd4003ebb470bf8123de619c2d45ded2.png

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

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

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

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

👉 Ссылка на мой GitHub: https://github.com/lqdope/NFCwebPay/

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

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1redb.Identity: OAuth 2.1 / OpenID сервер на .NET, где протокол отделён от транспорта, по шине или вообще без сети012.7414-07-2026
2N тел в браузере: PWA‑бенчмарк на Rust, WebAssembly и Three.js07.5821-07-2026
3История JavaScript: браузерные войны, ECMAScript, Node.js, TypeScript, React08.3110-07-2026
4Платёжная платформа на.NET: во что она обходится и что из этого можно не писать07.7428-07-2026
5Как получить пожизненный бан на VC.ru за open-source проект на Node.js без рекламы. Кейс CMTT09.6429-07-2026
6Референсная архитектура платёжной платформы на.NET: схемы, границы транзакций, модули, кластер07.7428-07-2026
7РИА Новости: Россияне массово переходят на платежи без карт и наличных012.8326-07-2026
8Один QR-код вместо двух действий: как Яндекс Пэй объединил оплату и лояльность в Cofix09.4731-03-2026
9В России выросла популярность альтернативных способов оплаты покупок112.6626-07-2026
10Gallery017.5426-09-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 8.98. Источник: habr.com.