Блог

Загрузка в 1C 8.x движений по карте приватбанка через API

Сегодня практически все интернет-магазины принимают оплату за товары на карту приватбанка. Приватбанк предоставляет достаточно много интересных инструментов для разработчиков.

Один из таких инструментов - возможность загрузки выписки со всеми движениями по карте. Пример такой загрузки мы и рассмотрим.

Обмен данными производится в формате xml, поэтому нам нужно подготовить файл для отправки в этом формате. Чем мы и займемся.

  //Зададим период выборки движений в правильном формате.
 ДатаНачала = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
 ДатаОкончания = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
 
 //Ваш приватный ключ (пароль) , его можно найти в кабинете мерчанта.
 ПриватныйКлюч = "ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ";
 
 // Там же смотрим ИД и номер карты, по которой хотим видеть движения
 ИДМерчанта = Формат("ХХХХХ","ЧГ=0");
 НомерКарты = Формат("ХХХХ ХХХХ ХХХХ ХХХХ","ЧГ=0");
 
 // Фрагмен блока файла date выносим отдельно и пишем в виде одной строки без лишних символов. 
 //Он необходим для правильного формирования сигнатуры
 СтрокаДата = "<oper>cmt</oper><wait>0</wait><test>1</test><payment id=""""><prop name=""sd"" value="""+ ДатаНачала +""" /> <prop name=""ed"" value="""+ ДатаОкончания +""" /><prop name=""card"" value="""+ НомерКарты +""" /></payment>";
 
 //Сигнатура формируется по блоку дата и приватному ключу
 тСтрока = "" + СтрокаДата + "" + ПриватныйКлюч;
 
 // Формируем сигнатуру. Обратите внимание что така возможсноть есть только в 1С версии 8.3. 
 //Для более ранник функций необходимо использовать внешние компоненты.
 
 Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
 Хеш.Добавить(тСтрока); 
 Хеш2 = Новый ХешированиеДанных(ХешФункция.SHA1);
 Хеш2.Добавить(НРег(СтрЗаменить(Строка(Хеш.ХешСумма), " ", ""))); 
 
 signature = НРег(СтрЗаменить(Строка(Хеш2.ХешСумма), " ", ""));
 
 //Формируем финальный текст xml который будем передавать в запросе и отправляем запрос банку. 
 //Обязательно текст блока дата берем тот, по которому формировали сигнатуру иначе будет ошибка!
 
   Запрос = "<?xml version=""1.0"" encoding=""UTF-8""?> 
  |<request version=""1.0"">
  |    <merchant>
  |        <id>" + ИДМерчанта + "</id>
  |        <signature>" + signature + "</signature>
  |    </merchant>
  |    <data>" + СтрокаДата + "</data>
  |</request>";
  
  WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); 
  WinHttp.Option(2,"utf-8"); 
  WinHttp.Open("POST","https://api.privatbank.ua/p24api/rest_fiz",0); 
  WinHttp.setRequestHeader("Content-type", "text/xml; charset=utf-8"); 
  WinHttp.Send(Запрос); 
  ТекстОтвета = WinHttp.ResponseText();   
 
  //Текст ответа получаем в формате xml и дальше уже его обрабатываем. 


Информацию о структуре XML и передаваемых параметрах можно найти здесь - https://api.privatbank.ua/api-privat24/rest-fiz.html

Там же образец файлов ответа, которые получаем в ответе.