Исправил недочеты и уязвимости
This commit is contained in:
parent
d54eb1846b
commit
b32a539b95
4 changed files with 148 additions and 93 deletions
|
|
@ -1,46 +1,59 @@
|
|||
# Технический алгоритм извлечения платежных данных (SBP Discovery)
|
||||
# Технический протокол извлечения SBP-данных (Deep Discovery)
|
||||
|
||||
Этот протокол предназначен для поиска платежной ссылки СБП в условиях отсутствия у Исполнителя визуального канала (Vision). Твоя цель — найти строку, начинающуюся с `https://qr.nspk.ru/`.
|
||||
Твоя цель — получить текстовую ссылку формата `https://qr.nspk.ru/...`. Эта ссылка является универсальной: она позволяет пользователю оплатить заказ в один клик через банковское приложение на телефоне.
|
||||
|
||||
## Шаг 1: Глубокое сканирование DOM (Deep Link Search)
|
||||
Большинство маркетплейсов прячут прямую ссылку СБП в атрибутах элементов. Прикажи `internet_browser` выполнить поиск по следующим паттернам:
|
||||
## Шаг 1: Глубокий поиск в DOM (Инструкция для браузера)
|
||||
Прикажи Исполнителю выполнить поиск по следующим техническим признакам. В параметре `task` для браузера укажи:
|
||||
|
||||
1. **Поиск в атрибутах:** Проверить `href`, `data-url`, `data-qr`, `value` у всех кнопок и ссылок на странице оплаты.
|
||||
2. **Поиск в тегах `<script>`:** Часто данные для QR-кода передаются в виде JSON-объекта внутри тегов скриптов. Требуй от браузера вернуть содержимое подозрительных скриптов, содержащих подстроку "nspk" или "sbp".
|
||||
3. **Мобильные протоколы:** Ищи ссылки, начинающиеся с `intent://`, `air.ru.nspk.sbp` или `bank1000...`. Это технические адреса, которые можно преобразовать в стандартный URL СБП.
|
||||
1. **Поиск по атрибутам:** "Проверь все элементы `<a>`, `<button>` и `<div>` на наличие подстрок 'nspk', 'sbp', 'qr' в атрибутах `href`, `data-url`, `data-qr`, `value` или `src`."
|
||||
2. **Поиск мобильных протоколов:** "Ищи ссылки, начинающиеся с `intent://`, `air.ru.nspk.sbp` или `bank1000...`. Если найдешь — верни их полностью, Менеджер их конвертирует."
|
||||
3. **Анализ скриптов:** "Найди теги `<script>`, содержащие текст 'payload' или 'qr'. Извлеки содержимое этих скриптов, если там есть упоминание домена `qr.nspk.ru`."
|
||||
|
||||
## Шаг 2: Работа с Iframe и Shadow DOM
|
||||
Платежные шлюзы (Сбербанк, Альфа-Банк) часто открываются в изолированных фреймах.
|
||||
1. **Переключение контекста:** Если на странице обнаружен `<iframe>`, Исполнитель ОБЯЗАН переключить контекст внутрь него и повторить Шаг 1.
|
||||
2. **Shadow DOM:** Если элементы интерфейса оплаты скрыты в Shadow Root, используй JS-запросы через браузер для извлечения их содержимого.
|
||||
## Шаг 2: Работа с Iframe (Переключение контекста)
|
||||
Платежные шлюзы (Сбербанк, ЮKassa, Альфа) часто изолируют QR-код во фрейме.
|
||||
- **Инструкция:** "Если на странице оплаты есть `<iframe>`, переключи контекст внутрь него и повтори поиск ссылки СБП. Обрати внимание на домены фрейма: `*.sberbank.ru`, `*.yoomoney.ru`, `*.nspk.ru`."
|
||||
|
||||
## Шаг 3: Программное декодирование (Python OCR Fallback)
|
||||
Если в коде страницы нет прямой ссылки (код отрисован через `<canvas>` или защищенную картинку), ты обязан использовать «техническое зрение» через Python.
|
||||
|
||||
**Алгоритм действий:**
|
||||
1. **Захват:** Прикажи браузеру: *"Сделай скриншот области, где отображается QR-код, и сохрани его по пути `/app/workspace/payment_qr.png`"*.
|
||||
2. **Распознавание:** Используй `execute_code` для запуска следующего скрипта (библиотека `pyzbar` предустановлена в среде лаборатории):
|
||||
|
||||
## Шаг 3: Программное декодирование (Fallback: Python OCR)
|
||||
Если в коде страницы нет прямой ссылки, но на экране отображается QR-код, мы используем "техническое зрение" через Python.
|
||||
1. **Захват:** Прикажи `internet_browser` сделать скриншот всей страницы и сохранить его в `/app/workspace/qr_capture.png`.
|
||||
2. **Декодирование:** Выполни инструмент `execute_code` со следующим скриптом (используя библиотеки обработки изображений, доступные в среде):
|
||||
```python
|
||||
# Пример логики (скрыто от пользователя)
|
||||
# Используем библиотеку для поиска и чтения QR-кодов на сохраненном скриншоте
|
||||
import pyzbar.pyzbar as pyzbar
|
||||
import json
|
||||
import os
|
||||
from PIL import Image
|
||||
from pyzbar.pyzbar import decode
|
||||
|
||||
def decode_qr(image_path):
|
||||
def extract_sbp_url(image_path):
|
||||
if not os.path.exists(image_path):
|
||||
return {"error": "Файл скриншота не найден"}
|
||||
|
||||
img = Image.open(image_path)
|
||||
decoded = pyzbar.decode(img)
|
||||
if decoded:
|
||||
return decoded[0].data.decode('utf-8')
|
||||
return None
|
||||
# Попытка найти и декодировать QR-код
|
||||
decoded_objects = decode(img)
|
||||
|
||||
for obj in decoded_objects:
|
||||
data = obj.data.decode('utf-8')
|
||||
if 'qr.nspk.ru' in data:
|
||||
return {"success": True, "url": data}
|
||||
|
||||
return {"success": False, "error": "QR-код не найден или не распознан"}
|
||||
|
||||
url = decode_qr('/app/workspace/qr_capture.png')
|
||||
print(f"FOUND_URL: {url}")
|
||||
result = extract_sbp_url('/app/workspace/payment_qr.png')
|
||||
print(json.dumps(result))
|
||||
```
|
||||
3. **Результат:** Если Python нашел ссылку внутри картинки, используй её как основную.
|
||||
|
||||
## Шаг 4: Валидация найденной ссылки
|
||||
Перед тем как считать поиск успешным, убедись, что:
|
||||
- Ссылка ведет на домен `qr.nspk.ru` или официальный домен банка-эквайера.
|
||||
- Ссылка открывается (не является битой или пустой).
|
||||
- Сумма, указанная рядом с кодом на странице, на 100% совпадает с ожидаемой суммой из `cart_state.json`.
|
||||
## Шаг 4: Конвертация и Валидация
|
||||
Получив данные (из DOM или через Python), ты (Менеджер) должен убедиться в их корректности:
|
||||
1. **Паттерн ссылки:** Ссылка ОБЯЗАТЕЛЬНО должна содержать `qr.nspk.ru`.
|
||||
2. **Конвертация мобильных ссылок:** Если браузер нашел ссылку вида `air.ru.nspk.sbp://qr.nspk.ru/AD1000...`, очисти её от префикса протокола, превратив в стандартную `https://qr.nspk.ru/AD1000...`.
|
||||
3. **Сумма рядом с кодом:** Попроси браузер подтвердить: *"Какая сумма написана текстом непосредственно над или под QR-кодом?"*. Сверь её с утвержденным бюджетом.
|
||||
|
||||
## Шаг 5: Обработка ошибок
|
||||
- **Если ссылка не найдена:** Сделай еще одну попытку, приказав браузеру нажать кнопку «Оплатить другим банком» или «Показать QR-код».
|
||||
- **Критический отказ:** Если после 3-х попыток ссылка не получена, вызови пользователя через сообщение: *"Я вижу экран оплаты, но не могу извлечь цифровую ссылку. Пожалуйста, завершите оплату через VNC: [ссылка]"*.
|
||||
|
||||
---
|
||||
**ИНСТРУКЦИЯ ДЛЯ ТЕЛЕГРАМ:** Полученную ссылку всегда оформляй как гиперссылку с текстом "Оплатить через СБП", чтобы пользователь мог нажать на неё с мобильного устройства.
|
||||
**ВАЖНО:** Как только ссылка получена и валидирована, немедленно переходи к этапу выдачи ссылки в Telegram и последующей архивации заказа. Не оставляй сессию браузера открытой дольше необходимого.
|
||||
Reference in a new issue