Если клиент начал оплату и ушел, слот не должен оставаться занятым навсегда. Иначе расписание быстро забивается фиктивными бронями.
Для услуги, записи или аренды это прямые потери: реальные клиенты видят занятое время, хотя оплаты не было.
Коротко: нужна понятная модель временной брони: удержали, оплатили, освободили или отменили.Почему возникает такая проблема
Слот зависает, если система блокирует время до оплаты, но не задает срок жизни брони, не получает webhook отмены, не очищает pending-статусы или считает любой переход к оплате полноценным заказом.
Что проверить в первую очередь
- какие статусы есть у брони
- есть ли срок удержания слота
- приходит ли webhook успешной и неуспешной оплаты
- работает ли очистка зависших броней
- что происходит при повторном выборе того же времени
Как я подхожу к задаче
Я проверяю полный сценарий записи: выбор времени, переход к оплате, возврат, успешный платеж, отмена и истечение времени.
- воспроизвожу зависшую бронь
- смотрю статусы в базе
- настраиваю TTL для временной блокировки
- исправляю обработку webhook
- проверяю освобождение слота без оплаты
Что подготовить для быстрой диагностики
- ссылку на форму записи
- пример зависшего слота
- платежную систему
- доступ к админке или базе
- правило, сколько минут держать слот
Сроки и аккуратность
Если статусы уже есть, исправление обычно точечное. Если бронирование хранится без явной модели состояний, лучше сначала привести ее в порядок.
Чего лучше не делать
Не освобождайте слот сразу после ухода со страницы. Пользователь может вернуться с платежной системы через несколько секунд.
FAQ
Сколько держать неоплаченный слот?
Зависит от услуги, часто используют 10-20 минут.
Что делать с уже зависшими бронями?
Их можно найти по pending-статусу и времени создания, затем аккуратно освободить.
Нужен ли cron?
Да, если платежная система не присылает все статусы или пользователь просто закрывает страницу.
Можно ли показывать таймер клиенту?
Да, это снижает непонимание и помогает не держать слот бесконечно.
Нужна похожая задача?
Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Пришлите ссылку на проект, опишите проблему и укажите, какие доступы уже есть. Я посмотрю задачу, предложу безопасный план и скажу, с чего лучше начать.
Итог
Исправленное бронирование должно временно удерживать слот, подтверждать его только после оплаты и автоматически освобождать при незавершенном платеже.