Содержание
Причин, по которым не проходит оплата на сайте, может быть множество — от банальных ошибок в реквизитах карты до технических сбоев платёжного шлюза или блокировок со стороны банка. Чаще всего проблема лежит на стороне покупателя (неверный CVV-код, недостаточно средств), но могут быть и проблемы с интеграцией: устаревший SSL-сертификат, неправильные настройки мерчанта (платёжного агрегатора), конфликт модуля оплаты с CMS или хостингом. Для выявления точной причины нужно смотреть логи платёжного шлюза, инструменты разработчика в браузере и настройки вашего сайта (например, если вы используете Joomla — проверить компонент оплаты).
Частые причины ошибок оплаты (со стороны покупателя)
Большинство проблем решаются простыми действиями со стороны клиента. Прежде чем винить сайт, проверьте эти моменты.
- Недостаточно средств на карте или исчерпан лимит — самая частая причина. Клиент может не знать о дневном лимите или о том, что карта заблокирована.
- Неверно введены реквизиты карты: номер, срок действия (указан месяц или год неправильно), CVV-код (3 цифры на обороте).
- Карта не поддерживает 3D Secure — банк требует подтверждение кодом из SMS, но клиент его не получает (проблемы с сотовым оператором) или не успевает ввести.
- Карта не поддерживает оплату в интернете (например, некоторые дебетовые карты МИР имеют ограничения).
- Банк заблокировал операцию как подозрительную — особенно часто происходит с картами зарубежных банков или при первой оплате на новом сайте.
- Истёк срок действия карты — клиент может этого не заметить.
Рекомендация для владельца сайта: добавьте на страницу оплаты сообщения с возможными ошибками (например, «Проверьте CVV-код» или «Недостаточно средств»). Улучшенные платёжные агрегаторы возвращают такие коды, но их нужно корректно отображать.
Технические проблемы на стороне сайта или сервера
Если ошибка повторяется у разных покупателей или при тестовых платежах, проблема, скорее всего, техническая.
1. Отсутствие или неправильный SSL-сертификат
Платёжные шлюзы требуют, чтобы страница оплаты была открыта по протоколу HTTPS. Если SSL-сертификат истёк, недействителен или установлен только на главную, но не на страницу корзины, оплата будет отклонена. Проверьте, что ваш сайт открывается с «замочком» и нет смешанного контента (http-ресурсы на https-странице).
2. Неправильные настройки платёжного агрегатора (мерчанта)
При регистрации в системе (ЮKassa, Tinkoff Pay, Robokassa) вы получаете Secret Key, Shop ID, тестовые/боевые токены. Ошибки на этом этапе:
- Вы забыли переключить шлюз из тестового режима в боевой (остались ключи от sandbox).
- Не совпадает сумма в заказе и сумма, переданная агрегатору (например, из-за округления или неверной валюты).
- Не указан return_url или notification_url (URL, куда агрегатор отправляет подтверждение оплаты).
- Неверно настроена подпись (вычисляется алгоритмом MD5 или SHA-256, а вы указали не тот).
3. Конфликт модуля оплаты с CMS (Joomla, WordPress)
Если вы используете CMS, платёжный модуль мог:
- Устареть (не обновляли полгода-год, а API платёжной системы изменилось).
- Конфликтовать с другими расширениями (например, с компонентом SEO или кэширования).
- Иметь неправильные права доступа к файлам (не может записать лог или изменить статус заказа).
Проверьте последние обновления вашего модуля оплаты в каталоге расширений (например, для Joomla — VirtueMart, HikaShop или плагин для конкретного агрегатора).
4. Проблемы с хостингом (например, hostpro)
Хостинг может блокировать исходящие запросы к API платёжного шлюза (запрещён CURL, отключены функции file_get_contents для удалённых URL). Также могут не работать cron-задачи (если оплата обрабатывается асинхронно). Обратитесь в техподдержку хостинга с вопросом о разрешении внешних запросов.
| Группа проблем | Типичные ошибки | Кто исправляет |
|---|---|---|
| Сторона покупателя | Недостаточно средств, неверный CVV, блокировка банка | Покупатель (связаться с банком, проверить реквизиты) |
| Сайт (настройки агрегатора) | Тестовый режим, неверные ключи, неправильный return_url | Владелец сайта / администратор |
| Хостинг / сервер | Блокировка CURL, устаревший SSL, нет outgoing connections | Хостинг-провайдер (hostpro и др.) |
Как диагностировать проблему (алгоритм для владельца сайта)
Системный подход сэкономит часы нервов.
- Повторите ошибку сами. Попробуйте оплатить товар с тестовой карты (у каждого агрегатора есть тестовые номера). Если в тестовом режиме всё работает, а в боевом — нет, проблема в настройках мерчанта или в банке продавца (не открыт эквайринг).
- Посмотрите логи платёжного шлюза. В личном кабинете агрегатора (ЮKassa, Tinkoff, Robokassa) есть раздел «История платежей» или «Логи ошибок». Там будет код ошибки: например, «invalid amount», «merchant not found», «signature mismatch».
- Включите отладку (debug) модуля оплаты (если такая опция есть). Например, в плагине Joomla можно включить запись лога в файл. Вы увидите, какие данные отправляются на шлюз и какой ответ приходит.
- Проверьте права на callback URL. Агрегатор должен иметь возможность отправлять POST-запрос на ваш сайт. Убедитесь, что этот URL доступен из интернета и не требует авторизации (например, не защищён паролем). Временно отключите плагины безопасности (mod_security), которые могут блокировать запрос.
- Обновите CMS и модуль оплаты до последних версий. Устаревшие версии могут использовать устаревшие API.
- Проверьте лог сервера (Apache/Nginx). Может оказаться, что PHP не хватает памяти (memory_limit) или скрипт падает с фатальной ошибкой.
Частые ошибки при интеграции с конкретными платформами
- Для модулей в Joomla (VirtueMart, HikaShop): не забывайте сохранять «Способ оплаты» в настройках заказа, иначе модуль не вызовется. Иногда помогает пересохранить настройки плагина (даже если ничего не меняли).
- Для Tilda / SitePro.by (конструкторы): часто забывают добавить платёжную систему в «Настройки сайта» → «Приём платежей». Также нужно проверить, что в карточке товара стоит цена больше 0 и валюта указана корректно.
- Для WordPress + WooCommerce: популярная ошибка — конфликт с темой или плагином кэширования (W3 Total Cache). Отключите кэш на страницах корзины и оформления заказа.
Что делать, если оплата проходит, но статус заказа не меняется
Это отдельная проблема. Деньги с клиента списались, но ваш сайт не обновил статус на «Оплачен». Чаще всего проблема в недоступности notification_url (webhook). Клиент перенаправляется на страницу успеха, но сервер не получает асинхронного уведомления. Решения:
- Проверьте, что в настройках агрегатора указан правильный URL (обычно вида
https://site.ru/ipnили.../payment/callback). - Убедитесь, что ваш сайт доступен из интернета по этому URL (попробуйте открыть его в браузере — возможно, он выдаёт ошибку 500).
- Временно отключите HTTPS и проверьте по HTTP (некоторые агрегаторы некорректно работают с редиректами).
Если проблема повторяется, свяжитесь с технической поддержкой вашего платёжного агрегатора — они видят все запросы и могут сказать, успешно ли доставлено уведомление.
Резюме от эксперта
Причины, почему не проходит оплата на сайте, делятся на три уровня: ошибки покупателя, ошибки интеграции и ошибки хостинга. Начните диагностику с проверки платежа тестовой картой — это сразу покажет, работает ли техническая связь. Затем смотрите логи агрегатора и модуля оплаты. Не игнорируйте предупреждения о несовместимости версий PHP и плагинов. И главное: никогда не храните данные карт в своей базе (даже временно) — это нарушает стандарт PCI DSS. Доверьте обработку платежей профессиональным агрегаторам, а на своих страницах лишь отображайте форму.
