К содержимому

Sandbox-ключ в production отвергается намеренно, а выглядит как поломка

Те же ключи: в тесте авторизация проходит, на стенде с APP_ENV=production — отвергается.

phpapi

Стенд для приёмки. Ключи от песочницы провайдера — те же, что работали локально. Авторизация не проходит. Ключи перепроверены посимвольно, время на сервере верное, исходящие запросы уходят.

Причина

APP_ENV=production — и приложение (или SDK провайдера) переключается на боевые эндпоинты и боевую проверку учётных данных. Sandbox-ключ там невалиден по определению: он и не должен работать против прода.

То есть система ведёт себя правильно. Ломается ожидание: «стенд — значит почти прод, поставим production, чтобы было ближе к бою».

Решение

Стенд, работающий с песочницей провайдера, — это не production:

APP_ENV=staging

Соответствие фиксируется явно, в одном месте, и лучше в README проекта:

ОкружениеAPP_ENVКлючи провайдераКуда ходит
локальноlocalsandboxпесочница
стенд приёмкиstagingsandboxпесочница
продproductionбоевыебоевые эндпоинты

Пара «окружение ↔ ключи» должна быть жёсткой. Как только на одном стенде оказывается production-режим с sandbox-ключами, час уходит на отладку того, что работает правильно.

Что здесь на самом деле поучительно

Это класс ошибок «система защищается, а мы читаем это как сбой». Отличительный признак — отказ консистентный: не плавает, не зависит от нагрузки, воспроизводится сто раз из ста. Плавающая ошибка — обычно инфраструктура. Стабильный отказ на верных, казалось бы, данных — почти всегда осознанная проверка, которую мы не учли.

Прежде чем чинить, стоит спросить: а не отвергает ли меня система намеренно? Ответ экономит вечер.

Дальше

Новые разборы выходят в Telegram раньше, чем попадают сюда. Без анонсов курсов — только материалы.

Читать в Telegram →