Skip to content

Troubleshooting

Роман Зопиров edited this page Oct 29, 2026 · 2 revisions

Устранение неполадок и FAQ

Типовые ситуации, исключения API магазинов и способы их решения.


1. Ошибка HTTP 409 Conflict: Сабмишен уже находится в обработке

Симптом:

Microsoft Partner Center возвращает ответ:

409 Conflict: An active submission already exists and cannot be modified.

Причина:

Partner Center разрешает только один активный сабмишен на приложение. Если предыдущий сабмишен находится на этапе сертификации (Certification) или публикации (Publishing), API запрещает создание нового черновика.

Решение в OctoPublisher:

При обнаружении активного сабмишена в этих статусах инструмент выводит:

[ПРОПУСК] Активный сабмишен <id> уже находится на сертификации или публикации.

и завершает работу с кодом 0. Это предотвращает аварийное падение релизного пайплайна CI/CD при повторном запуске.

Если в Partner Center завис неподтверждённый черновик в статусе PendingCommit, его можно сбросить вручную:

octopublish mstore delete-draft --app-id "<ваш-app-id>"

2. Ошибка HTTP 403 / 401 в Azure Active Directory

Симптом:

[ОШИБКА] Ошибка OAuth2 аутентификации Azure AD: invalid_client / unauthorized_client

Чек-лист проверки:

  1. Проверьте срок действия секрета Client Secret в портале Azure.
  2. Убедитесь, что приложение Azure AD привязано к Partner Center в разделе: Параметры учетной записи -> Управление пользователями -> Приложения Azure AD.
  3. Убедитесь, что приложению назначена роль Менеджер (Manager).

3. Ошибка подписи SAS URL при блочной загрузке (Signature Mismatch)

Симптом:

403 Server failed to authenticate the request. Signature did not match.

Техническая деталь:

SAS-токены Partner Center часто содержат символ + в параметре подписи sig=. При передаче в сыром виде сервер Azure Storage декодирует + как пробел и отклоняет запрос.

Решение:

OctoPublisher автоматически нормализует все входящие ссылки загрузки (Replace("+", "%2B")) перед отправкой PUT-запросов.


4. Ошибка Partner Center: Требуется архив .zip вместо прямого .msix

Техническая деталь:

Dev Center Ingestion API требует, чтобы файл пакета MSIX передавался упакованным в .zip контейнер.

Решение:

Класс AzureBlobUploader в Octo.MStore автоматически определяет передачу одиночного файла .msix, инкапсулирует его во временный .zip и передает в Azure Blob Storage без необходимости ручной архивации со стороны пользователя.


5. Коды выхода (Exit Codes)

Код Значение
0 Успешное завершение или безопасный пропуск (Safe Skip)
1 Фатальная ошибка (сбой предполётного линтера, сетевая ошибка, отказ API)
2 Ошибка валидации параметров командной строки

Clone this wiki locally