1. user602990_lvv 15.03.19 13:05 Сейчас в теме

1C + JSON + API в 1с 7.7

Здравствуйте.

Подскажите, кто знает, как правильно написать.

Необходимо написать обмен с CRM https://app.salesap.ru/api
Например:

Скрытый текст


В 1с пишу:
Соединение = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");			 
	Соединение.Open("POST", "https://app.salesap.ru/api/v1/deal-stages", 0); 
        Соединение.setRequestHeader("Content-Type","application/vnd.api+json");
	Соединение.setRequestHeader("Authorization", api_token); 

	Параметры = "@- << EOF {""data"":{""type"":""deal-stages"",""attributes"":{""name"":""API 1234""},""relationships"":{""deal-stage-category"":{""data"":{""type"":""deal-stage-categories"",""id"":1}}}}EOF"

        Соединение.Send(СокрЛП(Параметры));
	Рез = Соединение.ResponseText();
Показать


Приходит ошибка:
{"errors":[{"title":"Bad Request","detail":"Empty input () at line 1, column 1 [parse.c:978] in '@- \u003c\u003c EOF {\"data\":{\"type\":\"deal-stages\",\"attributes\":{\"name\":\"API 1234\"},\"relationships\":{\"deal-stage-category\":{\"data\":{\"type\":\"deal-stage-categories\",\"id\":1}}}}EOF","code":"400","status":"400"}]}

Где ошибка?
Ответы
Избранное Подписка Сортировка: Древо
18. user602990_lvv 15.03.19 18:39 Сейчас в теме
(1)
Надо писать только

Параметры = "{""data"":{""type"":""deal-stages"",""attributes"":{""name"":""API 1234""},""relationships"":{""deal-stage-category"":{""data"":{""type"":""deal-stage-categories"",""id"":1}}}}"

Были лишние данные
2. ranis888 5 15.03.19 14:14 Сейчас в теме
EOF
{
"data":{
"type":"deal-stages",
"attributes":{
"name":"API 1234"
},
"relationships":{
"deal-stage-category": {
"data": {
"type": "deal-stage-categories",
"id": 1
}
}
}
}
}
EOF
Показать


Вот тут у тебя ошибка если не ошибаюсь
3. ranis888 5 15.03.19 14:16 Сейчас в теме
Тебе нужно вот это сделать:
{
"data":{
"type":"deal-stages",
"attributes":{
"name":"API 1234"
},
"relationships":{
"deal-stage-category": {
"data": {
"type": "deal-stage-categories",
"id": 1
}
4. ranis888 5 15.03.19 14:20 Сейчас в теме
5. ranis888 5 15.03.19 14:21 Сейчас в теме
ХТТПЗапрос.setRequestHeader("Authorization","Bearer " + ThisIsToken);
8. user602990_lvv 15.03.19 14:38 Сейчас в теме
(5) это указано
Токен = "Bearer " + ThisIsToken;
16. ranis888 5 15.03.19 15:35 Сейчас в теме
(8) Покажи как у тебя это указано
6. ranis888 5 15.03.19 14:23 Сейчас в теме
Кавычки в 7.7 я собирал так
Код
   Кав= """";  
ПараметрыPOST= "{"+кав+"phone"+кав+":"+"79999999999"+"," +кав+"body"+кав+":"+кав+"Спасибо за покупку!"+кав+"}";
Показать полностью
7. user602990_lvv 15.03.19 14:37 Сейчас в теме
(6) Не помогло, то-же самое
9. ranis888 5 15.03.19 15:04 Сейчас в теме
(7) Покажи свой конечный
Параметры =
в окладке
10. user602990_lvv 15.03.19 15:11 Сейчас в теме
(9)
Параметры = "@- << EOF {"+Кав+"data"+Кав+":{"+Кав+"type"+Кав+":"+Кав+"deal-stages"+Кав+","+Кав+"attributes"+Кав+":{"+Кав+"name"+Кав+":"+Кав+"API 1234"+Кав+"},"+Кав+"relationships"+Кав+":{"+Кав+"deal-stage-category"+Кав+":{"+Кав+"data"+Кав+":{"+Кав+"type"+Кав+":"+Кав+"deal-stage-categories"+Кав+","+Кав+"id"+Кав+":1}}}}EOF";
12. ranis888 5 15.03.19 15:20 Сейчас в теме
(10) Повторю еще раз EOF Тебе тут не нужен. Тебе нужно передать это

 {"+Кав+"data"+Кав+":{"+Кав+"type"+Кав+":"+Кав+"deal-stages"+Кав+","+Кав+"attributes"+Кав+":{"+Кав+"name"+Кав+":"+Кав+"API 1234"+Кав+"},"+Кав+"relationships"+Кав+":{"+Кав+"deal-stage-category"+Кав+":{"+Кав+"data"+Кав+":{"+Кав+"type"+Кав+":"+Кав+"deal-stage-categories"+Кав+","+Кав+"id"+Кав+":1}}
11. user602990_lvv 15.03.19 15:17 Сейчас в теме
15. ranis888 5 15.03.19 15:30 Сейчас в теме
17. user602990_lvv 15.03.19 17:43 Сейчас в теме
13. ranis888 5 15.03.19 15:24 Сейчас в теме
Попробуй поиграть с этим сайтом https://apitester.com/
сможешь протестировать запрос
14. ranis888 5 15.03.19 15:27 Сейчас в теме
{"errors":[{"title":"Unauthorized","detail":"The access token is invalid","code":401,"status":"401"}]} вот например токен не верный
19. VladimirB 8 15.03.19 20:11 Сейчас в теме
Можно улучшить читаемость запросов
такую строку json труднее воспринимать

Параметры = "{""data"":{""type"":""deal-stages"",""attributes"":{""name"":""API 1234""},""relationships"":{""deal-stage-category"":{""data"":{""type"":""deal-stage-categories"",""id"":1}}}}" 


Я работаю так:
создаю таблицу называю ее допустим "ЗапросыHTTP" в ней создаю секцию "deal-stages" на одну строку
в ячейку (1,1) этой секции макета помещаю весь текст запроса в виде


{
        "data":{
          "type":"deal-stages",
          "attributes":{
            "name":"&name&"
          },
          "relationships":{
             "deal-stage-category": {
                "data": {
                    "type": "deal-stage-categories",
                    "id": 1
                }
             }
          }
        }
     }
Показать

использую функцию для доступа к секции макета:

Функция ПолучитьМакетТелаЗапроса(_ИмяЗапроса)  //Имя запроса в нашем случае "deal-stages"
	Таб=СоздатьОбъект("Таблица");
	Таб.ИсходнаяТаблица("ЗапросыHTTP");
	Таб.ВывестиСекцию(_ИмяЗапроса);
	Возврат Таб.Область(1,1).Текст;
КонецФункции

Процедура МояПроцедура()
	Макет_DealStage=ПолучитьМакетТелаЗапроса("deal-stages");
	Макет_DealStage=стрЗаменить(Макет_DealStage,"&name&","Этап из API");
..........
КонецПроцедуры


Показать


Читаемость в этом случае лучше. И корректировать запрос в случае ошибки проще. И ковычки собирать не нужно
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Консультант-аналитик 1С
Москва
зарплата от 70 000 руб. до 100 000 руб.
Полный день

Программист 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Временный (на проект)