Сообщение «Ошибка оплаты» — это симптом, а не диагноз. В 90% случаев причина не в самом платеже, а в том, что заказ не сменил статус после возврата покупателя из банка. Разберём, где в 1С-Битрикс искать факты и как отделить проблему покупателя от проблемы настройки.
Что на самом деле произошло
Прежде чем лезть в код, нужно понять, на каком этапе оборвалась цепочка. Оплата в 1С-Битрикс — это не одна операция, а три независимых события: покупатель ушёл на страницу банка, банк списал деньги и вернул человека на сайт, и отдельно банк прислал серверное уведомление (callback), по которому заказ помечается оплаченным.
- Деньги списаны, заказ не оплачен — почти всегда не дошёл или не обработался callback. Самый частый случай.
- Покупатель видит «ошибка» сразу — проблема на стороне банка: отклонён по лимитам, антифрод, неверный CVC.
- Ошибка при переходе на оплату — неверные ключи/пароли магазина, тестовый режим, некорректная сумма или валюта.
Проверяем статус заказа и оплаты
Идём в Магазин → Заказы, открываем проблемный заказ. Смотрим на два независимых поля: статус заказа и флаг оплаты по каждой платёжной транзакции (вкладка Оплата). Если деньги в банке есть, а в Битрикс стоит «Не оплачен» — обработчик не отработал возврат.
В таблице b_sale_order_payment у платежа есть поле PAID (Y/N) и DATE_PAID. Полезно свериться и с журналом изменений заказа — Битрикс пишет туда факт получения callback и смену статуса. Если в журнале нет записи о платёжной системе после времени оплаты — уведомление до сайта не дошло.
| Что видим | Вероятная причина |
|---|---|
| Деньги списаны, PAID=N | Callback не дошёл или упал с ошибкой |
| Заказ отменён, деньги списаны | Двойное списание / повторная попытка |
| PAID=Y, но клиент видел ошибку | Сбой только на редиректе, оплата прошла |
Как устроен callback и где он ломается
После оплаты банк дёргает URL уведомления на вашем сайте — обычно это /bitrix/tools/sale_ps_result.php либо специальный обработчик модуля платёжной системы. Именно этот запрос помечает заказ оплаченным независимо от того, вернулся покупатель на сайт или закрыл вкладку.
Типовые причины, по которым callback не срабатывает:
- Неверный URL уведомления в личном кабинете банка — указан старый домен, http вместо https или лишний слэш.
- Запрос блокируется — WAF, «Проактивная защита» Битрикс, ограничение по IP на стороне хостинга, или закрытый доступ к
/bitrix/tools/. - Не сходится подпись — секретный ключ/пароль на сайте и в кабинете банка разные, поэтому обработчик отклоняет уведомление как поддельное.
- Ошибка суммы или валюты — банк прислал сумму, отличную от суммы заказа (комиссия, копейки), и проверка не проходит.
Где искать логи
Диагностика без логов — это гадание. В 1С-Битрикс есть несколько мест, куда стекаются следы платежа.
- Отладка платёжной системы. В настройках обработчика (
Магазин → Настройки → Платёжные системы) у многих модулей есть флаг «Отладочный режим» / «Логировать» — включите его, и запросы/ответы банка начнут писаться в файл. - Личный кабинет банка. ЮKassa, Тинькофф, CloudPayments показывают историю уведомлений и код HTTP-ответа вашего сайта. Ответ не
200— сайт отверг callback. - Логи веб-сервера. В
access_logдолжен быть POST наsale_ps_result.phpв момент оплаты; его отсутствие означает, что запрос до сайта не дошёл. Вerror_logищите PHP-ошибки обработчика. - Журнал событий Битрикс.
Настройки → Инструменты → Журнал событий— сюда попадают ошибки ядра, в том числе исключения при обработке платежа.
Если модуль не пишет лог, добавьте временное логирование в файле обработчика через AddMessage2Log() — так вы увидите массив $_REQUEST, который реально прислал банк.
Типовые ошибки и их коды
Разберём частые сообщения, которые видит покупатель или которые приходят в ответе банка, и их реальную причину в контексте магазина на Битрикс.
| Симптом | Причина и что делать |
|---|---|
| «Магазин не найден» / invalid shop | Неверный ShopID/идентификатор магазина или включён тестовый режим при боевых ключах. |
| Неверная подпись / signature | Секретный ключ на сайте ≠ ключу в кабинете. Пересоздайте и синхронизируйте. |
| Отклонено банком покупателя | Не ваша зона: лимиты карты, 3-D Secure, недостаток средств. Настройки менять не нужно. |
| Сумма заказа не совпадает | Комиссия платёжной системы или пересчёт скидки после оформления. Проверьте расчёт итога. |
| Заказ уже оплачен | Повторный callback на оплаченный заказ — обработчик должен это игнорировать, а не падать. |
Отдельно держите в голове фискализацию: если подключён онлайн-чек (54-ФЗ), заказ может оплатиться, но «зависнуть» из-за ошибки пробития чека. Это отдельная цепочка, её проверяют в кабинете ОФД.
Как воспроизвести и проверить
Чтобы не экспериментировать на живых деньгах, воспроизведите сценарий в контролируемых условиях.
- Включите тестовый режим платёжной системы и оформите заказ тестовой картой из документации банка.
- Проследите весь путь: оформление → переход на банк → возврат → смена статуса. На каждом шаге сверяйтесь с логом.
- Отдельно проверьте callback: многие кабинеты дают кнопку «отправить тестовое уведомление» на ваш URL — так вы убедитесь, что сайт принимает POST и отвечает
200. - Убедитесь, что после успеха заказ помечается оплаченным и уходит письмо/статус, а после отмены не остаётся «висящих» платежей.
Итог
Диагностика ошибки оплаты в 1С-Битрикс — это движение по фактам, а не по догадкам. Сначала выясняем, списаны ли деньги, затем сверяем статус заказа и флаг PAID, дальше смотрим, дошёл ли callback и с каким кодом ответил сайт, и только потом лезем в подпись, ключи и сумму. Большинство «ошибок оплаты» на деле — необработанное серверное уведомление из-за неверного URL, блокировки защитой или рассинхрона ключей.
Если платежи срываются регулярно, теряются деньги и заказы, а логи не дают однозначной картины — мы поднимем полный трейс платежа, проверим обработчик и настройки на стороне банка и закроем проблему на уровне интеграции, а не разовой заплаткой.
Частые вопросы
Деньги с покупателя списались, а заказ «не оплачен». Что это?
Почти всегда до сайта не дошло или упало серверное уведомление (callback) от банка. Проверьте историю уведомлений в кабинете платёжной системы и код ответа вашего сайта — если он не 200, обработчик отверг запрос.
Где в 1С-Битрикс включить логирование платежей?
В настройках нужного обработчика в разделе Магазин → Настройки → Платёжные системы у многих модулей есть флаг отладочного режима. Дополнительно смотрите журнал событий Битрикс и access_log/error_log веб-сервера.
Какой URL банк использует для уведомления об оплате?
Как правило /bitrix/tools/sale_ps_result.php или отдельный URL обработчика конкретной платёжной системы. Именно этот адрес указывается в личном кабинете банка и должен быть доступен по https без блокировок.
Ошибка «неверная подпись» — в чём причина?
Секретный ключ или пароль магазина на сайте не совпадает с тем, что указан в кабинете банка. Пересоздайте ключ и синхронизируйте значения на обеих сторонах, следя за лишними пробелами при копировании.
Callback блокируется защитой сайта — как проверить?
Посмотрите в access_log, приходит ли POST от банка в момент оплаты. Если запроса нет или он получает 403, причина в WAF, проактивной защите Битрикс, ограничении по IP или прокси/Cloudflare перед сайтом.
Покупатель видел ошибку, но деньги списались и заказ оплачен. Это баг?
Скорее сбой только на этапе редиректа обратно на сайт: покупатель не увидел страницу успеха, но серверное уведомление прошло корректно. Заказ оплачен, вмешательства в настройки не требуется.
Как безопасно протестировать оплату?
Включите тестовый режим платёжной системы и используйте тестовые карты из документации банка. Пройдите весь путь заказа и отдельно отправьте тестовое уведомление на URL callback, если кабинет это позволяет.
Заказ оплачен, но не пробился чек. Где искать?
Это отдельная цепочка фискализации по 54-ФЗ. Оплата и пробитие чека — разные операции, поэтому проверяйте статус чека в личном кабинете ОФД, а не только в платёжной системе.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.