This repository has been archived on 2026-04-28. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
safe-paymaster/references/sbp_discovery.md
2026-04-21 23:11:38 +03:00

4.4 KiB
Raw Blame History

Технический алгоритм извлечения платежных данных (SBP Discovery)

Этот протокол предназначен для поиска платежной ссылки СБП в условиях отсутствия у Исполнителя визуального канала (Vision). Твоя цель — найти строку, начинающуюся с https://qr.nspk.ru/.

Большинство маркетплейсов прячут прямую ссылку СБП в атрибутах элементов. Прикажи internet_browser выполнить поиск по следующим паттернам:

  1. Поиск в атрибутах: Проверить href, data-url, data-qr, value у всех кнопок и ссылок на странице оплаты.
  2. Поиск в тегах <script>: Часто данные для QR-кода передаются в виде JSON-объекта внутри тегов скриптов. Требуй от браузера вернуть содержимое подозрительных скриптов, содержащих подстроку "nspk" или "sbp".
  3. Мобильные протоколы: Ищи ссылки, начинающиеся с intent://, air.ru.nspk.sbp или bank1000.... Это технические адреса, которые можно преобразовать в стандартный URL СБП.

Шаг 2: Работа с Iframe и Shadow DOM

Платежные шлюзы (Сбербанк, Альфа-Банк) часто открываются в изолированных фреймах.

  1. Переключение контекста: Если на странице обнаружен <iframe>, Исполнитель ОБЯЗАН переключить контекст внутрь него и повторить Шаг 1.
  2. Shadow DOM: Если элементы интерфейса оплаты скрыты в Shadow Root, используй JS-запросы через браузер для извлечения их содержимого.

Шаг 3: Программное декодирование (Fallback: Python OCR)

Если в коде страницы нет прямой ссылки, но на экране отображается QR-код, мы используем "техническое зрение" через Python.

  1. Захват: Прикажи internet_browser сделать скриншот всей страницы и сохранить его в /app/workspace/qr_capture.png.
  2. Декодирование: Выполни инструмент execute_code со следующим скриптом (используя библиотеки обработки изображений, доступные в среде):
# Пример логики (скрыто от пользователя)
# Используем библиотеку для поиска и чтения QR-кодов на сохраненном скриншоте
import pyzbar.pyzbar as pyzbar
from PIL import Image

def decode_qr(image_path):
    img = Image.open(image_path)
    decoded = pyzbar.decode(img)
    if decoded:
        return decoded[0].data.decode('utf-8')
    return None

url = decode_qr('/app/workspace/qr_capture.png')
print(f"FOUND_URL: {url}")
  1. Результат: Если Python нашел ссылку внутри картинки, используй её как основную.

Шаг 4: Валидация найденной ссылки

Перед тем как считать поиск успешным, убедись, что:

  • Ссылка ведет на домен qr.nspk.ru или официальный домен банка-эквайера.
  • Ссылка открывается (не является битой или пустой).
  • Сумма, указанная рядом с кодом на странице, на 100% совпадает с ожидаемой суммой из cart_state.json.

ИНСТРУКЦИЯ ДЛЯ ТЕЛЕГРАМ: Полученную ссылку всегда оформляй как гиперссылку с текстом "Оплатить через СБП", чтобы пользователь мог нажать на неё с мобильного устройства.