Checkout в скрипте магазина — путь от корзины до статуса «новый заказ» в админке и, если нужно, до онлайн-оплаты. Здесь сыпется конверсия: лишние поля, пропавшая доставка, неочевидная ошибка карты. Я гоняю чеклист на каждом внедрении, пока менеджер не видит заказ без фильтров и шаманства.
Общий контур — мануал магазина. ЮKassa — отдельно.
Шаги checkout, которые должны быть стабильны
- Корзина: позиции, цена, количество, сумма.
- Контакты покупателя (email/телефон) с валидацией.
- Способ доставки и адрес или ПВЗ — доставка.
- Способ оплаты: онлайн / при получении / счёт.
- Подтверждение: итоговая сумма = товары + доставка − промокод.
- Создание заказа в БД → редирект на оплату или страницу «принято».
Обновление страницы на шаге 3 не должно обнулять корзину. Это классический баг сессий на двух доменах (www и без www).
Проверка «заказ до конца» без оплаты
- Товар с ценой и остатком > 0 кладётся в корзину.
- Меняю количество — сумма пересчитывается.
- Оформляю с доставкой «самовывоз».
- В админке заказ виден сразу, статус «новый».
- Состав заказа совпадает, цены зафиксированы.
- Письмо может не уйти — заказ всё равно обязан существовать.
Онлайн-оплата: статусы
Минимальная матрица:
pending— ждём оплату;paid— вебхук подтвердил;canceled/failed— не оплачен;refunded— если делаете возвраты из кассы.
Страница success после возврата с платёжки — ещё не оплата. Пользователь мог закрыть вкладку. Истина — webhook + проверка подписи. Повтор вебхука не должен плодить второй заказ или второй списанный остаток.
Промокоды и итог
Промокод применяется до оплаты, скидка видна в итоге и в админке. Просроченный код — понятная ошибка, не «500». Подробности — промокоды. Нельзя дать применить код после создания платежа на старую сумму — либо пересоздавайте платёж, либо блокируйте смену корзины после перехода к оплате.
Остатки на checkout
Между «положил в корзину» и «оплатил» товар могут купить. Варианты:
- Мягко: проверять остаток при создании заказа и при оплате.
- Жёстко: резерв на N минут.
Для вариантов размера/цвета проверка идёт по SKU — варианты. Сообщение «размер закончился» лучше, чем оплата и ручной возврат.
Типичные дыры в UI
- Кнопка «оплатить» активна при пустом телефоне.
- Доставка курьером без адреса всё равно проходит.
- На мобиле поле адреса перекрыто кнопкой «далее».
- После ошибки оплаты корзина пустая — пользователь ушёл навсегда.
- Гость и залогиненный пользователь имеют разные корзины без мержа.
Гоняйте сценарий в режиме инкогнито и в обычном Chrome под учётом — оба.
Связка с каталогом и ecommerce
Каталог — каталог, свой хостинг — ecommerce, продукт целиком — магазин PHP. Checkout и оплата — горловина воронки. Сделайте заказ неотрицаемым фактом в админке, статусы оплаты честными, доставку считаемой. Тогда можно звать трафик; иначе вы рекламируете красивую корзину, которая теряет деньги на последнем шаге.
Поля формы: что выкинуть
Каждое лишнее поле режет конверсию. На старте мне достаточно телефона, имени, способа получения и комментария. «Отчество», «компания», «ИНН» — только если B2B и без этого не выставить счёт. Индекс можно угадывать по городу позже; обязательный индекс с маской, которая не принимает село, бесит. Согласие на обработку данных — ссылкой на страницу, не простынёй в середине формы.
- Телефон нормализую к одному формату в БД.
- Email — если нужен чек, иначе можно отложить.
- Адрес — только для методов, где он реально нужен.
После нажатия «оформить»
Пользователь должен увидеть номер заказа и понятный следующий шаг: «ждите звонка», «переходим к оплате», «вот реквизиты». Кнопка «вернуться в каталог» — вторична. В админке заказ появляется до редиректа на оплату; если оплата оборвалась, менеджер всё равно видит попытку и может помочь. Логи ошибок checkout (валидация, остатки, платёжка) пишу отдельно — без этого «у меня не нажимается» не воспроизвести.
Нагрузочный тест на старте не обязателен. Обязателен прогон с плохого мобильного интернета и с включённым блокировщиком скриптов: форма не должна зависеть от одного стороннего виджета без фолбэка. Checkout — место, где умирает маркетинг; держите его тонким и проверяемым.
Коммуникация после заказа
Сразу после оформления покупатель тревожится. Короткий экран «заказ №… принят» + SMS/email, когда почта заработает, снижают повторные звонки «а вы получили?». Если оплата онлайн — честно пишите «ждём оплату» и не обещайте сборку до paid. Если оплата при получении — напишите, кто свяжется и в какой срок. Checkout и оплата в скрипте магазина заканчиваются не кнопкой, а понятным ожиданием.
Раз в спринт смотрите воронку: сколько дошло до корзины, сколько до оформления, сколько до paid. Провал на последнем шаге почти всегда поля, доставка или платёжка — не «мало баннеров на главной». Чините горловину, прежде чем увеличивать рекламный бюджет. Так скрипт начинает зарабатывать, а не только красиво показывать каталог.
Гость против аккаунта
На старте я часто оставляю гостевой checkout без обязательной регистрации: регистрация в середине покупки режет конверсию. Аккаунт предлагаю после заказа («сохранить для повтора»). Если регистрация обязательна по бизнесу — сделайте её в одну ступень с паролем или magic-link, без капчи на каждом шаге. Checkout оплата в скрипте магазина должна закончиться заказом, а не квестом «вспомните пароль».
Корзину гостя переносите в аккаунт при логине осознанно: объединение позиций с разными вариантами SKU проверьте на дублях. Пустая корзина после «войти» — одна из самых частых жалоб. Поймайте её на приёмке в двух браузерах. Тогда оплата и доставка получают шанс, а не сражаются с багом сессии.
Перед рекламой пройдите checkout на телефоне с доставкой и тестовой оплатой: суммы в письме, админке и кассе должны совпасть. Назначьте, кто каждый день смотрит заказы «ожидает оплаты» старше двух часов — иначе висяки копятся, а покупатель уже пишет в поддержку.
Частые вопросы
Checkout оплата в скрипте магазина?
Заказ должен сохраниться даже если письмо покупателю ещё не уходит.
Сколько времени занимает «Checkout и оплата в скрипте магазина»?
Ориентир по тексту мануала — около 5 мин. На практике зависит от хостинга и подготовки базы.
Нужен ли отдельный сервер?
Для большинства скриптов достаточно хостинга или VDS с PHP и MySQL. Подбор сервера — в разделе VDS и требованиях к PHP/MySQL.
Готовый магазин без wordpress?
Разбор рядом в мануале по этому запросу. готовый магазин без wordpress
Как настроить корзину и оплату в скрипте магазина?
Разбор рядом в мануале по этому запросу. как настроить корзину и оплату в скрипте магазина