Возврат после checkout
Навигация покупателя не подтверждает оплату.
В настройках проекта задайте HTTPS successUrl, cancelUrl и точные домены allowedRedirectDomains.
Для сессий v2 checkout добавляет sessionId и status в нижнем регистре. Для счетов v1 — invoiceId и status. Существующие одноимённые параметры заменяются, остальные сохраняются; кодирование может нормализоваться.
После серверного PAID выполняется автоматический переход на successUrl. Другие состояния предлагают ручной возврат на cancelUrl. Истечение локального таймера не меняет серверный статус и не вызывает автоматического возврата: своевременный перевод ещё может подтверждаться. Уход со страницы не отменяет перевод.
Пример v1: https://shop.example/payment/success?source=checkout&invoiceId=INVOICE_ID&status=paid. Для v2 вместо invoiceId используется sessionId. Не добавляйте секреты или личные данные в URL. BramaPay не передаёт в URL externalId, сумму или подпись как доказательство оплаты.
Сохранённые адреса возврата фиксируются при создании. Изменение проекта влияет на новые платежи; при отсутствии URL checkout не придумывает адрес.
На сервере найдите сохранённую связь платежа с заказом текущего покупателя. Проверьте подпись события и/или авторизованный статус подходящего API и требуйте PAID. Выполняйте заказ идемпотентно. Если возврат пришёл раньше события, покажите ожидание; не объявляйте оплату или окончательный отказ только по URL.