Ошибка при отправке GET запроса с JSON из 1с.

1. anig99 2852 01.02.24 14:07 Сейчас в теме
Добрый день!
Делаю интеграцию с WooCommerce через 1с. Получаю список заказов через API v3.

На одном тестовом сервер через postman и 1с всё работает. Заказы фильтруются.
На тестовом сервере клиента через postman работает, а в 1с внезапно - нет. Получаю список всех заказов сразу.

Смотрел fiddlerом и разницы не нашел, хотя заголовки скопировал с postman. Может кто-то сталкивался с таким?
Если бы дело было в 1с, то не работало бы на обоих тестовых магазинах. Если бы дело было в магазине, то тогда бы в одном из postman не работало бы тогда.

POSTMAN

GET https://****/wp-json/wc/v3/orders HTTP/1.1
Content-Type: application/json
Authorization: Basic *******
User-Agent: PostmanRuntime/7.36.1
Accept: */*
Postman-Token: e895c1e4-3ea2-468e-8e1c-628207ee91d3
Host: ***
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 137

{
"after": "2022-12-01T00:00:00",
"before": "2022-12-31T23:59:59",
"per_page": 100,
"orderby": "date",
"order": "asc",
"page": 1
}



GET https://****/wp-json/wc/v3/orders HTTP/1.1
Content-Type: application/json
Host: ***
Authorization: Basic ****
User-Agent: PostmanRuntime/7.36.1
Accept: */*
Postman-Token: eeab6536-a495-4475-b5d7-743d52a0e1f1
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 137

{
"after": "2022-12-01T00:00:00",
"before": "2022-12-31T23:59:59",
"per_page": 100,
"orderby": "date",
"order": "asc",
"page": 1
}
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user856012 14 01.02.24 14:28 Сейчас в теме
(1)
Если бы дело было в 1с, то не работало бы на обоих тестовых магазинах. Если бы дело было в магазине, то тогда бы в одном из postman не работало бы тогда.
Значит, надо искать - чем 1С в одном магазине отличается от 1С в другом
3. anig99 2852 01.02.24 14:34 Сейчас в теме
(2) Когда я имею в виду "магазин", то подразумеваю сайт с поднятым woocommerce, а не машину с 1с. Машина одна и та же , 1с одна и та же. Меняю только адрес магазина. Кстати, через WinHttp.WinHttpRequest из 1с тоже всё работает. А вот штатными средствами 1с такой затык.
4. STELEICE 01.02.24 15:28 Сейчас в теме
(3) У БД сайта может быть разная кодировка. (UTF-8) и т.п. Укажите в заголовке верную кодировку.
7. anig99 2852 01.02.24 16:16 Сейчас в теме
(4) Не помогает. Проверял уже ранее. При неверной кодировке api ругается на неверный json на там сайте, где работало до этого.
12. Sashares 35 01.02.24 16:29 Сейчас в теме
(7)Вы привели запросы из магазина, в котором отбор не работает?
18. anig99 2852 01.02.24 18:33 Сейчас в теме
(12) я работаю со 1с как клиент api wordpress c WooCommerce(интернет магазин). Есть 2 сайта. Один поднял я, другой заказчика. Они не идентичны. Компьютер с которого делаю запросы к api один, платформа одна, база одна. При подключении ошибок нет. Но при get запросе из 1с на сайт заказчика не работают фильтры. Но при таком же запросе из postmana, работают. В теме привел перехваченные из сетевого траффика запросы, которые посылают postman и 1с. Запросы идентичны. Думал, может есть ещё какие-то способы получить больше информации о запросах со стороны клиента. Всё ли я посмотрел со стороны клиента? Если осталось посмотреть на логи сайта, то куда конкретно смотреть?
10. anig99 2852 01.02.24 16:21 Сейчас в теме
(4) HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, "UTF8", ИспользованиеByteOrderMark.НеИспользовать);
"Content-type", "application/json; charset=utf-8"

Вот это тоже не работает.
16. vladimir_korshun 87 01.02.24 17:57 Сейчас в теме
(1)
WooCommerce


https://woocommerce.github.io/woocommerce-rest-api-docs/#authentication

Первый шаг - это авторизация. Она получается, токен прилетает?
Второй шаг - это запрос товара...
17. anig99 2852 01.02.24 18:30 Сейчас в теме
(16) авторизация basic с парой ключ/пароль. Она проходит нормально, иначе была бы ошибка 401 и ничего не возвращала бы. Сами запросы проходят, json часть из 1с уходит. Это видно и по тому, что один сайт возвращает инфу в учетом фильтров, и по перехвату траффика. Но до другого сайта или не доходит, или игнорируется им. При этом точно такой же запрос с того же компьютера на тот же сайт, но из postmanа обрабатывается сайтом и ответ приходит с учетом фильтров.
21. starik-2005 3090 01.02.24 20:54 Сейчас в теме
(1) А со стороны сайта никак не понять, что приходит? Доступны логи запросов? И зачем из 1С посылать, что это постман?
23. anig99 2852 01.02.24 21:32 Сейчас в теме
(21) Можно, наверное. Но это надо тратить время на поиск места, где смотреть информацию со стороны сайта. Логи запросов со стороны клиента доступны (в первом сообщении пример). Из 1с посылать для интеграции с интернет-магазином - получать список заказов, загружать их в 1с и менять статус в интернет-магазине. Postman - это удобная программа для отладки и тестирования API (замена командной строки и curl).
26. starik-2005 3090 02.02.24 15:26 Сейчас в теме
(23)
Но это надо тратить время на поиск места, где смотреть информацию со стороны сайта.
Ну или тратить время на медиумов, которые точно назовут причину, не видев сайт, который выдает неверные данные. Логика!
28. Sashares 35 01.07.24 01:15 Сейчас в теме
(1)Попробуйте использовать POST. Ну мало ли.
5. SAShikutkin 14 01.02.24 15:53 Сейчас в теме
1с при get запросе обрезает тело. Т.е. выполняется запрос без json.

Тут хз. может от платформы зависит.
8. anig99 2852 01.02.24 16:19 Сейчас в теме
(5) От платформы. Сейчас уже не обрезает платформа. На сайте, где работает, спокойно уходит json в get. А на той же платформе, в той же базе, на том же компьютере, но на другой сайт из 1с не уходит. Но при этом через postman уходит. Я привел в посте инфу из fiddlerа. Он перехватывает пакеты. Что из 1с, что из postmanа пакеты уходят одинаковые с json. Но в них явно должна быть какая-то разница, если сайт из постмана принимает, а из 1с нет. Как найти эту разницу - не понимаю.
6. SAShikutkin 14 01.02.24 16:10 Сейчас в теме
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET", "{url подключения}/api/getStatus", Ложь);
WinHttp.Send(ТвойДжейсон);
Если WinHttp.Status = 200 Тогда
Сообщить(WinHttp.ResponseText);
КонецЕсли;
9. anig99 2852 01.02.24 16:21 Сейчас в теме
(6) Да. В курсе. Перед тем как пост написать проверил через COM и это работало на всех сайтах. Но под него нужно переписывать модуль. Не критично, но неприятно. И на будущее нужно знать, в чем дело.
11. SAShikutkin 14 01.02.24 16:26 Сейчас в теме
(9) Проверьте разрядность платформ
13. user856012 14 01.02.24 16:30 Сейчас в теме
В-общем, это все называется: "Постановка диагноза и лечение по словесному описанию фотографии больного". :-)
14. SAShikutkin 14 01.02.24 16:38 Сейчас в теме
(13) На самом деле ТС всё понятно спросил. Ловил аналогичную проблему, но на своём проекте это был внутренний http-сервис, поэтому особо не разбирался и просто переделал на POST.
15. user856012 14 01.02.24 17:08 Сейчас в теме
(14)
На самом деле ТС всё понятно спросил.
Дак я не против - вопрос понятен, а вот ответ - можно только угадать... или не угадать.
особо не разбирался и просто переделал на POST
Вот-вот, и это на своем сервисе, а тут - гадание по форуму.
19. anig99 2852 01.02.24 18:37 Сейчас в теме
(13) ... как и большая часть вопросов в интернете... Обычно моих знаний хватает, чтобы продиагностировать проблему со своей стороны и погуглить решение. Но тут прям тупик... В 3 из 4 тестовых ситуациях все работает, а в 4 на проде - нет. Осталось лезть в логи сайта, а очень не хочется. И переделывать под WinHttp.WinHttpRequest не хочется, но пока придется.
20. user856012 14 01.02.24 20:53 Сейчас в теме
(19)
... как и большая часть вопросов в интернете...
Вангую, что и закончится это так же, как в той самой большей части: спрашивающий (а кто же еще?) сам найдет мааахонькое такое отличие "тестов" от "прода", в котором вся загвоздка и выдаст $m тому, кто решил проблему - т.е. себе, что на 100% логично.

Ну, а нам, неудачливым гадателям, может быть, расскажет - где собака порылась? ;-)
22. anig99 2852 01.02.24 21:27 Сейчас в теме
(20) Отдам, кто точно назовет причину, если сталкивался с таким или подскажет, где точно искать.
24. bayselonarrend 2129 02.02.24 14:08 Сейчас в теме
(22)Я с WooCommerce не работал, но работаю с разными API. Самая абсурдная ошибка за последнее время - передавался URL к JSON файлу, записанному из 1С. Кодировка была UTF-8, только при открытии файла через notepad++ показывало кодировку UTF-8 с BOM - было лишних 3 байта. Из-за этого может полететь и ошибка кодировки и Content-length, если он был просто вставлен из Postman. В интернете много всяких вариантов есть как убрать, возможно поможет
25. anig99 2852 02.02.24 15:13 Сейчас в теме
(24) Content-Length рассчитано самой 1с, не вставлял его. Пробовал с bom и без bom.
27. Gluk 20 30.06.24 23:05 Сейчас в теме
Сам с таким столкнулся, много времени потерял, получилось так:

Тело = <Структура в json>;
Тело = ПолучитьДвоичныеДанныеИзСтроки(Тело);
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Тело);
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот