FAQ
Оплата и статус заказа
Заказ не переходит в «оплачен»
Идите по списку сверху вниз:
- Callback URL в кабинете совпадает с
https://ваш-домен.ru/assets/components/mspyandexpay/webhook.php. - Сайт открывается по HTTPS снаружи. С
localhostwebhook не придёт. - Заполнены
mspyandexpay_merchant_idиmspyandexpay_api_keyиз того же контура кабинета, что сейчас включён (тест или бой). mspyandexpay_environmentсовпадает с переключателем Тестовые данные: включён →sandbox, выключен →production.- В MODX задан верный
ms3_status_paid. - Включите
mspyandexpay_debug, повторите оплату и откройте error log ([mspYandexPay]).
Статус заказа в магазине ставьте по webhook, а не только по возврату браузера на success URL. Покупатель мог закрыть вкладку сразу после оплаты. Webhook всё равно должен дойти.
Статус AUTHORIZED, заказ «не оплачен»
Для двухстадийной схемы это ожидаемо: деньги на холде, списания ещё нет. Нужен capture через connector или успешный webhook CAPTURE / CAPTURED. См. Интеграция, двухстадийная.
Покупатель вернулся на сайт, статус ещё старый
Webhook мог опоздать или не дойти. Проверьте Callback URL, совпадение среды с JWKS и лог. Повтор того же события компонент принимает с HTTP 200 и статус второй раз не меняет.
Webhook
Webhook 401
Чаще всего перепутаны контуры: sandbox-ключи при production или наоборот. Сверьте:
mspyandexpay_environment- Merchant ID и API Key из того же положения переключателя Тестовые данные
- время на сервере (в JWT есть
exp)
Webhook не приходит
- В кабинете URL указан для текущего контура. У теста и боя поля разные.
- Webhook уходит только на Callback вашего Merchant ID. Demo-ключи из примеров документации Yandex ваш сайт не уведомляют.
- WAF или фаервол не режет POST на
webhook.php.
Sandbox и production
Чем sandbox отличается от production в MODX
| Sandbox | Production | |
|---|---|---|
mspyandexpay_environment | sandbox (и любое значение кроме production) | строго production |
| API Key | = Merchant ID | выпущенный ключ Merchant API |
paymentUrl | с префиксом sandbox (sandbox.pay.ya.ru) | без sandbox |
| Карты | тестовые из формы после входа Яндекс ID | реальные, деньги списываются |
| Base URL | sandbox.pay.yandex.ru | pay.yandex.ru |
Таблицу тестовых сумм и чеклист сценариев смотрите в Быстрый старт, шаг 6.
Ошибки авторизации API
production+ ключ из sandbox → отказ в авторизации.sandbox+ боевой ключ → запросы всё равно идут наsandbox.pay.yandex.ru.- В бою нельзя подставлять Merchant ID вместо выпущенного API Key. Пустой
api_keyкомпонент подставит из Merchant ID. Этого хватает только для sandbox.
Меняйте environment, merchant_id и api_key одной связкой. Не оставляйте боевой environment с тестовым Merchant ID.
Смешал тестовые и боевые данные
В кабинете у sandbox и production разные Merchant ID, ключи и Callback. Открывайте нужный контур переключателем Тестовые данные и копируйте значения только из него. Иначе webhook 401 и «тихие» оплаты без смены статуса в MS3 почти гарантированы.
Потерял боевой API Key
Повторно открыть уже выпущенный ключ нельзя. Выпустите новый: Ключ Merchant API → Выпустить еще ключ. На магазин одновременно не больше трёх ключей. Новый ключ сразу запишите в mspyandexpay_api_key.
Эмуляции 10001 / 10002 не срабатывают
В документации Yandex бывает пометка, что эмуляции временно недоступны. Смотрите UI формы и ответ GET /orders/{orderId}. На успех в sandbox всё равно ориентируйтесь на webhook и статус заказа в MiniShop3.
Можно ли переключить production деплоем?
Нет. Ставьте production вручную в системных настройках, когда Callback, HTTPS и ключи уже боевые. Не зашивайте production в код и не переключайте среду скриптом «на всякий случай».
Конфигурация
«Не настроен» / нет paymentUrl
Пустые или чужие контуру mspyandexpay_merchant_id / mspyandexpay_api_key. Включите debug и смотрите ответ API в логе.
Способ оплаты не виден на чекауте
msPaymentактивен.- Способ привязан к доставке (
msDeliveryMember). Резолвер линкует при установке и обновлении. Иначе отметьте вручную в MiniShop3 → Доставки. - Очистите кэш MODX.
Плагин mspyandexpay_bootstrap отключён
Классы MspYandexPay\ не загрузятся. Включите плагин на OnMODXInit.
QR «отключена»
Включите mspyandexpay_qr_enabled и активируйте способ «Яндекс Пэй QR».
Повторная оплата
Каждый клик создаёт новый заказ в Yandex?
Повторный send() при существующей транзакции переиспользует сохранённый payment_url. Если в кабинете Yandex всё же копятся дубликаты, проверьте запись в msp_yandex_pay_transactions и debug-лог: не уходит ли каждый раз новый create без reuse.
Для кнопки в личном кабинете вызывайте mspYandexPayButton / connector по клику, не при каждом рендере списка уже оплаченных заказов.
Логи
Префикс: [mspYandexPay] в error log MODX. API key маскируется. На время отладки включите mspyandexpay_debug, после выхода в бой лучше выключить.
