Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=66677)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Liqpay API (интеграция)

Автор: dravva 03.08.21, 18:36

Добрый день.
УТП. Необходимо отправить запрос на возврат средств по платежу. Документация https://pro1c.org.ua/redirect.php?https://www.liqpay.ua/documentation/api/aquiring/refund/doc
Проблема - в ответ получаю - "{"code":"err_missing","err_code":"err_missing","err_description":"Required parameter not passed data","key":"data","result":"error","status":"error"}"

Фрагмент кода

УРЛСайта = "liqpay.ua";
    ПутьЗапроса = "/api/request";
    
    СтруктураЗапроса = Новый Структура;
        СтруктураЗапроса.Вставить("public_key",public_key);
        СтруктураЗапроса.Вставить("version","3");
        СтруктураЗапроса.Вставить("action","refund");
        СтруктураЗапроса.Вставить("amount","100");
        СтруктураЗапроса.Вставить("order_id","order_id_1");
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));    ЗаписатьJSON(ЗаписьJSON,СтруктураЗапроса);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(СтрокаJSON);
    ДатаBase64 = Base64Строка(ДвоичныеДанныеСтроки);
    ДатаBase64 = СтрЗаменить(ДатаBase64, Символы.ВК, ""); // убираем ВК
    ДатаBase64 = СтрЗаменить(ДатаBase64, Символы.ПС, ""); // убираем ПС
    
    ХД = Новый ХешированиеДанных(ХешФункция.SHA1);
    ХД.Добавить(private_key);
    ХД.Добавить(ДатаBase64);
    ХД.Добавить(private_key);

    ТипДвоичныеДанные = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "base64Binary");
    ДвоичныеДанные = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ХД.ХешСумма);
    СигнатураBase64 = ДвоичныеДанные.ЛексическоеЗначение;
    
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
    Соединение = Новый HTTPСоединение(УРЛСайта, , , , , , Новый ЗащищенноеСоединениеOpenSSL());
    HTTPЗапрос =
        Новый HTTPЗапрос(
                ПутьЗапроса
            ,    Заголовки
        )
;
    HTTPЗапрос.УстановитьТелоИзСтроки("data="+ДатаBase64+"&signature="+СигнатураBase64);
    HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    СтрокаОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
    Сообщить(СтрокаОтвета);



Думаю что проблема именно в передаче параметров, потому как та же ошибка и для других "action" - получение реестра или создание платежа
Может у кого-то есть опыт и может дать пример правильного составления запроса ?
Заранее спасибо !

dravva @ Сегодня, 17:42 * ,
похоже разобрался сам
вместо
HTTPЗапрос.УстановитьТелоИзСтроки("data="+ДатаBase64+"&signature="+СигнатураBase64);

нужно (добавить &)
HTTPЗапрос.УстановитьТелоИзСтроки("&data="+ДатаBase64+"&signature="+СигнатураBase64);

Автор: Chernivcipss 04.02.22, 16:12

У меня не получилось.
Ошибка {"code":"err_missing","err_code":"err_missing","err_description":"Required parameter not passed id","key":"id","result":"error","status":"error"}

Автор: am_1c 11.10.22, 12:31

dravva @ 03.08.21, 19:36 * ,
Спасибо, полностью рабочий фрагмент с учетом нижней корректировки "data=" -> "&data="

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua