Как сайт узнаёт, что заказ оплачен
Когда покупатель платит, у сайта и платёжной системы есть два разных канала связи, и их часто путают:
- Возврат покупателя на сайт. После оплаты браузер перенаправляет человека на страницу «Спасибо за заказ». Этот переход нужен только для того, чтобы показать страницу. Покупатель может закрыть вкладку, потерять связь или вернуться через час — и тогда перехода не будет вовсе.
- Уведомление от платёжной системы на сервер сайта. Платёжная система сама отправляет запрос на заранее указанный адрес сайта: «платёж по заказу такому-то прошёл». В разных системах это называется по-разному — HTTP-уведомления, вебхук, Result URL, Notification URL, — но смысл один.
Отмечать заказ оплаченным нужно только по второму каналу, после проверки подлинности уведомления. Если сайт меняет статус по возврату покупателя, часть заказов неизбежно «зависнет», а подделать такой возврат проще простого.
Короткий вывод: если оплата прошла, а статус не изменился, почти всегда сайт не получил уведомление, получил, но отклонил, или принял, но не смог обработать.
Частые причины
Адрес уведомлений не указан или устарел
Адрес для уведомлений прописывают в личном кабинете платёжной системы или в настройках модуля оплаты. После переезда сайта на новый домен, перехода на HTTPS или смены модуля про него забывают — и уведомления уходят в никуда.
Сервер отвечает ошибкой или перенаправлением
Платёжная система ждёт от сайта ответа «принято». Если вместо этого приходит перенаправление (например, с http на https или с адреса без слеша на адрес со слешем), запрет от защиты сервера, пароль на тестовом сайте или ошибка сервера, уведомление считается недоставленным. Система повторяет попытки, а потом прекращает.
Не проходит проверка подписи
Уведомления подписываются секретным ключом магазина, и сайт проверяет подпись. Если ключ в личном кабинете перевыпустили, а на сайте остался старый, или на рабочем сайте стоят тестовые настройки, сайт отклонит настоящее уведомление как поддельное.
Сумма платежа не совпадает с суммой заказа
Модуль оплаты сравнивает сумму. Если заказ округляется до рублей, а стоимость доставки приходит с копейками, или скидка применилась уже после создания платежа, модуль может посчитать оплату неполной и не менять статус.
Платёж двухстадийный и ждёт подтверждения
Если в платёжной системе включены двухстадийные платежи, деньги сначала только блокируются на карте. Чтобы платёж завершился, магазин должен подтвердить его — вручную или автоматически. Если этого не происходит, платёж висит в ожидании и может быть отменён по истечении срока.
Уведомление принято, но обработчик падает
После обновления CMS, модуля или версии PHP код, который обрабатывает уведомление, может завершаться с ошибкой. Платёжная система видит ответ сервера, а заказ остаётся прежним. Причина видна в журнале ошибок сайта.
Статус меняется, но дальше ничего не происходит
Бывает, что оплата отмечается, но не уходит письмо покупателю, заказ не передаётся на склад или в CRM, не формируется чек. Это уже следующее звено цепочки — его настраивают и проверяют отдельно. Чек по 54-ФЗ обычно формируется через свою связку с онлайн-кассой, и сбой в ней не всегда виден в статусе заказа.
Что проверить самостоятельно
- Найдите в личном кабинете платёжной системы журнал уведомлений по проблемному платежу: отправлялось ли уведомление и какой код ответа вернул сайт.
- Сверьте адрес уведомлений с текущим адресом сайта: домен, https, путь к обработчику.
- Проверьте, что на сайте выбран боевой режим и актуальные идентификатор магазина и секретный ключ.
- Сравните сумму заказа и сумму платежа до копейки.
- Посмотрите журнал ошибок сайта за время оплаты.
- Проведите тестовый платёж в тестовом режиме платёжной системы и пройдите путь до конца: статус, письмо, передача дальше.
Пока причина не найдена, сверяйте оплаченные заказы с выпиской или списком платежей в личном кабинете и меняйте статусы вручную — так покупатели не останутся без заказа.
Как должно работать
- Статус меняется только по проверенному уведомлению платёжной системы, а не по возврату покупателя.
- Повторное уведомление по тому же платежу не создаёт второй оплаты и не отправляет заказ на склад дважды.
- Сайт быстро отвечает платёжной системе «принято», а тяжёлую работу — письма, передачу в CRM — делает после ответа.
- Ошибки обработки записываются в журнал, а не теряются.
- Каждый этап — корзина, оформление, платёж, подтверждение, статус — после изменений проверяется на тестовом заказе.
Частые вопросы
Почему проблема только у части заказов?
Обычно дело в особенностях этих заказов: другая служба доставки с копейками в тарифе, скидка или промокод, другой способ оплаты, оплата спустя долгое время после оформления. Сравните зависшие заказы с обычными — общий признак часто подсказывает причину.
Платёжная система пишет, что уведомление доставлено. Значит, проблема у них?
Скорее нет: значит, сайт ответил, но мог не обработать уведомление — отклонить подпись, не сопоставить сумму или упасть с ошибкой после ответа. Ищите причину в модуле оплаты и журнале ошибок сайта.
Можно просто менять статус, когда покупатель вернулся на сайт?
Нельзя. Возврат на сайт происходит не всегда, а сама ссылка возврата легко подделывается. Источником правды должно быть подписанное уведомление платёжной системы.