Если клиент начал оплату и ушел, слот не должен оставаться занятым навсегда. Иначе расписание быстро забивается фиктивными бронями.

Для услуги, записи или аренды это прямые потери: реальные клиенты видят занятое время, хотя оплаты не было.

Коротко: нужна понятная модель временной брони: удержали, оплатили, освободили или отменили.

Почему возникает такая проблема

Слот зависает, если система блокирует время до оплаты, но не задает срок жизни брони, не получает webhook отмены, не очищает pending-статусы или считает любой переход к оплате полноценным заказом.

Что проверить в первую очередь

  • какие статусы есть у брони
  • есть ли срок удержания слота
  • приходит ли webhook успешной и неуспешной оплаты
  • работает ли очистка зависших броней
  • что происходит при повторном выборе того же времени

Как я подхожу к задаче

Я проверяю полный сценарий записи: выбор времени, переход к оплате, возврат, успешный платеж, отмена и истечение времени.

  • воспроизвожу зависшую бронь
  • смотрю статусы в базе
  • настраиваю TTL для временной блокировки
  • исправляю обработку webhook
  • проверяю освобождение слота без оплаты

Что подготовить для быстрой диагностики

  • ссылку на форму записи
  • пример зависшего слота
  • платежную систему
  • доступ к админке или базе
  • правило, сколько минут держать слот

Сроки и аккуратность

Если статусы уже есть, исправление обычно точечное. Если бронирование хранится без явной модели состояний, лучше сначала привести ее в порядок.

Чего лучше не делать

Не освобождайте слот сразу после ухода со страницы. Пользователь может вернуться с платежной системы через несколько секунд.

FAQ

Сколько держать неоплаченный слот?

Зависит от услуги, часто используют 10-20 минут.

Что делать с уже зависшими бронями?

Их можно найти по pending-статусу и времени создания, затем аккуратно освободить.

Нужен ли cron?

Да, если платежная система не присылает все статусы или пользователь просто закрывает страницу.

Можно ли показывать таймер клиенту?

Да, это снижает непонимание и помогает не держать слот бесконечно.

Нужна похожая задача?

Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Пришлите ссылку на проект, опишите проблему и укажите, какие доступы уже есть. Я посмотрю задачу, предложу безопасный план и скажу, с чего лучше начать.

Итог

Исправленное бронирование должно временно удерживать слот, подтверждать его только после оплаты и автоматически освобождать при незавершенном платеже.