Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QR перевод по СБП

Статичный сайт для личных страниц перевода по номеру телефона. Работает без сервера и базы данных, поэтому подходит для GitHub Pages.

Профили получателей хранятся прямо в репозитории в profiles/*.json. Публичная ссылка выглядит так:

https://username.github.io/repo/?to=ivan-petrov

Что умеет

  • Открывает постоянные страницы получателей из profiles/<slug>.json.
  • Генерирует preview и JSON нового профиля.
  • Показывает мобильную страницу с QR-кодом этой ссылки.
  • Копирует номер телефона по нажатию.
  • Показывает инструкцию для ручного перевода через СБП или перевод по номеру.
  • Рисует кнопки банков из banks.js с локальными SVG-логотипами и пытается открыть приложение через диплинк.

Важное ограничение

Публичного универсального стандарта диплинков для P2P-перевода по номеру телефона во все банковские приложения нет. Поэтому кнопки банков в banks.js нужно проверять на реальных устройствах и при необходимости уточнять под конкретный банк. Надёжный сценарий в интерфейсе всегда остаётся ручным: скопировать номер и открыть перевод по СБП в банке.

Для Т-Банка используется маршрут:

tinkoffbank://Main/PayByMobileNumber?numberPhone=<phone>&workflowType=SBPTransfer&bankMemberId=<recipient-bank-id>

Fallback ведёт в web-версию перевода по телефону Т-Банка. Для Сбера первым авто-вариантом используется universal/web link из QR-кода, который само приложение Сбера генерирует для получения переводов:

https://www.sberbank.com/sms/pbpn?requisiteNumber=<phone>

Для Яндекс Банка используется проверяемый route:

ybapp://screen.open/transfer?scenario=phone&target_phone=<phone>

Открытие приложения не гоняет весь каскад автоматически: сайт сам пробует только первый, самый вероятный route. Если приложение открылось, но внутри банка конкретный route показал ошибку, можно вернуться в браузер и нажать «Попробовать следующий вариант».

Не путать P2P-перевод по номеру с SberPay/эквайрингом: у SberPay диплинк обычно выдаётся платёжным провайдером для конкретного инвойса, а не собирается статическим сайтом из телефона получателя.

Локальный запуск

Запусти простой сервер:

python3 -m http.server 8000

Открой корень сайта, чтобы создать новую карточку: http://127.0.0.1:8000/.

Создание профиля

Локально:

node tools/create-profile.mjs \
  --name="Иван Петров" \
  --phone="+7 999 123-45-67" \
  --bank=tbank \
  --note="На кофе"

Скрипт создаст profiles/ivan-petrov.json. После коммита и пуша ссылка будет:

https://username.github.io/repo/?to=ivan-petrov

Публикация сразу в GitHub через API:

GITHUB_TOKEN=... node tools/create-profile.mjs \
  --repo=username/repo \
  --branch=main \
  --name="Иван Петров" \
  --phone="+7 999 123-45-67" \
  --bank=tbank \
  --note="На кофе"

Через GitHub MCP можно сделать то же самое вызовом create_file для пути profiles/<slug>.json.

Деплой на GitHub Pages

  1. Создай публичный репозиторий.
  2. Загрузи в него файлы сайта, включая assets/, profiles/, tools/, index.html, styles.css, app.js, banks.js, qrcode.min.js и README.md.
  3. В настройках репозитория открой Pages.
  4. Выбери источник Deploy from a branch, ветку main, папку /root.
  5. Через минуту сайт будет доступен по адресу вида https://username.github.io/repo/.

Приватность

Опубликованные профили лежат в публичном GitHub-репозитории. Имя и телефон стоит считать публичными.


⭐ Stars

GitHub stars

Star history chart ↗

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages