Имя: Пароль:
1C
1С v8
Интеграция яндекс доставки в 1С
0 Kelleron
 
26.02.20
15:39
Всем добрый день!

Появилась очень интересная задача по интеграции 1с и Яндекс доставки. Но не получается написать корректный запрос, возвращает следующее: "error":"ERROR_WRONG_PARAMS"

Тут читаю хелп: https://tech.yandex.ru/delivery/doc/dg/reference/get-sender-orders-docpage/#format , генерирую ключ и параметры согласно документации, значения параметров по алфавиту собираю в строку, добавляю API ключ, хеширую получившуюся строку в МД5.

вот код (но ключи ненастоящие, я их немного подправил чтобы реальные не выкладывать). Подскажите, пожалуйста, где косяк?



Функция ВыполнитьPOSTЗапрос()
    
    //Тело POST-запроса
    Параметр1="";//число    
    Параметр2="";//число
    //Параметр3="";//число
    Параметр4="";//сгенерированный
    ЗащищенноеСоединение=Истина;
    
    Параметр1 = "1234567";
    Параметр2 = "123456";
    APIkey = "1234567890f846ca9ebf7e1234567890";
    //Параметр3 =
    
    Параметр4 = Параметр1+Параметр2;
    Параметр4 = ВычислитьMD5("" + Параметр1 + "" + Параметр2 + "" + APIkey);
    
    ТелоPOSTЗапроса = "";
    ТелоPOSTЗапроса = ТелоPOSTЗапроса + "&secret_key=" + Параметр4;    
    ТелоPOSTЗапроса = ТелоPOSTЗапроса + "&client_id=" + Параметр1;
    ТелоPOSTЗапроса = ТелоPOSTЗапроса + "&sender_id=" + Параметр2;    
    
    //POST-запрос на сервер-приёмник
    СерверПриемник = "delivery.yandex.ru"; //имя сервера без протокола (http) и порта
    АдресСтраницыНаСервере = "/api/last/getSenderOrders"; //
    
    ЗаголовкиHTTP = Новый Соответствие;
    ЗаголовкиHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
    
    
    Таймаут = 120;
    SSL =  ?(ЗащищенноеСоединение, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено);
    НТТР = Новый HTTPСоединение(СерверПриемник,, , , , Таймаут, SSL);    
    
    Попытка
    //Формируем HTTP запрос
    ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницыНаСервере, ЗаголовкиHTTP);
    //HTTPЗапрос = Новый HTTPЗапрос("/test3.php", ЗаголовкиHTTP);
    ЗапросHTTP.УстановитьТелоИзСтроки(ТелоPOSTЗапроса, КодировкаТекста.UTF8); //Устанавливает строку, из которого будет прочитано тело POST-запроса.
    //Ответ от сервера получим в возвращаемом значении типа HTTPОтвет
    ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP);
    Возврат ОтветHTTP.ПолучитьТелоКакСтроку();
Исключение
    ТекстСообщения = НСтр("ru = 'Неудачная попытка соединения с '")  + СерверПриемник + ": " + ОписаниеОшибки();
    Сообщить(ТекстСообщения);
КонецПопытки;         
КонецФункции // ВыполнитьPOSTЗапрос()


Функция ВычислитьMD5(Данные) Экспорт

ХэшированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
ХэшированиеДанных.Добавить(Данные);
Хэш = НРег(СтрЗаменить(ХэшированиеДанных.ХешСумма, " ", ""));

Возврат Хэш;

КонецФункции