46 lines
No EOL
4.4 KiB
Markdown
46 lines
No EOL
4.4 KiB
Markdown
# Технический алгоритм извлечения платежных данных (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`.
|
||
|
||
---
|
||
**ИНСТРУКЦИЯ ДЛЯ ТЕЛЕГРАМ:** Полученную ссылку всегда оформляй как гиперссылку с текстом "Оплатить через СБП", чтобы пользователь мог нажать на неё с мобильного устройства. |