Блог

Звантаження в 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

Також там є опис і зразок файлов які приходять з даними у відповіді.