//сформировали данные и отправляем
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,"",Истина);
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураЗаказа);
СтрокаJS = ЗаписьJSON.Закрыть();
Предупреждение("Создали JSON! "+НомерЗаказа1С);
СтрокаРезультат = КодироватьСтроку("site=onlain&order="+СтрокаJS, СпособКодированияСтроки.URLВКодировкеURL);
HTTPМетод= "POST";
ФайлОтвета = "C:\XML\one_answer_orders.txt";
Соединение = Новый HTTPСоединение("сервер",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
ЗаголовокЗапросаHTTP = Новый Соответствие();
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
ЗаголовокЗапросаHTTP.Вставить("X-API-KEY", "ключ");
Запрос = Новый HTTPЗапрос("/api/v5/orders/create", ЗаголовокЗапросаHTTP);
Запрос.УстановитьТелоИзСтроки(СтрокаРезультат,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Попытка
Ответ = Соединение.ВызватьHTTPМетод(HTTPМетод, Запрос, ФайлОтвета);
Предупреждение(Ответ.КодСостояния);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ПоказатьВ самописной конфигурации 8.3, беру заказ, пишу его в json и надо отправить в crm.
Получаю ошибки 400, 500 или кучу других, но все сводятся, что ошибка в строке json.
Дело в том, что в php отправка идет на Ура, но там используется модуль с гитхаба,
Скрытый текст |
---|
<?php
use RetailCrm\Api\Interfaces\ClientExceptionInterface;
use RetailCrm\Api\Enum\CountryCodeIso3166;
use RetailCrm\Api\Enum\Customers\CustomerType;
use RetailCrm\Api\Factory\SimpleClientFactory;
use RetailCrm\Api\Interfaces\ApiExceptionInterface;
use RetailCrm\Api\Model\Entity\Orders\Delivery\OrderDeliveryAddr Показать |
но есть api и сказано, что
POST-запросы
При обращении к API-методам типа POST параметры необходимо отправлять в формате application/x-www-form-urlencoded. При этом если в каком-либо из параметров передается вложенная структура (например, в методе /api/v*/orders/create данные по заказу в параметре order), то значения таких параметров необходимо передавать в виде JSON-строки.
Пример передаваемых данных:
site=simple-site&order=%7B%22externalId%22%3A%22a123%22%2C%22firstName%2 2%3A%22Tom%22%7D
При обращении к API-методам типа POST параметры необходимо отправлять в формате application/x-www-form-urlencoded. При этом если в каком-либо из параметров передается вложенная структура (например, в методе /api/v*/orders/create данные по заказу в параметре order), то значения таких параметров необходимо передавать в виде JSON-строки.
Пример передаваемых данных:
site=simple-site&order=%7B%22externalId%22%3A%22a123%22%2C%22firstName%2
В PHP есть функция http_build_query, которая делает json в правильную строку, в 1с я не знаю аналога, кроме КодироватьСтроку("json", СпособКодированияСтроки.URLВКодировкеURL); и он кодирует неверно, судя по всему, например оставляет двоеточия.
Может есть другие способы получения json сразу в виде строки или можно вовсе обойтись без json, собрав такую строку объединением ключей и значений из запроса?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
тут больше подойдет:
КодироватьСтроку("json", СпособКодированияСтроки.URLВКодировкеURL)
тут больше подойдет:
КодироватьСтроку(Данныеjson, СпособКодированияСтроки.КодировкаURL)
СтрокаРезультат = "site=onlain&order=" + КодироватьСтроку(СтрокаJS, СпособКодированияСтроки.КодировкаURL);
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот