“Залипший” сентябрь: как флагман Honor Magic6 Pro и «умный» сканер Сбера едва не загнали меня в долг по ЖКХ

—

от автора

Эта история о том, как избыточная мощность современного смартфона, помноженная на особенности кэширования мобильного приложения, может создать идеальный плавающий баг (race condition) на стыке финтеха и ЖКХ. И если бы не моя привычка перепроверять цифры, я бы гарантированно ушел в неосознанный долг перед поставщиком газа.

DISCLAIMER. Мои предположения и выводы о причинах возникновения описанной ниже технической проблемы изложены исключительно исходя из моего личного анализа фактов и событий.

Конец октября 2026 года. В почтовый ящик падает стандартный ежемесячный счет-квитанция за газоснабжение от РСО. Месяц расчета — октябрь 2026, дата формирования — 27.10.2026. В правом верхнем углу счета — привычный QR-код для быстрой оплаты по ГОСТу. Контекст тут важный: в октябре в России как раз произошло плановое изменение тарифов на коммунальные услуги, поэтому октябрьская сумма была ощутимо выше сентябрьской.

Я открываю приложение «СберБанк Онлайн» на своём телефоне, нажимаю кнопку оплаты по QR, навожу камеру на квитанцию и… замираю. Приложение Сбера вместо октябрьских данных подставляет мне экран с полностью оплаченным прошлым счетом за сентябрь 2026 года и, соответственно, старой, меньшей сентябрьской суммой. Первая мысль любого параноика в сфере ЖКХ — РСО накосячили и напечатали старый QR-код на новой квитанции. Я закрываю Сбер, открываю стандартное приложение камеры смартфона в режиме чтения кодов и сканирую QR-код просто как текст. На экран выводится «тело» ссылки следующего вида (строка данных по ГОСТ): Name=Межрегионгаз|PersonalAcc=XXXXXXXX|Sum=[НоваяОктябрьскаяСумма]|Period=102026....

Нет, РСО отработала идеально. В самом QR-коде жестко зашит октябрь и новая сумма. “Косячит” именно Сбер. Я делаю вторую попытку через приложение Сбер. Результат — снова сентябрь. Жду 5 минут, делаю третью попытку — снова сентябрь! Приложение намертво проигнорировало свежесчитанные данные и упорно подсовывало мне форму старого платежа.И только на четвертый раз, примерно через 10-15 минут, при очередном сканировании Сбер наконец-то «отпустило», и он вывел корректный октябрьский счет с правильной суммой.

Технический разбор: Почему это произошло именно сейчас?
Я никогда раньше не сталкивался с такой проблемой, хотя плачу по QR годами. Чтобы понять, почему этот «бред» материализовался именно 27 октября, пришлось сопоставить три фактора: железо, настройки ОС и архитектуру приложения.

Фактор 1: Железо и агрессивная оптимизация.
Мой смартфон — Honor Magic6 Pro (бывший флагман, на борту 12 GB ОЗУ, всё еще “бодрый” процессор Snapdragon 8 Gen 3 и MagicOS). Из-за некоторой специфики работы я жёстко закрепил приложение Сбера в исключениях Android по запрету выгрузки приложений при работе в фоне. Система не имеет права выгружать его из оперативной памяти ни при каких обстоятельствах.

Фактор 2: Залипание графического слоя (Activity/Fragment State).
Когда Сбер сканирует QR, вероятно он ищет знакомые маркеры (ИНН, Лицевой счет). И возможно при первой попытке произошел внутренний UI-сбой (глюк отрисовки или логики шлюза), и приложение вытащило из локальной памяти форму предыдущей успешной сессии по этому поставщику услуг (РСО). Поскольку мой Honor мертвой хваткой держал процесс Сбера в ОЗУ, пятиминутные паузы и сворачивания приложения не помогали. Смартфон не убивал процесс, переменные не сбрасывались. При повторном входе через Face ID (3D-сканер лица) приложение успешно авторизовывало меня, но вероятно восстанавливало из памяти «замороженный» экран сканера со старыми сентябрьскими данными.

Фактор 3: Серверный спасительный таймаут.
Почему же на 4-й раз (через 10-15 минут) всё заработало? Сработал Session Timeout на стороне серверов Сбера. Банк жестко ограничивает время жизни сессионного токена (обычно до 10 минут). Когда токен умер, приложение внутри себя провело глубокий сброс состояния (Clear State), очистив застрявший локальный кэш экранов. И сканер наконец-то заработал «с чистого листа».

В чем главная опасность?
Мы все живем в эпоху тотального автоматизма. Пользователи привыкли доверять технологиям: навел — сосканировал — нажал «Оплатить», не глядя. Если бы на моем месте оказался невнимательный человек, он бы оплатил сентябрьскую сумму. У поставщика газа возникла бы недоплата (из-за разницы в тарифах), а у абонента (меня) — долг и пени в следующем месяце. И доказать РСО, что «это Сбербанк сам подставил «не те цифры», было бы практически нереально.

Итог.
Ситуация оформлена как официальная техническая заявка в поддержке Сбера. Оператор зафиксировал точное время, модель устройства и версию Android. Для разработчиков это идеальный «след» в логах: они увидят три запроса с октябрьским телом QR-кода, которые отобразились как сентябрь, контрольный успешный четвертый запрос и смогут поправить логику очистки кэша при сворачивании приложения. А мораль проста: даже если у вас в руках ультимативный флагман, а софт написан ведущим банком страны — проверяйте реквизиты и сумму перед нажатием кнопки «Оплатить».

“Автоматизм” иногда бьет по карману.

ссылка на оригинал статьи https://habr.com/ru/articles/1100716/