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

46 lines
No EOL
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Технический алгоритм извлечения платежных данных (SBP Discovery)
Этот протокол предназначен для поиска платежной ссылки СБП в условиях отсутствия у Исполнителя визуального канала (Vision). Твоя цель — найти строку, начинающуюся с `https://qr.nspk.ru/`.
## Шаг 1: Глубокое сканирование DOM (Deep Link Search)
Большинство маркетплейсов прячут прямую ссылку СБП в атрибутах элементов. Прикажи `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` со следующим скриптом (используя библиотеки обработки изображений, доступные в среде):
```python
# Пример логики (скрыто от пользователя)
# Используем библиотеку для поиска и чтения 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}")
```
3. **Результат:** Если Python нашел ссылку внутри картинки, используй её как основную.
## Шаг 4: Валидация найденной ссылки
Перед тем как считать поиск успешным, убедись, что:
- Ссылка ведет на домен `qr.nspk.ru` или официальный домен банка-эквайера.
- Ссылка открывается (не является битой или пустой).
- Сумма, указанная рядом с кодом на странице, на 100% совпадает с ожидаемой суммой из `cart_state.json`.
---
**ИНСТРУКЦИЯ ДЛЯ ТЕЛЕГРАМ:** Полученную ссылку всегда оформляй как гиперссылку с текстом "Оплатить через СБП", чтобы пользователь мог нажать на неё с мобильного устройства.