4.4 KiB
4.4 KiB
Технический алгоритм извлечения платежных данных (SBP Discovery)
Этот протокол предназначен для поиска платежной ссылки СБП в условиях отсутствия у Исполнителя визуального канала (Vision). Твоя цель — найти строку, начинающуюся с https://qr.nspk.ru/.
Шаг 1: Глубокое сканирование DOM (Deep Link Search)
Большинство маркетплейсов прячут прямую ссылку СБП в атрибутах элементов. Прикажи internet_browser выполнить поиск по следующим паттернам:
- Поиск в атрибутах: Проверить
href,data-url,data-qr,valueу всех кнопок и ссылок на странице оплаты. - Поиск в тегах
<script>: Часто данные для QR-кода передаются в виде JSON-объекта внутри тегов скриптов. Требуй от браузера вернуть содержимое подозрительных скриптов, содержащих подстроку "nspk" или "sbp". - Мобильные протоколы: Ищи ссылки, начинающиеся с
intent://,air.ru.nspk.sbpилиbank1000.... Это технические адреса, которые можно преобразовать в стандартный URL СБП.
Шаг 2: Работа с Iframe и Shadow DOM
Платежные шлюзы (Сбербанк, Альфа-Банк) часто открываются в изолированных фреймах.
- Переключение контекста: Если на странице обнаружен
<iframe>, Исполнитель ОБЯЗАН переключить контекст внутрь него и повторить Шаг 1. - Shadow DOM: Если элементы интерфейса оплаты скрыты в Shadow Root, используй JS-запросы через браузер для извлечения их содержимого.
Шаг 3: Программное декодирование (Fallback: Python OCR)
Если в коде страницы нет прямой ссылки, но на экране отображается QR-код, мы используем "техническое зрение" через Python.
- Захват: Прикажи
internet_browserсделать скриншот всей страницы и сохранить его в/app/workspace/qr_capture.png. - Декодирование: Выполни инструмент
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}")
- Результат: Если Python нашел ссылку внутри картинки, используй её как основную.
Шаг 4: Валидация найденной ссылки
Перед тем как считать поиск успешным, убедись, что:
- Ссылка ведет на домен
qr.nspk.ruили официальный домен банка-эквайера. - Ссылка открывается (не является битой или пустой).
- Сумма, указанная рядом с кодом на странице, на 100% совпадает с ожидаемой суммой из
cart_state.json.
ИНСТРУКЦИЯ ДЛЯ ТЕЛЕГРАМ: Полученную ссылку всегда оформляй как гиперссылку с текстом "Оплатить через СБП", чтобы пользователь мог нажать на неё с мобильного устройства.