Ошибка при использовании API POST - "error_description": "Method POST not allowed" Есть решение

Здравствуйте.

Запросы GET отправляются без проблем. Сделал pfghjc POST как в документации получаю ошибку.

Есть ли где-то конкретный пример куда и что писать при запросе POST. Видел, сообщение, что можно его как-то в теле запроса передавать. Но как конкретно? Пишу по своему разумению - выдаёт

{ "error": "invalid_request", "error_description": "Required parameter is missing: access_token"

}
Но в теле передал
{

"access_token" : "Bearer xxx"

}

Что ещё дописать нужно?

9 ответов

  • 1
    Александр Страшко 9 января 2022 21:34 # Решение

    Вопрос решился

    • +1
      Михаил Ушенин Михаил Ушенин Webasyst 10 января 2022 10:52 #

      Другим пользователям может быть интересно, как именно решился вопрос, если они столкнутся с такой же проблемой.

      • +1
        Александр Страшко Александр Страшко 24 января 2022 18:57 #

        Проблема была в том, что в документации по использованию токена API нет четкого указания на то, что формат вызова методов приложений нужно смотреть в документации по API для них. 

        На странице API приложений Webasyst есть запутывающий раздел 

        Безопасный способ передачи токена авторизации

        в котором говорится, что для безопасной передачи нужно использовать метод POST. И это вводит в заблуждение, потому что многие методы API приложений вызываются исключительно методом GET с небезопасной передачей токена.

        Где-то на форуме я видел сообщение о том, что разработчики добавили способ передачи токена в теле сообщения. Но в таком случае это следует отразить в документации.

        • +1
          Михаил Ушенин Михаил Ушенин Webasyst 25 января 2022 09:06 #

          На странице API приложений Webasyst есть запутывающий раздел Безопасный способ передачи токена авторизации в котором говорится, что для безопасной передачи нужно использовать метод POST.

          В нём говорится иное:

          Для того чтобы исключить отслеживание токена по URL запросов, передавайте его любым из следующих способов:
          — в составе POST-запроса в поле access_token...
          — в HTTP-заголовке AUTHORIZATION...

          Предлагается 2 варианта на выбор — выбирайте подходящий в зависимости от ситуации.

  • 1
    Александр Страшко 26 января 2022 18:33 #
    в составе POST-запроса в поле access_token;

    Хорошо, но что это значит?

    Беру пример получения информации о товаре из документации по API ShopScript.

    https://demo1-ru.webasyst.com/...shop.product.getInfo?

    Вариант с HTTP-заголовком AUTHORIZATION работает. После этого меняю запрос GET на POST. Добавляю пару:

    {"access_token" : "xxx"}

    И в результате получаю "error": "invalid_request", "error_description": "Required parameter is missing: access_token". Какой параметр пропущен, если он передан?

    • +1
      Михаил Ушенин Михаил Ушенин Webasyst 27 января 2022 08:58 #

      меняю запрос GET на POST

      Для этого метода такая замена недопустима, потому что он допускает использование только метода GET.

  • 1
    Александр Страшко 27 января 2022 11:25 #

    Вы правы, только я сначала открыл раздел документации по использованию API и воспринял возможность выбора буквально. А на самом деле этот выбор зависит от того, какой вариант запроса поддерживает тот или иной метод API.

    Возможно, это и так понятно, но бывают всякие чудеса, включая и тот, когда метод поддерживает и GET, и POST-запрос.

    Михаил, благодарю вас за пояснение, после которого всё сразу стало понятно. Думаю, в документации имеет смысл уточнить то, что выбор способа передачи токена может быть не любым, а тем, который поддерживает используемый метод API. Сейчас же идёт фраза "передавайте его любым из следующих способов:", а затем идут примеры и это воспринимается так, что в примерах можно использовать любой вариант.

  • 1
    Александр Страшко 27 января 2022 15:07 #

    Спасибо.

    Посмотрите моё предложение по тексту. Возможно, оно подойдёт для документации.

    Безопасный способ передачи токена авторизации
    
    Для исключения отслеживания токена авторизации в URL-строке запроса, методы API поддерживают его скрытную и безопасную передачу:
    • Для методов, вызываемых GET-запросом, передавайте токен в HTTP-заголовке AUTHORIZATION:
    
    AUTHORIZATION: Bearer ACCESS_TOKEN
    
    • Для методов, вызываемых POST-запросом, используйте поле access_token: 
    
    access_token: ACCESS_TOKEN
    
    Примеры

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите