Передача данных оффлайн конверсий в Я.Метрику из 1С CRM

1. Glomen 08.11.18 12:56 Сейчас в теме
Добрый день. Подскажите.
Нужно отправить данные из CRM в Я.Метрику, по документации https://yandex.ru/support/metrika/data/offline-conversion.html

Используем код
Кодировка = КодировкаТекста.ANSI;
ВыходнойФайл = КаталогВременныхФайлов()+"data.txt";
ФайлОтправки = Новый ЗаписьТекста(ВыходнойФайл,КодировкаТекста.ANSI);
                               
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
ФайлОтправки.ЗаписатьСтроку("--" + Boundary, Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""data.csv""", Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("Content-Type: text/csv" + Символы.ВК + Символы.ПС, Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("DateTime,Target,ClientId", Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("1532603595,SENDNFRKEY,1532592620994816287", Символы.ВК + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("--" + Boundary, Символы.ВК + Символы.ПС);
ФайлОтправки.Закрыть();

ЗаголовокHTTP = Новый Соответствие();
HTTP1 = Новый HTTPСоединение("api-metrika.yandex.ru",,,,,, Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено));
ЗаголовокHTTP.Вставить("Authorization", "Bearer AQAAAAAirLmAAUeoxPFZS_9ok4n4TObs" + Символы.ВК + Символы.ПС);
ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary + Символы.ВК + Символы.ПС);
ВыбФайл = Новый Файл(ВыходнойФайл);
ЗаголовокHTTP.Вставить("Content-Length", Формат(ВыбФайл.Размер(),"ЧГ=0"));

HTTP1.ОтправитьДляОбработки(ВыходнойФайл, "management/v1/counter/14077687/offline_conversions/upload?client_id_type=CLIENT_ID", КаталогВременныхФайлов() + "outputY.txt",ЗаголовокHTTP);    

Показать


При отправке получаем ошибку
{"errors":[{"error_type":"invalid_uploading","message":"Некорректный формат multipart запроса."}],"code":400,"message":"Некорректный формат multipart запроса."}
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dimasts 22 13.08.22 13:02 Сейчас в теме
(1) Получилось отправить данные? В чём была проблема?
3. Borunmeert 11 20.10.22 18:47 Сейчас в теме
Тоже интересно что было. Столкнулся с такой же проблемой.
4. Texnol 13.12.22 21:10 Сейчас в теме
Эта ошибка выходит из-за того что "Boundary" на корректно в файле заполняется. Необходимо так:

	Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	ФайлОтправки.ЗаписатьСтроку("--------------------------" + Boundary, Символы.ВК + Символы.ПС);
	ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""data.csv""", Символы.ВК + Символы.ПС);
	ФайлОтправки.ЗаписатьСтроку("Content-Type: text/csv" + Символы.ВК + Символы.ПС, Символы.ВК + Символы.ПС);
	ФайлОтправки.ЗаписатьСтроку("ClientId,Target,DateTime", Символы.ВК + Символы.ПС);
	ФайлОтправки.ЗаписатьСтроку("1532592620994816287,SENDNFRKEY,1670954634", Символы.ВК + Символы.ПС);
	ФайлОтправки.ЗаписатьСтроку("--------------------------" + Boundary + "--", Символы.ВК + Символы.ПС);
	ФайлОтправки.Закрыть();

У меня вот только дальше другая ошибка полезла:
{"errors":[{"error_type":"invalid_uploading","message":"Не найден параметр запроса.","location":"file"}],"code":400,"message":"Не найден параметр запроса."}

С ней пока не разобрался =(
5. Valya3010 17.01.23 15:06 Сейчас в теме
(4)Удалось победить ошибку? Такая же выходит, никак не могу решить.
6. Texnol 23.01.23 21:15 Сейчас в теме
(5) Удалось решить при помощи postman-а и fiddler-а. Проблема была в использовании "Символы.ВК", в разделителе строк объекта "ЗаписьТекста". Вот таким вариантом запрос отправляется без ошибок:

    ВыходнойФайл = КаталогВременныхФайлов()+"data.csv";
    ФайлОтправки = Новый ЗаписьТекста(ВыходнойФайл, КодировкаТекста.ANSI, Символы.ПС);
    
    Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    ФайлОтправки.ЗаписатьСтроку("--------------------------" + Boundary);
    ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""data.csv""");
    ФайлОтправки.ЗаписатьСтроку("Content-Type: text/csv");
    ФайлОтправки.ЗаписатьСтроку("");
    ФайлОтправки.ЗаписатьСтроку("CLIENT_ID,Target,DateTime");
    ФайлОтправки.ЗаписатьСтроку(СтрШаблон("%1,%2,%3", СтруктураСДанными.YM, СтруктураСДанными.Target, СтруктураСДанными.DateTime));
    ФайлОтправки.ЗаписатьСтроку("");
    ФайлОтправки.ЗаписатьСтроку("--------------------------" + Boundary + "--");
    ФайлОтправки.Закрыть();
    
    HTTPСоединение = Новый HTTPСоединение("api-metrika.yandex.net",,,,,, Новый ЗащищенноеСоединениеOpenSSL());
    
    Ресурс = "management/v1/counter/" + СтруктураСДанными.НомерСчетчика + "/offline_conversions/upload?client_id_type=CLIENT_ID";
    HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
    HTTPЗапрос.Заголовки.Вставить("Authorization", СтруктураСДанными.Токен);
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=------------------------" + Boundary);
    ВыбФайл = Новый Файл(ВыходнойФайл);
    HTTPЗапрос.Заголовки.Вставить("Content-Length", XMLСтрока(ВыбФайл.Размер()));
    HTTPЗапрос.УстановитьИмяФайлаТела(ВыходнойФайл);
    
    ТекстОшибки = "";
    Попытка
        Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
        Если Ответ.КодСостояния <> 200 Тогда
            ТекстОшибки = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
        КонецЕсли;
    Исключение
        ТекстОшибки = ОписаниеОшибки();
    КонецПопытки;
Показать
Оставьте свое сообщение

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