Skip to content
mspYandexPay
Оплата через Яндекс Пэй для MiniShop3: Merchant API, webhook JWT, Сплит, двухстадийная схема, QR, возвраты
  1. Компоненты
  2. mspYandexPay
  3. FAQ

FAQ

Оплата и статус заказа

Заказ не переходит в «оплачен»

Идите по списку сверху вниз:

  1. Callback URL в кабинете совпадает с https://ваш-домен.ru/assets/components/mspyandexpay/webhook.php.
  2. Сайт открывается по HTTPS снаружи. С localhost webhook не придёт.
  3. Заполнены mspyandexpay_merchant_id и mspyandexpay_api_key из того же контура кабинета, что сейчас включён (тест или бой).
  4. mspyandexpay_environment совпадает с переключателем Тестовые данные: включён → sandbox, выключен → production.
  5. В MODX задан верный ms3_status_paid.
  6. Включите 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 не приходит

  1. В кабинете URL указан для текущего контура. У теста и боя поля разные.
  2. Webhook уходит только на Callback вашего Merchant ID. Demo-ключи из примеров документации Yandex ваш сайт не уведомляют.
  3. WAF или фаервол не режет POST на webhook.php.

Sandbox и production

Чем sandbox отличается от production в MODX

SandboxProduction
mspyandexpay_environmentsandbox (и любое значение кроме production)строго production
API Key= Merchant IDвыпущенный ключ Merchant API
paymentUrlс префиксом sandbox (sandbox.pay.ya.ru)без sandbox
Картытестовые из формы после входа Яндекс IDреальные, деньги списываются
Base URLsandbox.pay.yandex.rupay.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 в логе.

Способ оплаты не виден на чекауте

  1. msPayment активен.
  2. Способ привязан к доставке (msDeliveryMember). Резолвер линкует при установке и обновлении. Иначе отметьте вручную в MiniShop3 → Доставки.
  3. Очистите кэш 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, после выхода в бой лучше выключить.

Что дальше