onlinerby / onliner-cart-api

Onliner Cart API Documentation
3 stars 6 forks source link

405 ошибка при попытке подтвердить статус доставки в ПВЗ #49

Closed MrMurom closed 4 years ago

MrMurom commented 4 years ago

Добрый день. При попытке подтвердить статус доставки заказа в ПВЗ получаю ошибку 405 Заказ находится в статусе "Передан в доставку" Способ доставки указан "В пункт выдачи"

запрос /orders/e71336/pickup-point-delivered заголовки "Content-Type" "application/json; charset=utf-8" "Accept" "application/json; charset=utf-8" "Authorization" "Bearer xxxx" тело запроса { "comment": "Ваш заказ номер ONLe71336 прибыл в ПВЗ" }

В чем может быть ошибка?

kamadoss commented 4 years ago

Добрый день! 405 ошибка означает неправильно указанный http-метод. Данный роут обрабатывает только POST-запросы, убедитесь что вы по ошибке не указали другой метод. Если ошибка повторится - пришлите нам полное тело http запроса.

MrMurom commented 4 years ago

Оправляю именно POST запрос. Прислать полное тела запроса нет возможности. Запрос программно отправляется через 1с.

Очень странно что в ошибке пишет {"message":"The PUT method is not supported for this route. Supported methods: POST."}

Видно на стороне 1с все таки проблема.

kamadoss commented 4 years ago

Очевидно, ваше приложение, всё же, отправляет PUT запрос. Для дебага запроса к нашему приложению могу вам порекомендовать воспользоваться сторонним сервисом вроде https://requestbin.com/, где можно отслеживать полную информацию по отправляемым запросам - просто вместо эндпоинта нашего приложения в коде вашего приложения указываете выданный сервисом урл.

MrMurom commented 4 years ago

Проверил запросы через сервис https://requestbin.com/ Видно по логам что я отправляю POST запрос. Подскажите в чем еще проблема ? Скрин ниже

изображение изображение

kamadoss commented 4 years ago

Можете прислать полный url, по которому вы к нам делаете запросы?

MrMurom commented 4 years ago

Запросы посылаю через соединение с сервером сервер cart.api.onliner.by порт 443 урл /orders/k7t83e/pickup-point-delivered

полный урл будет таким

https://cart.api.onliner.by/orders/k7t83e/pickup-point-delivered

sidorovich commented 4 years ago

на какой операционной системе работает ваш код?

sidorovich commented 4 years ago

и номер вашего магазина подскажите

sidorovich commented 4 years ago

у нас запрос проходит по указанным данным. попробуем сторонним клиентом на вашей стороне исполнить данный запрос. сию мы получаем в ответ 409, и сообщение "Отметка о поступлении заказа в пункт выдачи уже есть", что говорит о том, что проблем у нас на HTTP слое нет и ошибка 405 возникала обоснованно.

Снимок экрана 2020-07-10 в 12 56 17
MrMurom commented 4 years ago

на какой операционной системе работает ваш код?

Windows server

и номер вашего магазина подскажите

2033

у нас запрос проходит по указанным данным. попробуем сторонним клиентом на вашей стороне исполнить данный запрос. сию мы получаем в ответ 409, и сообщение "Отметка о поступлении заказа в пункт выдачи уже есть", что говорит о том, что проблем у нас на HTTP слое нет и ошибка 405 возникала обоснованно.

Я не понимаю все равно почему мне приходит 405 ошибка. Что не так в нашем запросе ? Готов связаться с вами, вместе посмотреть, предоставить доступы, но надо как-то решить проблему.

sidorovich commented 4 years ago

а какая версия Windows server? попробуем найти для вас клиент для выполнения запроса

MrMurom commented 4 years ago

а какая версия Windows server? попробуем найти для вас клиент для выполнения запроса

Windows server 2008 R2 Enterprise Build 7601 x64

sidorovich commented 4 years ago

попробуйте установить клиент curl https://curl.haxx.se/windows/

и в консоли выполнить запрос, предварительно заменив %TOKEN% на ваш свежий авторизационный токен

curl --request POST \
  --url https://cart.api.onliner.by/orders/k7t83e/pickup-point-delivered \
  --header 'accept: application/json; charset=utf-8' \
  --header 'authorization: Bearer %TOKEN%' \
  --header 'content-type: application/json; charset=utf-8' \
  --data '{"comment": "Ваш заказ номер ONLe71336 прибыл в ПВЗ"}'
sidorovich commented 4 years ago

если получите невнятный ответ, то скиньте сюда полный вывод консоли или скриншот с ним

MrMurom commented 4 years ago

изображение Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\murom\curl-7.71.1-win64-mingw\bin>curl.exe --request POST --url https:/ /cart.api.onliner.by/orders/k7t83e/pickup-point-delivered --header 'accept: appl ication/json; charset=utf-8' --header 'authorization: Bearer xxxxxxx' --header 'content-type: application/json; charset=utf-8'--data '{"c omment": "123123123"}' {"message":"Content-Type supports only application\/json"}curl: (6) Could not re solve host: application curl: (6) Could not resolve host: charset=utf-8' curl: (6) Could not resolve host: Bearer curl: (6) Could not resolve host: xxxxxxxxx curl: (6) Could not resolve host: application curl: (6) Could not resolve host: charset=utf-8'--data curl: (3) unmatched brace in URL position 2: '{comment: ^

sidorovich commented 4 years ago

из-за разности операционных систем, надо кавычки заменить

curl --request POST --url https://cart.api.onliner.by/orders/k7t83e/pickup-point-delivered --header "accept: application/json; charset=utf-8" --header "authorization: Bearer %TOKEN%" --header "content-type: application/json; charset=utf-8" --data "{'comment': 'Ваш заказ номер ONLe71336 прибыл в ПВЗ'}"

Расшифровать полученный ответ, можно на сайте https://jsoneditoronline.org/ мы просто кириллицу отдаем как юникод символы

MrMurom commented 4 years ago

Удалось найти решение вопроса. Очевидно очередной баг платформы 1с (8.3.10.2561 Да старая. Не дают обновить.). Если через одно соединение вызывать метод "patch" а после него метод "post", то получаю от вас ошибку 405. Если создать новое соединение с аналогичными параметрами и вызвать метод "post" через него, то все работает.
И понятно почему отрабатывал метод "post" через https://requestbin.com/ - я его запускал через отдельное соединение, чтоб не мучаться с авторизацией.