Имя: Пароль:
1C
 
Коллеги, можно похвастаться гуру-левелом по POST-запросам.
0 Гений 1С
 
гуру
01.05.20
10:45
Пытался создать в ZOHO BOOKS карточку номенклатуры (экспорт из 1С) через API.
Все делаю, как написано, а запрос не проходит.
Ругается, что неверный JSON формат.
Я и так и этак. В итоге заюзал тестовый сервис: http://httpbin.org/post
Отправил туда POST запрос и получил ответ.
По ответу понял, что ошибка в BOM.

ТелоHTTPЗапроса = "JSONString=" + ТелоHTTPЗапроса + "";
            HTTPЗапрос.УстановитьТелоИзСтроки(ТелоHTTPЗапроса,"UTF-8", ИспользованиеByteOrderMark.НеИспользовать);

Т.е. нужно было явно указать: ИспользованиеByteOrderMark.НеИспользовать

Если бы не догадался заюзать тестовый сервер, возможно бы и не решил задачу.

Картинки с POST-ответами тут: https://fixogram.ru/epichnaya-pobeda/
1 NorthWind
 
01.05.20
11:23
На это напарывались почти все, кто пытался взаимодействовать с сервисами по REST на кириллице.
Причем раньше было хуже - в 8.2 этого параметра не было и приходилось изгаляться, в частности, использовать кодировку CESU-8.
2 Гений 1С
 
гуру
01.05.20
11:33
(1) ну хз, хз. там было на английском, сервер таки английский. кодировка UTF-8 в тексте. Но тем не менее, я бы ни за что не понял в чем дело, если бы не заюзал тестовый сервер. ;-)
Ну или бы пришлось на мисту идти.
3 J_B
 
01.05.20
12:58
<ИспользоватьBOM> (необязательный)
Тип: ИспользованиеByteOrderMark.
Использовать метку порядка байтов (BOM) для кодировок, которые ее поддерживают: UTF-8, UTF-16 и др.
В режиме совместимости конфигурации значение по умолчанию - Использовать.

Сам некоторое время назад напоролся на эту особенность. Выловить удалось с помощью Fiddler
4 Гений 1С
 
гуру
01.05.20
13:30
(3) Прикол в том, что в прошлых релизах работало и без этой приблуды, а в новом перестало. Сперва я грешил на изменения на стороне ZOHO, но правда оказалась в нарушении обратной совместимости у 1С
5 Вафель
 
01.05.20
13:48
ты уверен что нужно передавать JSONString=
6 Гений 1С
 
гуру
01.05.20
14:09
(5) да, так требуется в API
https://www.zoho.com/books/api/v3/#Customer-Payments_Create_a_payment
По сути, это имя поля в curl-ключе F (передача формы)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.