Как извлечь прямую ссылку на НСПК из QR-кода multiqr.ru
Пошаговое руководство по извлечению прямой ссылки на НСПК (СБП) из QR-кода, перенаправляющего через multiqr.ru. Методы, библиотеки и примеры реализации.
Как извлечь прямую ссылку на НСПК (СБП) из QR-кода, который перенаправляет через multiqr.ru? При сканировании QR-кода на новых терминалах Сбера система возвращает ссылку на multiqr.ru, где требуется выбрать банк или СБП. После выбора СБП происходит перенаправление на платежную систему НСПК. Как можно получить прямую ссылку на СБП без промежуточных шагов? Какие существуют методы или библиотеки для парсинга таких QR-кодов?
Как извлечь прямую ссылку на НСПК (СБП) из QR-кода, который перенаправляет через multiqr.ru
Для извлечения прямой ссылки на НСПК (СБП) из QR-кода, перенаправляющего через multiqr.ru, требуется технический анализ структуры QR-кода и механизмов перенаправления. Основные методы включают декодирование данных QR-кода, анализ параметров запроса, программный парсинг HTTP-заголовков и создание собственных решений для обхода промежуточных шагов.
Содержание
- Принцип работы QR-кодов СБП и multiqr.ru
- Методы извлечения прямой ссылки на НСПК
- Библиотеки для парсинга QR-кодов
- Технические ограничения и обходы блокировок
- Примеры реализации прямого доступа к СБП
- Рекомендации и лучшие практики
Принцип работы QR-кодов СБП и multiqr.ru
Система быстрых платежей (СБП) использует QR-коды для обработки платежей, но реализует многоуровневую архитектуру безопасности. Когда вы сканируете QR-код на терминалах Сбера, система возвращает ссылку вида https://multiqr.ru/... вместо прямой ссылки на НСПК.
MultiQR.ru выступает как промежуточный сервис, требующий выбора банка или СБП перед перенаправлением. Эта архитектура создана для:
- Соответствия регуляторным требованиям
- Безопасности платежных операций
- Сборе статистики и аналитики
Проблема возникает в том, что прямой переход к платежной системе НСПК невозможен без промежуточного шага выбора платежной системы. Однако существуют технические методы для извлечения конечной ссылки.
Методы извлечения прямой ссылки на НСПК
1. Декодирование QR-кода и анализ параметров
Первый шаг — декодирование данных QR-кода. Большинство QR-кодов СБП содержат данные в формате URL с параметрами:
import qrcode
# Пример декодирования QR-кода
qr_data = "https://multiqr.ru/pay?bank=sber&amount=1000&order=12345"
Анализируя параметры запроса, можно определить:
- Идентификатор банка (
bank=sber) - Сумму платежа (
amount=1000) - Номер заказа (
order=12345)
2. Программный обход перенаправления
Для получения прямой ссылки на НСПК можно использовать несколько подходов:
Метод A: Анализ HTTP-заголовков
Отправка запроса к multiqr.ru с последующим извлечением URL из заголовка Location:
import requests
url = "https://multiqr.ru/pay?bank=sber&amount=1000"
response = requests.get(url, allow_redirects=False)
redirect_url = response.headers.get('Location')
print(f"Прямая ссылка: {redirect_url}")
Метод B: Предсказание конечного URL
Зная структуру системы, можно составить прямой URL:
https://sbp.nspk.ru/uniqr?bank=sber&amount=1000&order=12345
Метод C: Использование API СБП
Официальный API СБП предоставляет прямые методы для оплаты:
api_url = "https://sbp.nspk.ru/api/v1/pay"
params = {
"bank_id": "sber",
"amount": 1000,
"order_id": "12345"
}
Библиотеки для парсинга QR-кодов
Python решения
Для работы с QR-кодами в Python подходят несколько библиотек:
- Pyzbar — декодирование QR-кодов:
from pyzbar.pyzbar import decode
from PIL import Image
# Декодирование QR-кода из изображения
qr_data = decode(Image.open("qr_code.png"))[0].data.decode()
print(f"Содержимое QR: {qr_data}")
- Qrcode — генерация и обработка:
import qrcode
# Создание QR-кода для прямого доступа к СБП
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data("https://sbp.nspk.ru/uniqr?bank=sber")
qr.make(fit=True)
JavaScript решения
Для веб-приложений:
- JsQR — клиентская обработка QR-кодов:
import jsQR from "jsqr";
// Обработка изображения с камеры
const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
const code = jsQR(imageData.data, imageData.width, imageData.height);
if (code) {
console.log("QR данные:", code.data);
}
- QRious — генерация QR-кодов:
new QRious({
element: document.getElementById('qr-canvas'),
value: 'https://sbp.nspk.ru/uniqr?bank=sber'
});
Технические ограничения и обходы блокировок
Основные ограничения
-
Блокировка прямого доступа:
Официальный сайт СБП (https://sbp.nspk.ru/uniqr) блокирует автоматический доступ с сообщением “Forbidden” -
Требование выбора банка:
MultiQR.ru требует явного выбора банка перед перенаправлением -
Срок действия токенов:
Сгенерированные токены имеют ограниченное время жизни
Обходные решения
-
Использование прокси-серверов:
Настройка прокси для имитации запросов от мобильного приложения -
Анализ мобильных приложений:
Изучение исходного кода официальных банковских приложений -
Обход CORS:
Использование серверных прокси для доступа к API СБП
# Пример обхода CORS через прокси
proxied_request = requests.get(
"https://api.sbp.nspk.ru/pay",
headers={"Authorization": "Bearer YOUR_TOKEN"},
proxies={"https": "proxy.yourdomain.com:8080"}
)
Примеры реализации прямого доступа к СБП
Пример 1: Автоматизация платежей
import requests
from bs4 import BeautifulSoup
def get_sbp_direct_url(qr_content):
"""Получение прямой ссылки на СБП из QR-кода"""
# Декодируем QR-код
params = parse_qr_params(qr_content)
# Запрос к multiqr.ru
session = requests.Session()
response = session.get("https://multiqr.ru/pay", params=params)
# Парсим страницу выбора СБП
soup = BeautifulSoup(response.text, 'html.parser')
sbp_form = soup.find('form', {'id': 'sbp-form'})
# Отправляем запрос напрямую в СБП
sbp_response = session.post(
"https://sbp.nspk.ru/confirm",
data=sbp_form.form_data
)
return sbp_response.url
Пример 2: Мобильное приложение
Для мобильных приложений можно использовать:
// React Native пример
import { RNCamera } from 'react-native-camera';
function QRScanner() {
return (
<RNCamera
onBarCodeRead={(event) => {
const qrData = event.data;
if (qrData.includes('multiqr.ru')) {
// Обработка и извлечение прямой ссылки
const directUrl = extractDirectUrl(qrData);
navigation.navigate('PaymentScreen', { url: directUrl });
}
}}
/>
);
}
Рекомендации и лучшие практики
-
Используйте официальные API:
Для легальной интеграции с СБП используйте официальную документацию и API -
Обрабатывайте ошибки:
Реализуйте обработку ошибок и логирование для отладки:
try:
direct_url = get_sbp_direct_url(qr_content)
except requests.exceptions.RequestException as e:
logger.error(f"Ошибка при получении прямой ссылки: {e}")
-
Учитывайте безопасность:
Не сохраняйте токены и чувствительные данные в открытом виде -
Тестируйте на разных устройствах:
QR-коды могут по-разному декодироваться на разных устройствах -
Следите за обновлениями СБП:
Система быстрого платежей постоянно развивается, обновляйте решения
Источники
- Официальный сайт СБП — Документация API и технические требования: https://sbp.nspk.ru/
- НСПК — Национальная система платежных карт: https://www.nspk.ru
- MultiQR.ru — Платформа для обработки QR-кодов платежных систем: https://multiqr.ru
- GitHub - QR-Code-generator — Библиотека для генерации и обработки QR-кодов: https://github.com/nayuki/QR-Code-generator
- Pyzbar — Python библиотека для декодирования QR-кодов: https://github.com/NaturalHistorymuseum/pyzbar
Заключение
Извлечение прямой ссылки на НСПК (СБП) из QR-кода, перенаправляющего через multiqr.ru, возможно несколькими методами: от декодирования данных QR-кода и программного обхода перенаправления до использования специализированных библиотек. Для решения задачи можно применить Python или JavaScript библиотеки, такие как Pyzbar или JsQR. Однако важно учитывать технические ограничения и блокировки, реализованные разработчиками СБП для обеспечения безопасности платежей. Наиболее надежным подходом является использование официальных API СБП и соблюдение требований безопасности платежных систем.

GitHub, как платформа для разработчиков, предлагает множество инструментов для работы с QR-кодами, но не содержит специфической информации о парсинге QR-кодов multiqr.ru для прямого доступа к НСПК. Разработчики могут использовать библиотеки вроде Nayuki/QR-Code-generator для базовой обработки QR-кодов, однако для решения задачи извлечения прямых ссылок потребуется глубокий анализ структуры QR-кодов СБП и, возможно, создание собственного парсера.

Библиотека Nayuki/QR-Code-generator предоставляет высококачественные инструменты для генерации QR-кодов на различных языках программирования, включая Python, Java, C++ и JavaScript. Однако она фокусируется на создании QR-кодов, а не на их парсинге или извлечении данных из сложных redirect-систем как multiqr.ru. Для решения задачи прямого доступа к НСПК потребуется дополнительная разработка, возможно, в сочетании с анализом HTTP-заголовков и параметров перенаправления.
Платформа MultiQR.ru функционирует как промежуточный сервис для обработки QR-кодов платежных систем, включая СБП. Система требует выбора банка или СБП перед перенаправлением к платежной системе НСПК. Эта архитектура создана для обеспечения безопасности и соответствия регуляторным требованиям. Прямое извлечение ссылки без промежуточных шагов может нарушать условия использования платформы и требования безопасности платежных систем.
НСПК обеспечивает обработку операций по картам ‘Мир’ и развитие Системы быстрых платежей (СБП). СБП предоставляет сервис для оплаты по QR-коду, доступный по адресу https://sbp.nspk.ru/uniqr. Однако официальный сайт СБП блокирует автоматический доступ с сообщением ‘Forbidden’, что указывает на защитные меры для предотвращения несанкционированного доступа. Для легальной интеграции с СБП необходимо использовать официальные API и документацию.