FAQ
Оплата и статус заказа
Заказ не переходит в «оплачен»
Проверьте по порядку:
- Notification URL в кабинете T-Bank совпадает с
https://ваш-домен.ru/assets/components/msptbank/webhook.php. - Сайт доступен по HTTPS снаружи (не только localhost).
- Фаервол и WAF не блокируют POST от IP T-Bank.
- Заполнены
msptbank_terminal_keyиmsptbank_passwordдля того же терминала, что в кабинете. - В MODX верный
ms3_status_paid(часто ID3). - Включите
msptbank_debugи посмотрите лог MODX после тестовой оплаты.
Источник истины: webhook, а не только возврат браузера на SuccessURL.
Покупатель вернулся на сайт, но статус «не оплачен»
Webhook мог опоздать или не дойти. TbankPayment::receive() при наличии PaymentId в URL вызывает GetState как fallback. Если параметра нет, дождитесь webhook или проверьте Notification URL.
Сумма в webhook не совпадает
WebhookHandler отклоняет уведомление, если Amount ≠ order.cost в копейках. Проверьте, что стоимость заказа в MS3 не менялась после Init.
Тестовый контур
Ошибки rest-api-test.tinkoff.ru
msptbank_test_mode= «Да».- TerminalKey без приставки DEMO (по инструкции T-Bank для тестовой среды).
- IP сервера добавлен в белый список через чат Т-Бизнес.
- Платите только тестовыми картами, не боевой картой.
Боевой терминал в test_mode
Не смешивайте контуры. Для msptbank_test_mode = «Да» нужны ключи и whitelist тестового контура. Для боевых платежей выключите test_mode и используйте рабочий терминал.
Конфигурация
«Payment is not configured»
Пустые msptbank_terminal_key или msptbank_password. Заполните оба в Системные настройки → msptbank.
Способ оплаты TBank не появился
Переустановите пакет или создайте msPayment вручную с классом MspTBank\Payment\TbankPayment. Очистите кэш MODX.
Плагин msptbank_bootstrap отключён
Классы MspTBank\ не загрузятся. Включите плагин на событии OnMODXInit.
Повторная оплата
Каждый клик «Оплатить» создаёт новый платёж
Так работает текущая версия: каждый вызов send() делает новый Init. До webhook tbank_payment_id в заказе нет.
Для оплаты из ЛК:
- показывайте кнопку только в статусах «к оплате»
- вызывайте
send()по клику, не при рендере списка - при необходимости храните pending
PaymentIdв своём сниппете.
54-ФЗ и чеки
Как включить передачу Receipt?
- Подключите онлайн-кассу в терминале T-Bank.
- Оставьте
msptbank_send_receipt= «Да». - Проверьте
msptbank_taxationиmsptbank_vat. - Убедитесь, что у заказа есть Email или телефон покупателя.
Компонент добавляет Receipt в Init, Confirm для двухстадийной схемы и Refund.
Что будет, если у заказа нет Email и телефона?
Компонент пропустит чек, запишет warning в лог и отправит платёж без Receipt. Оплата не блокируется, потому что T-Bank требует Email или Phone для Receipt.
Нужно ли отключать msptbank_send_receipt?
Да, если в терминале T-Bank не подключена онлайн-касса или магазин пока не готов передавать чеки. В этом случае установите msptbank_send_receipt = «Нет».
Почему платёж не отправляется с ошибкой Receipt items total mismatch?
Сумма строк Receipt.Items не совпала с суммой платежа или возврата. Компонент останавливает запрос, чтобы не отправить некорректный чек. Проверьте состав заказа, стоимость доставки, скидки и итоговую сумму.
Какой PaymentMethod передаётся в чеке?
Для обычной оплаты в Init используется full_payment. При двухстадийной схеме Init отправляет full_prepayment, а Confirm после AUTHORIZED отправляет full_payment. Для Refund используется full_payment.
Отладка
Где смотреть логи
Включите msptbank_debug = «Да». Сообщения с префиксом компонента попадут в лог MODX (core/cache/logs/ или путь из конфигурации). Password терминала в лог не пишется.
Webhook возвращает ошибку
При неверном Token или несовпадении суммы обработчик логирует предупреждение и не меняет заказ. Сверьте Password терминала и тело уведомления в debug-логе.
Общие
Работает ли с MiniShop2?
Нет. Только MiniShop3 и MODX 3.
Какие PHP-расширения нужны?
json, curl (для HTTP к API T-Bank).
Нужен ли composer на сервере?
Нет для установки transport-пакета. Зависимости поставляются вместе с компонентом.
