Ошибка при отправке GET запроса с JSON из 1с.
Добрый день!
Делаю интеграцию с 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
}
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
}
Делаю интеграцию с 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
}
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
}
По теме из базы знаний
- NetCrm - система опросов качества обслуживания. Использование базы 1С и сайта на .NET для опросов клиентов
- HTTP, Ajax, JSON: Один год Pet-проекту на 1С
- Переход на Clickhouse для анализа метрик
- Быстрая организация HTTP-сервиса, или О том, как я создал свой модуль с универсальными процедурами HTTP-сервиса, который позволил быстро организовывать и расширять API
- Пример легковесной интеграции 1С:Управление торговлей и микросервиса на базе Node.js
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Если бы дело было в 1с, то не работало бы на обоих тестовых магазинах. Если бы дело было в магазине, то тогда бы в одном из postman не работало бы тогда.
Значит, надо искать - чем 1С в одном магазине отличается от 1С в другом
(2) Когда я имею в виду "магазин", то подразумеваю сайт с поднятым woocommerce, а не машину с 1с. Машина одна и та же , 1с одна и та же. Меняю только адрес магазина. Кстати, через WinHttp.WinHttpRequest из 1с тоже всё работает. А вот штатными средствами 1с такой затык.
(12) я работаю со 1с как клиент api wordpress c WooCommerce(интернет магазин). Есть 2 сайта. Один поднял я, другой заказчика. Они не идентичны. Компьютер с которого делаю запросы к api один, платформа одна, база одна. При подключении ошибок нет. Но при get запросе из 1с на сайт заказчика не работают фильтры. Но при таком же запросе из postmana, работают. В теме привел перехваченные из сетевого траффика запросы, которые посылают postman и 1с. Запросы идентичны. Думал, может есть ещё какие-то способы получить больше информации о запросах со стороны клиента. Всё ли я посмотрел со стороны клиента? Если осталось посмотреть на логи сайта, то куда конкретно смотреть?
(16) авторизация basic с парой ключ/пароль. Она проходит нормально, иначе была бы ошибка 401 и ничего не возвращала бы. Сами запросы проходят, json часть из 1с уходит. Это видно и по тому, что один сайт возвращает инфу в учетом фильтров, и по перехвату траффика. Но до другого сайта или не доходит, или игнорируется им. При этом точно такой же запрос с того же компьютера на тот же сайт, но из postmanа обрабатывается сайтом и ответ приходит с учетом фильтров.
(21) Можно, наверное. Но это надо тратить время на поиск места, где смотреть информацию со стороны сайта. Логи запросов со стороны клиента доступны (в первом сообщении пример). Из 1с посылать для интеграции с интернет-магазином - получать список заказов, загружать их в 1с и менять статус в интернет-магазине. Postman - это удобная программа для отладки и тестирования API (замена командной строки и curl).
1с при get запросе обрезает тело. Т.е. выполняется запрос без json.
Тут хз. может от платформы зависит.
Тут хз. может от платформы зависит.
(5) От платформы. Сейчас уже не обрезает платформа. На сайте, где работает, спокойно уходит json в get. А на той же платформе, в той же базе, на том же компьютере, но на другой сайт из 1с не уходит. Но при этом через postman уходит. Я привел в посте инфу из fiddlerа. Он перехватывает пакеты. Что из 1с, что из postmanа пакеты уходят одинаковые с json. Но в них явно должна быть какая-то разница, если сайт из постмана принимает, а из 1с нет. Как найти эту разницу - не понимаю.
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET", "{url подключения}/api/getStatus", Ложь);
WinHttp.Send(ТвойДжейсон);
Если WinHttp.Status = 200 Тогда
Сообщить(WinHttp.ResponseText);
КонецЕсли;
WinHttp.Open("GET", "{url подключения}/api/getStatus", Ложь);
WinHttp.Send(ТвойДжейсон);
Если WinHttp.Status = 200 Тогда
Сообщить(WinHttp.ResponseText);
КонецЕсли;
В-общем, это все называется: "Постановка диагноза и лечение по словесному описанию фотографии больного". :-)
(14)
На самом деле ТС всё понятно спросил.
Дак я не против - вопрос понятен, а вот ответ - можно только угадать... или не угадать.
особо не разбирался и просто переделал на POST
Вот-вот, и это на своем сервисе, а тут - гадание по форуму.
(13) ... как и большая часть вопросов в интернете... Обычно моих знаний хватает, чтобы продиагностировать проблему со своей стороны и погуглить решение. Но тут прям тупик... В 3 из 4 тестовых ситуациях все работает, а в 4 на проде - нет. Осталось лезть в логи сайта, а очень не хочется. И переделывать под WinHttp.WinHttpRequest не хочется, но пока придется.
(19)
Ну, а нам, неудачливым гадателям, может быть, расскажет - где собака порылась? ;-)
... как и большая часть вопросов в интернете...
Вангую, что и закончится это так же, как в той самой большей части: спрашивающий (а кто же еще?) сам найдет мааахонькое такое отличие "тестов" от "прода", в котором вся загвоздка и выдаст $m тому, кто решил проблему - т.е. себе, что на 100% логично.
Ну, а нам, неудачливым гадателям, может быть, расскажет - где собака порылась? ;-)
(22)Я с WooCommerce не работал, но работаю с разными API. Самая абсурдная ошибка за последнее время - передавался URL к JSON файлу, записанному из 1С. Кодировка была UTF-8, только при открытии файла через notepad++ показывало кодировку UTF-8 с BOM - было лишних 3 байта. Из-за этого может полететь и ошибка кодировки и Content-length, если он был просто вставлен из Postman. В интернете много всяких вариантов есть как убрать, возможно поможет
Сам с таким столкнулся, много времени потерял, получилось так:
Тело = <Структура в json>;
Тело = ПолучитьДвоичныеДанныеИзСтроки(Тело);
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Тело);
Тело = <Структура в json>;
Тело = ПолучитьДвоичныеДанныеИзСтроки(Тело);
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Тело);
может кому поможет... при отправке GET запроса из 1С если есть параметры в header то срабатывает не всегда. помогает их ставить в строку запроса, а не в заголовки. т.е. строка должна быть вида
СтрокаЗапроса?key1=value&key2=value&key3=value
СтрокаЗапроса?key1=value&key2=value&key3=value
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот
