MerchantAPI: відмінності між версіями

Матеріал з apidocs
Перейти до: навігація, пошук
 
(Не показано 182 проміжні версії 2 користувачів)
Рядок 1: Рядок 1:
== Загальні відомості ==
== Загальні відомості ==
----Протокол призначено для торговців, які є одержувачами платежів. Продавець підписує договір про прийняття платежів або анкету-акцепт до публічної оферти.
----Протокол призначено для торговців, які є одержувачами платежів. Продавець підписує договір про прийняття платежів або анкету-акцепт до публічної оферти.
Рядок 6: Рядок 5:


=== Заголовки запитів ===
=== Заголовки запитів ===
----


Для надсилання запиту та отримання відповіді у форматі JSON, необхідно передати такі обов’язкові заголовки у запиті.<syntaxhighlight lang="jsonml+bst" line="1">
Для надсилання запиту та отримання відповіді у форматі JSON, необхідно передати такі обов’язкові заголовки у запиті.<syntaxhighlight lang="jsonml+bst" line="1">
Рядок 22: Рядок 22:


=== URL ===
=== URL ===
<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
----<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
     <!-- Перший рядок - заголовок -->
     <!-- Перший рядок - заголовок -->
     <tr>
     <tr>
Рядок 37: Рядок 37:


<br>
<br>
=== Налаштування безпеки ===
=== Налаштування безпеки ===
Партнер надає IP, з яких будуть здійснюватися запити.
----Партнер надає IP, з яких будуть здійснюватися запити.
<br>
<br>
<br>
<br>
=== Реєстрація партнера в системі EasyPay ===
=== Реєстрація партнера в системі EasyPay ===
Реєстрація нового торговця передбачає отримання унікального ідентифікатора '''PartnerKey'''.
----Реєстрація нового торговця передбачає отримання унікального ідентифікатора '''PartnerKey'''.


===== Параметри реєстрації =====
===== Характеристика параметрів реєстрації =====
<div style="overflow-x: auto; display: block; width: unset !important; height: auto !important; border: none;">
<div style="overflow-x: auto; display: block; width: unset !important; height: auto !important; border: none;">
   <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
   <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
Рядок 96: Рядок 98:


=== Тестові параметри ===
=== Тестові параметри ===
Для тестових запитів використовуються такі параметри:<br><syntaxhighlight lang="pl">
----Для тестових запитів використовуються такі параметри:<br><syntaxhighlight lang="pl">
PartnerKey = easypay-test
PartnerKey = easypay-test
ServiceKey = MERCHANT-TEST
ServiceKey = MERCHANT-TEST
Рядок 169: Рядок 171:
</td>
</td>
     </tr><tr>
     </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>4909150004857923</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;"><code>4300380058021820</code></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">0130/111</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">0130/111</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Не успішна з 3ДС + помилка PAYMENT_ALFABANK_116
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Не успішна з 3ДС + помилка PAYMENT_ALFABANK_116
</td>
</td>
     </tr></table>
     </tr><tr><td><code>'''5567217349220669'''</code></td><td>0130/111</td><td>Успішна оплата з 3ДС/ або не успішна оплата з 3ДС</td></tr></table>
<br>
<br>
<p style="border: 1px solid #4A90E2; background-color: rgba(74, 144, 226, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
<p style="border: 1px solid #4A90E2; background-color: rgba(74, 144, 226, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
Рядок 182: Рядок 184:
</p>
</p>
<br>
<br>
== Основні запити/відповіді ==
== Основні запити/відповіді ==
<hr color="#d3d3d3" size="1" noshade>
<hr color="#d3d3d3" size="1" noshade>
 
<br>
=== Реєстрація точки та створення сесії ===
==== Реєстрація точки та створення сесії ====
Цей метод слід викликати, коли користувач вперше звертається до платіжної сторінки. Якщо браузер або пристрій змінюються, метод знову з'являється
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/system/createApp</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/system/createApp</span>
</p>
</p>
Цей метод слід викликати, коли користувач вперше звертається до платіжної сторінки. Якщо браузер або пристрій змінюються, метод знову з'являється
'''Request'''<syntaxhighlight line="1" lang="json">
'''Request'''<syntaxhighlight line="1" lang="json">
headers:
headers:
Рядок 205: Рядок 207:


{
{
<br>
   "logoPath": "https://cdn.easypay.ua/logo/",
   "logoPath": "https://cdn.easypay.ua/logo/",
   "hintImagesPath": "https://cdn.easypay.ua/hint_images/",
   "hintImagesPath": "https://cdn.easypay.ua/hint_images/",
Рядок 214: Рядок 215:
}
}


</syntaxhighlight><table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">        '''Параметри''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
</syntaxhighlight>'''Характеристика параметрів'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">        '''Параметри''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
     <!-- Перший рядок - заголовок -->
     <!-- Перший рядок - заголовок -->
     <tr>
     <tr>
Рядок 241: Рядок 242:
<br>
<br>


=== Створення сесії ===
==== Створення сесії ====
Створює новий екземпляр сеансу для користувача , <code>PageId</code>.  
----Даний метод створює новий екземпляр сеансу для користувача , <code>PageId</code>.  
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
Рядок 266: Рядок 267:
}
}


</syntaxhighlight>'''''Параметри'''''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">        <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
</syntaxhighlight>'''Характеристика параметрів''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">        <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
     <!-- Перший рядок - заголовок -->
     <!-- Перший рядок - заголовок -->
     <tr>
     <tr>
Рядок 292: Рядок 293:
<br>
<br>


=== Створення замовлення ===
==== Створення замовлення ====
Перед викликом цього методу потрібно викликати один із методів:  
----Перед викликом цього методу потрібно викликати один із методів:  


* [[MerchantAPI#Реєстрація точки та створення сесії|CreateAPP]]  
* [[MerchantAPI#Реєстрація точки та створення сесії|CreateApp]]
* [[MerchantAPI#Створення сесії|CreatePage]]
* [[MerchantAPI#Створення сесії|CreatePage]]
<br>
<br>
<p style="border: 1px solid #E67E22; background-color: rgba(230, 126, 34, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
<p style="border: 1px solid #FFA500; background-color: rgba(255, 165, 0, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
     <strong style="color: #E67E22;">Важливо!</strong> Для кожного нового запиту  
     ⚠️ <strong>Важливо!</strong> Для кожного нового запиту <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #D63384;">CreateOrder</span> потрібно використовувати унікальний <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #D63384;">PageID</span>.
    <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #D63384;">CreateOrder</span>  
</p>
    потрібно використовувати унікальний  
    <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #D63384;">PageID</span>.
</p>'''Приклад запиту та відповіді <br>'''
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/createOrder</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;"> /api/merchant/createOrder</span>
<syntaxhighlight lang="markdown" line="1">
</p>
 
</p><syntaxhighlight lang="markdown" line="1">
headers
headers


Рядок 317: Рядок 317:
'Sign': 'e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='
'Sign': 'e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='


 
<br>
</syntaxhighlight><syntaxhighlight lang="json" line="1">
</syntaxhighlight><syntaxhighlight lang="json" line="1">
{
{
Рядок 424: Рядок 424:
}
}


</syntaxhighlight>'''Параметри'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
</syntaxhighlight>'''Опис  параметрів''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
<!-- Перший рядок - заголовок -->
<!-- Перший рядок - заголовок -->
     <tr>
     <tr>
Рядок 482: Рядок 482:
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Номер телефону необхідний:  
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Номер телефону необхідний:  


* для отримання списку карток MasterPass гаманця
* для отримання списку токенізованих карток (інформація буде в масиві StoredCards)
* для отримання списку токенізованих карток (інформація буде в масиві StoredCards)
* при оплаті із зазначенням токена картки
* при оплаті із зазначенням токена картки
Рядок 524: Рядок 523:
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">включає можливість успішно оплатити замовлення лише 1 раз за конкретним forwardUrl </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">включає можливість успішно оплатити замовлення лише 1 раз за конкретним forwardUrl </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Значення:
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Значення:
True - за замовчуванням;


False - оплатити замовлення по тому самому ''forwardUrl'' можна буде кілька разів;</td>
* True - за замовчуванням;
* False - оплатити замовлення по тому самому ''forwardUrl'' можна буде кілька разів;</td>
</tr>
</tr>


Рядок 536: Рядок 535:
* '''success -''' URL сторінки успіху, для редиректу клієнта у разі успішної оплати.
* '''success -''' URL сторінки успіху, для редиректу клієнта у разі успішної оплати.
* '''failed -''' URL сторінки помилки для редиректу клієнта у разі неуспішної оплати</td>
* '''failed -''' URL сторінки помилки для редиректу клієнта у разі неуспішної оплати</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">'''back -'''  На фінальній сторінці EasyPay вгорі зліва з'явиться кнопка “Повернутись назад” з посиланням на вказану URL-адресу. Параметр не може бути порожнім і повинен відповідати формату URL.
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
 
* '''back -'''  На фінальній сторінці EasyPay вгорі зліва з'явиться кнопка “Повернутись назад” з посиланням на вказану URL-адресу. Параметр не може бути порожнім і повинен відповідати формату URL.
 
* '''success''' -  у разі, якщо не було передано urls{success,failed} для редиректу після оплати. Після оплати клієнт може не дочекатися редиректу на цей url, тому редирект не можна використовувати як індикатор успішної оплати, отримання оповіщення про успішний платіж - '''див.''' [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]
 
* '''faild -''' приклад get-параметрів, які приходять на '''url.failed та url.succes''' (те ж, але без ''errorCode''):
'''success''' -  у разі, якщо не було передано urls{success,failed} для редиректу після оплати. Після оплати клієнт може не дочекатися редиректу на цей url, тому редирект не можна використовувати як індикатор успішної оплати, отримання оповіщення про успішний платіж - '''див.''' [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]
 
'''faild -''' приклад get-параметрів, які приходять на '''url.failed та url.succes''' (те ж, але без ''errorCode''):


<code>?serviceKey=merchanttest-5310&orderId=re9r9er94jr&amount=1.20&description=</code>
<code>?serviceKey=merchanttest-5310&orderId=re9r9er94jr&amount=1.20&description=</code>
Рядок 553: Рядок 549:


<br>
<br>
===== Необов'язкові додаткові поля =====
 
'''Необов'язкові додаткові поля'''
 
'''<code>additionalItems</code> –''' необов'язкові додаткові параметри, наприклад:
'''<code>additionalItems</code> –''' необов'язкові додаткові параметри, наприклад:
<br>
<br>
Рядок 684: Рядок 682:
}
}


</syntaxhighlight><table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"><tr>
</syntaxhighlight>'''Опис параметрів''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"><tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
Рядок 862: Рядок 860:
* Якщо списання грошей з картки пройшло неуспішно – запит відхиляється з кодом фінансової помилки;
* Якщо списання грошей з картки пройшло неуспішно – запит відхиляється з кодом фінансової помилки;
* Якщо списання грошей з картки пройшло успішно, але хоча б один із реквізитів зазначено неправильно – всі транзакції спліту (частини) платежу – будуть відхилені.
* Якщо списання грошей з картки пройшло успішно, але хоча б один із реквізитів зазначено неправильно – всі транзакції спліту (частини) платежу – будуть відхилені.
<br>
Після проведення успішного списання та сплітування по кожній фінансовій транзакції в рамках спліту направляється колбек (нотифікація) про успішний платіж. Приклад коллбека (нотифікації) вказаний у [[MerchantAPI#Повідомлення про платіж|повідомлення про платіж]]'''''.'''''


Після проведення успішного списання та сплітування по кожній фінансовій транзакції в рамках спліту направляється колбек (нотифікація) про успішний платіж. Приклад коллбека (нотифікації) вказаний у [[MerchantAPI#Повідомлення про платіж|повідомлення про платіж]]'''''.'''''
<p style="border: 1px solid #4A90E2; background-color: rgba(74, 144, 226, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
    Якщо параметр <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #D63384;">userPaymentInstrument</span> не є порожнім, створення платежу буде відбуватися автоматично.
</p>


'''''Якщо параметр userPaymentInstrument не є порожнім, створення платежу буде відбуватися автоматично'''''


Для різних інструментів передаються такі параметри:
Для різних інструментів передаються такі параметри:
Рядок 890: Рядок 891:


</syntaxhighlight>
</syntaxhighlight>
'''MasterPass'''<syntaxhighlight lang="json">
'''Kyivstar Money/Life Money /VodafoneMoney'''<syntaxhighlight lang="json" line="1">
{"userInfo":{"phone":"380935207603"}, /телефон реєстрації гаманця MasterPass/
"userPaymentInstrument": {
"userPaymentInstrument": {
      "instrumentType": "MasterPass",
       "instrumentType": "KSMoney / LifeMoney / VodafoneMoney",
      "alias": "string",/Аліас карти в гаманці MasterPass/
    }
}
 
</syntaxhighlight>
'''Kyivstar Money/Life Money /VodafoneMoney'''<syntaxhighlight lang="json" line="1">
"userPaymentInstrument": {
       "instrumentType": "KSMoney / LifeMoney / VodafoneMoney",
       "phone": "380xxYYYYYYY" }
       "phone": "380xxYYYYYYY" }


Рядок 923: Рядок 914:
<br>
<br>


==== Параметры BrowseInfo при 3DS оплаті ====
==== Створення замовлення для холдованих платежів ====
У зв'язку з переходом банків - екваєрів на модель роботи 3D Secure 2.x, при створенні замовлення з одночасною передачею інструменту оплати в запиті (карта, токен карти, токен Apple / Google Pay), необхідно передавати додаткові параметри пристрою (браузера) клієнта в заголовках і в тілі запиту createOrder, у прикладі вони виділені:
Перед використанням методу потрібне додаткове налаштування терміналів зі сторони техпідтримкиEasyPay.
<br>
 
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
Перед викликом цього методу потрібно викликати один із методів:
 
'''[[MerchantAPI#Створення сесії|- CreateApp]]'''
 
'''[[MerchantAPI#Створення сесії|- CreatePage]]'''
 
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/createOrder</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/createOrder</span>
</p><syntaxhighlight lang="json" line="1">
</p>'''REQUEST HEADERS'''<syntaxhighlight lang="http">
headers:
  PartnerKey: partnerName
[    "appId: b15c4b64-8964-4c80-852e-df59a0e0d9b6",
  locale: ua
    "pageId: 607514b8-1da5-490a-bdf3-0c6883131625",
  AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1
    "partnerKey: easypay-test",
  PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d
    "sign: XJ3roGhTLwAZXigBp/iVRdsXlZYdTSen3xSM+29GaRg=",
  Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4=
    "Content-Type:application/json",
</syntaxhighlight>'''REQUEST BODY'''<syntaxhighlight lang="json">
    "AcceptHeader:*/*",
    "User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
]
 
body:
{
{
   "order":{
   "order": {
     "serviceKey":"MERCHANT-TEST",
     "serviceKey": "string",
     "orderId":"test_3ds2x",
     "orderId": "string",
     "additionalItems":{
     "description": "string",
      "Merchant.UrlNotify":"http://url.noti.fy"
    "amount": 1.01,
    },
    "paymentOperation": "Hold",
     "description":"Easy test payment",
     "expire": "2019-04-15T07:49:20.009Z",
     "amount":"1"
     "isOneTimePay": true,
    "additionalItems": {}
   },
   },
   "userPaymentInstrument":{
   "urls": {
     "instrumentType":"Card",
     "success": "string",
     "pan":"4444444444444444",
     "failed": "string"
     "expire":"0599",
  }
    "cvv":"123"
}
  },
 
  "browserInfo":{
</syntaxhighlight>'''Опис параметрів''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    "colorDepth":"24",
     <tr>
    "screenHeight":"824",
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
    "screenWidth":"1536",
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
    "language":"uk-UA",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>serviceKey</code>''' </td>
    "javaEnabled":"false",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор послуги  </td></tr><tr>
    "javascriptEnabled": "true"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;"><code>orderId</code> </td>
    "timeZone":"-180"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">унікальний ідентифікатор замовлення в системі партнера  </td></tr><tr>
  }
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;"><code>description</code> </td>
}
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">опис замовлення  </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;"><code>amount</code></td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума замовлення  </td></tr>
<tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentOperation = Hold</code>'''  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">параметр, що вказує, що подальший платіж буде холдовано(зарезервовано) з можливістю підтвердження або скасування. </td></tr>
 
</table>
 


</syntaxhighlight>'''Параметри''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"><tr>
'''Необов'язкові параметри'''
<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    <tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th><tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AcceptHeader:*/*</code>''' </td>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">передавайте без змін</td></tr><tr>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>User-Agent</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;"><code>expire</code> </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">передавайте клієнтський User-Agent </td></tr></table>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">час життя замовлення.  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Після закінчення вказаного часу замовлення оплатити неможливо. При ненульовому значенні на платіжній сторінці відображатиметься таймер. Значення повинне перевищувати поточний час щонайменше на 5 хвилин. Типове значення — 3 дні.
 
</td>
</tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>isOneTimePay</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">вказує, чи можна оплатити одне замовлення кілька разів.  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Типове значення — True.</td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>additionalItems</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">додаткові параметри  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">наприклад:
<code>"additionalItems":</code>
<code>{ "PayerEmail" : "[email protected]",</code>
<code>"PayerPhone" : "380930007603"</code>
<code>},</code>  


* де PayerEmail — емейл клієнта для сповіщення у разі неоплаченого замовлення та автоматичної підстановки на платіжній сторінці.


'''Приклад, як збирати дані на JS:'''<syntaxhighlight lang="markdown" line="1">
* PayerPhone — номер телефону для надсилання повідомлення (SMS або Viber) про неоплачене замовлення (через 15–20 хвилин після виклику CreateOrder).</td><tr>
getBrowserInfo() {
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">URLs </td>
    let browserInfoModel = {};
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">URL сторінки успішної оплати для редиректу клієнта.  </td>
    browserInfoModel.colorDepth = window.screen.colorDepth.toString();
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">failed — URL сторінки помилки для редиректу клієнта.
    browserInfoModel.screenHeight = window.screen.height.toString();
приклад параметрів, що передаються на url.success (без errorCode) і
    browserInfoModel.screenWidth = window.screen.width.toString();
 
    browserInfoModel.language = window.navigator.language;
<code>url.failed: ?serviceKey=merchanttest-5310&orderId=re9r9er94jr&amount=1.20&description=Тестове+описання+</code>
    browserInfoModel.javaEnabled = window.navigator.javaEnabled();
    browserInfoModel.timeZone = (new Date()).getTimezoneOffset().toString();
    return browserInfoModel;
  }


</syntaxhighlight>Якщо все передано правильно, то отримайте відповідь як нижче у прикладі '''"Якщо передано userPaymentInstrument (для випадку з 3DSecure)",''' або помилку оплати з картки, наприклад, "Недостатньо коштів".
<code>замовлення&transactionId=722443797&date=2019-06-11T14:49:07&recurrentId=&errorCode=PAYMENT_ALFABANK_-2006&sign=</code>


У випадку, якщо додаткові параметри передані неправильно, отримайте помилку платіжного сервісу, наприклад:<syntaxhighlight lang="markdown">
<code>eYkFYixpB3wnKoZDzkAiqWgdMkeHETDWmDsFMCaPO44=</code>
"errorCode":"PAYMENT_PUMB_SERVICE_FAILURE",
</td>
    "errorMessage":"Технічна помилка екваєра. Зверніться до служби підтримки EasyPay, або спробуйте пізніше"
</tr></table>


</syntaxhighlight>'''Відповідь (RESPONSE)''':<syntaxhighlight lang="json" line="1">
header:
відсутній


body:
'''RESPONSE''' <syntaxhighlight lang="json">
HEADERS
-------
BODY
{
{
    "accountInfo": null,
  "accountInfo": null,
    "bankingDetails": null,
  "bankingDetails": null,
    "amount": 1,
  "amount": 1,
     "amountMax": 4999,
  "amountMax": 4999,
     "amountMin": 0.01,
  "amountMin": 0.01,
     "paymentInstrumentsTypes": [
  "paymentInstrumentsTypes": [
     {
      "instrumentType": "EMoney",
      "commission": 0,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": []
    },
     {
      "instrumentType": "RCard",
      "commission": 2,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": []
    },
     {
      "storedCards": [],
      "instrumentType": "Card",
      "commission": 2,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": [
         {
         {
            "instrumentType": "EMoney",
          "instrumentId": 4211698,
            "commission": 0,
          "instrumentType": "Card",
            "amountMin": 0.01,
          "instrumentValue": null,
            "amountMax": 4999,
          "alias": null,
            "userPaymentInstruments": []
          "commission": 2,
        },
          "loyaltyCommission": null,
          "actionsKeys": null,
          "priorityIndex": 0,
          "additionalParams": {}
        }
      ]
    },
    {
      "walletStatus": "NotRegistered",
      "instrumentType": "MasterPass",
      "commission": 2,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": []
    },
    {
      "instrumentType": "LifeMoney",
      "commission": 0.03,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": [
         {
         {
            "instrumentType": "RCard",
          "instrumentId": 5098216,
            "commission": 2,
          "instrumentType": "LifeMoney",
            "amountMin": 0.01,
          "instrumentValue": null,
            "amountMax": 4999,
          "alias": null,
            "userPaymentInstruments": []
          "commission": 0.03,
        },
          "loyaltyCommission": null,
        {
          "actionsKeys": null,
            "storedCards": [],
          "priorityIndex": 0,
            "instrumentType": "Card",
          "additionalParams": {}
            "commission": 2,
        }
            "amountMin": 0.01,
      ]
            "amountMax": 4999,
    }
            "userPaymentInstruments": [
  ],
                {
  "forwardUrl": "https://easypay.ua/whitepage/81b14a73-730c-40d4-8064-ce1c10e0c53b",
                    "instrumentId": 4211698,
  "error": null
                    "instrumentType": "Card",
}
                    "instrumentValue": null,
 
                    "alias": null,
</syntaxhighlight>
                    "commission": 2,
                    "loyaltyCommission": null,
                    "actionsKeys": null,
                    "priorityIndex": 0,
                    "additionalParams": {}
                }
            ]
        },


        {
            "walletStatus": "NotRegistered",
            "instrumentType": "MasterPass",
            "commission": 2,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": []
        },
        {
            "instrumentType": "LifeMoney",
            "commission": 0.03,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": [
                {
"instrumentId": 5098216,
                    "instrumentType": "LifeMoney",
                    "instrumentValue": null,
                    "alias": null,
                    "commission": 0.03,
                    "loyaltyCommission": null,
                    "actionsKeys": null,
                    "priorityIndex": 0,
                    "additionalParams": {}
                }
            ]
        }
    ],
    "forwardUrl": https://easypay.ua/whitepage/81b14a73-730c-40d4-8064-ce1c10e0c53b,
  "error": null,
}


Якщо передано userPaymentInstrument (для випадку з 3DSecure):
<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
{
     <tr>
  "paymentState":"WaitVerify",
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
  "action":"https://merchantapi.easypay.ua/api/payment/redirect/4df828bf-379b-4e88-8868-f667f12d74a9",
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
  "actionContent":"<html><head></head><body><form action='https://acs.monobank.com.ua/PaReqVISA.jsp' method='post' id='submitForm'><input type='hidden' name='PaReq'  value='eJxVUsluwjAQ/RWUY6VgO2RFg1FoqJpDUgThwNF1XAglS7NUpF9fm4alt3nzxvNm3hjm5/w0+hZ1k5XFTCNjrI1Ewcs0K/YzbZu86K42p5AcaiGCjeBdLShEomnYXoyydKY5mGNuWh966mKmm6lH9HcHY91zLeZMmGkT19EorPy1+KIwCFGpMzYAXaHsWPMDK1oKjH8twpiaBBumBWiAkIs6DCgh9oQ4rmsRW2pgQH9pKFgu6NLf7Fb+7ikIN8k6XGyT8C0GdKGAl13R1j21zQmgK4CuPtFD21bNFCHBmr5i/bhjCJAiAN2HWnUqamSjc5bS+Mj7+Pg5iY5LIwp8HCe7nyjZ4igJZ4BUBaSsFdTABsYecUfEmxIyteQ6lzywXE1AidpgiKFSEv4D8ZgA6Xstz9JTz5XUDYE4V2UhZIU08xYDus/7/Kos5a0yz7Kx6dgWNpStl5R6n0knDBNblwYKAFKP0HAxNBxbRv8+wS+7NLXc' /><input type='hidden' name='TermUrl' value='https://merchantapi.easypay.ua/api/payment/confirm/185ff3c7-8daa-4715-af1a-23f7554d19bb,0e101596-2a6a-4a0e-92e2-dac1e7a5c69d,-1' /><input type='hidden' name='MD' value='ee6eda7e-6252-41af-a696-825e85b34878' /></form><script>document.getElementById('submitForm').submit();</script> </body></html>",
  "actionType":"FormRedirect",
  "status":"Need3Ds", "alternativeRedirectUrl":"https://merchantapi.easypay.ua/api/payment/altredirect/00f9befe-a200-4e4d-ae27-0a4bdbc443fc",
  "transactionId":860094566,
  "retrievalReferenceNo":null,
  "responseItems":{
    "SessionId":"a9692063-2db5-4d25-8a66-e62b4476d1e4",
    "MerchantOpertion":"CheckPaymentOperationOrder",
    "Operation":"CheckPayment",
    "BankingDetails":""
  },
  "error":null
}
 
Якщо передано userPaymentInstrument (для випадку без 3DSecure):
{
  "redirectUrl":null,
  "action":null,
  "paymentState":"Confirmed",
  "status":"Done",
  "actionType":"UrlRedirect",
  "transactionId":847870521,
"retrievalReferenceNo":null,
  "responseItems": null,
  "error":null
}
 
 
</syntaxhighlight>'''Параметри'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
     <tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
     </tr><tr>
     </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>accountInfo</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>accountInfo</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">додаткова інформація про послугу  </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">додаткова інформація про послугу  </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Якщо параметр відсутній, використовується значення ServiceKey з тіла запиту CreateOrder'''.'''
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
 
</td>
</tr><tr>
</tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума замовлення  </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума замовлення  </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Якщо параметр відсутній, використовується значення OrderId, передане в тілі запиту CreateOrder.</td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amountMax</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amountMax</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">максимальна сума платежу за послугою </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">максимальна сума платежу за послугою </td>
Рядок 1130: Рядок 1112:
     </tr><tr>
     </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>forwardUrl</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>forwardUrl</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">URL сторінки оплати, для партнерів які не мають сертифікатів PCI DSS для обробки карткових даних. Або якщо партнер не має платіжної сторінки. </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">URL сторінки оплати, для партнерів, у яких немає сертифікатів '''PCI DSS''' для обробки карткових даних. Або якщо у партнера немає власної платіжної сторінки. </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">на сторінці оплати можемо відключати елементи інтерфейсу:
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
- логотип EasyPay можемо приховувати
 
- лічильник часу, що залишився до оплати, може бути відображений/прихований
 
- поле "Призначення" (можемо вимкнути, або за замовчуванням зробити відкритим/закритим)
 
- рядок з логотипом партнера та назвою можемо приховати
 
- поле введення імейл сховати / відобразити
 
- рядок з "Номер замовлення" приховати/показати
</td>


       </tr><tr>
       </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentInstrumentsTypes</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentInstrumentsTypes</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">список інструментів оплати. Інструменти '''Emoney''', vcard та '''RCard''' видаємо тільки для користувачів, які авторизовані в системі EasyPay. </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">список інструментів оплати. Інструмент '''RCard''' надається лише користувачам, які авторизовані в системі EasyPay.
Можливі значення '''instrumentType''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
Можливі значення '''instrumentType'''
Можливі значення '''instrumentType:'''
* Emoney – гаманець EasyPay
* Card – платіжна картка
* Card – платіжна картка
* RCard – платіжна картка, підв'язана в системі EasyPay
* RCard – платіжна картка, підв'язана в системі EasyPay
* ApplePay – оплата через  ApplePay
* GooglePay – оплата через GooglePay
* MasterPass – гаманець MASTERPASS
* QrMasterpass
* LifeMoney – мобільні гроші Лайф.
* KsMoney –  мобільні гроші Київстар
* VodafoneMoney – мобільні гроші Водафон
* картки лояльності Fishka
</td>
</td>
</tr>
</tr></table>
<tr>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>masterPassWalletStatus</code>'''</td>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">статус гаманця MASTERPASS. </td>
Холдування платежу можна здійснити, оплативши замовлення на сторінці оплати (перейти за '''forwardUrl'''), або вказавши в запиті '''createOrder''' інструмент оплати у '''userPaymentInstrument''' (див. [[MerchantAPI#Створення замовлення|Створення замовлення]]).
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
 
Можливі значення див. у [[MerchantAPI#Створення замовлення на перекази між картами|Створення замовлення на перекази між картами]]
Клієнту відобразиться сторінка успішного платежу EasyPay, або сторінка, вказана в “urls”:{}.
</td>
 
</tr>
 
<tr>
Після '''спроби холдування платежу''' партнеру буде відправлено '''сповіщення''', згідно з варіантом, вказаним в налаштуваннях сервісу [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]].
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>masterPassCommission</code>''' </td>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">розмір комісії при оплаті MASTERPASS. </td>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
Статус платежу необхідно перевірити методом '''[[MerchantAPI#Перевірка статусу платежу|orderState]]'''
Можливі значення '''instrumentType'''
* Emoney – гаманець EasyPay
 
* Card – платіжна картка
 
* RCard – платіжна картка, підв'язана в системі EasyPay
Після успішного холдування необхідно викликати або '''[[MerchantAPI#Розхолдування платежу|unHoldOrder]]''' , або '''[[MerchantAPI#Скасування платежу|orderCancel]]'''
* ApplePay – оплата через  ApplePay
 
* GooglePay – оплата через GooglePay
Якщо протягом '''повних 10 днів''' після холдування жоден з цих методів не буде викликаний, на '''11-й день близько 05:00''' платіж може бути '''відхилений емітентом''', і кошти стануть доступні клієнту.
* MasterPass – гаманець MASTERPASS
 
* QrMasterpass
 
* LifeMoney – мобільні гроші Лайф.
 
* KsMoney –  мобільні гроші Київстар
У транзакцію додається коментар: ''Автоматично відхилено через 10 днів. (SYSTEM ACCOUNT [dateTime])''
* VodafoneMoney – мобільні гроші Водафон
 
* картки лояльності Fishka
Сповіщення партнеру при цьому '''не надсилається'''.
</td>
</tr>


</table>
==== Розхолдування платежу ====
Якщо цей метод не буде викликано протягом 10 днів, кошти повертаються клієнту, а платіж у системі відхиляється.


Перед викликом цього методу необхідно здійснити '''[[MerchantAPI#Створення замовлення для холдованих платежів|холдування транзакції]]'''


<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/unHoldOrder</span></p>


'''3DSecure / mobile payments case:'''<syntaxhighlight lang="json">
'''REQUEST''' '''HEADERS''' <syntaxhighlight lang="http">
Якщо передано userPaymentInstrument (для випадку з 3DSecure):
'PartnerKey: easypay-test'
'locale: ua'
'AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='
</syntaxhighlight>


'''REQUEST BODY'''<syntaxhighlight lang="json">
{
{
   "paymentState":"WaitVerify",
   "transactionId":955537573,
   "action":"https://merchantapi.easypay.ua/api/payment/redirect/4df828bf-379b-4e88-8868-f667f12d74a9",
   "orderId":"hold_4",
   "actionContent":"<html><head></head><body><form" action="https://acs.monobank.com.ua/PaReqVISA.jsp' method='post' id='submitForm'><input type="hidden" name="PaReq" value='eJxVUsluwjAQ/RWUY6VgO2RFg1FoqJpDUgThwNF1XAglS7NUpF9fm4alt3nzxvNm3hjm5/w0+hZ1k5XFTCNjrI1Ewcs0K/YzbZu86K42p5AcaiGCjeBdLShEomnYXoyydKY5mGNuWh966mKmm6lH9HcHY91zLeZMmGkT19EorPy1+KIwCFGpMzYAXaHsWPMDK1oKjH8twpiaBBumBWiAkIs6DCgh9oQ4rmsRW2pgQH9pKFgu6NLf7Fb+7ikIN8k6XGyT8C0GdKGAl13R1j21zQmgK4CuPtFD21bNFCHBmr5i/bhjCJAiAN2HWnUqamSjc5bS+Mj7+Pg5iY5LIwp8HCe7nyjZ4igJZ4BUBaSsFdTABsYecUfEmxIyteQ6lzywXE1AidpgiKFSEv4D8ZgA6Xstz9JTz5XUDYE4V2UhZIU08xYDus/7/Kos5a0yz7Kx6dgWNpStl5R6n0knDBNblwYKAFKP0HAxNBxbRv8+wS+7NLXc' /><input type='hidden' name='TermUrl' value='https://merchantapi.easypay.ua/api/payment/confirm/185ff3c7-8daa-4715-af1a-23f7554d19bb,0e101596-2a6a-4a0e-92e2-dac1e7a5c69d,-1' /><input type='hidden' name='MD' value='ee6eda7e-6252-41af-a696-825e85b34878' /></form><script>document.getElementById('submitForm').submit();</script> </body></html>",
   "serviceKey":"MERCHANT-TEST",
  "actionType":"FormRedirect",
  "amount": 1.2
  "status":"Need3Ds", "alternativeRedirectUrl":"https://merchantapi.easypay.ua/api/payment/altredirect/00f9befe-a200-4e4d-ae27-0a4bdbc443fc",
}
  "transactionId":"860094566",
</syntaxhighlight>
  "retrievalReferenceNo":"null",
'''<br />RESPONSE''' <syntaxhighlight lang="json">
  "responseItems":{
    "SessionId":"a9692063-2db5-4d25-8a66-e62b4476d1e4",
    "MerchantOpertion":"CheckPaymentOperationOrder",
    "Operation":"CheckPayment",
    "BankingDetails":""
  },
  "error":null
}
 
Якщо передано userPaymentInstrument (для випадку без 3DSecure):
{
{
  "redirectUrl":null,
"paymentState": "accepted",
  "action":null,
"error": null
  "paymentState":"Confirmed",
  "status":"Done",
  "actionType":"UrlRedirect",
  "transactionId":847870521,
"retrievalReferenceNo":null,
  "responseItems": null,
  "error":null
}
}
 
</syntaxhighlight>'''Опис параметрів запиту''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"><tr>
</syntaxhighlight>
 
<br>'''Параметри'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    <tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>''' </td>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>'''</td>
* '''Confirmed''' - платіж підтверджений (кінцевий статус, якщо "status": "done")
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">унікальний номер платежу в системі EasyPay</td>
* '''WaitConfirm''' - платіж у статусі "обробляється", необхідно додатково запросити фінальний статус платежу
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
* '''WaitVerify''' - від клієнта очікується підтвердження (наприклад, якщо "status": "Need3Ds" - необхідно пройти перевірку 3D Secure) </td></tr><tr>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>status</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>orderId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">унікальний ідентифікатор замовлення в системі партнера </td>
* '''Done''' - додаткові дії не потрібні, якщо при цьому "зберіганнядержави":"затверджено", означає платіж повністю успішний. При іншому значенні paymentState- платіж не прийняв кінцевий статус, необхідно запросити статус ([[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]]).
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
* '''Need3Ds''' - необхідно підтвердження 3D Secure від клієнта ([[MerchantAPI#Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки|Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки]])
    </tr><tr>
* '''NeedConfirmCode''' - необхідно надіслати код перевірки зі смс методом confirmCodeVerification ([[MerchantAPI#Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки|Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки]])
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>''' </td>
* '''NeedLookup''' - необхідно надіслати код перевірки з смс '''''методом confirmCodeVerification ('''''[[MerchantAPI#Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки|Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки]]) </td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">необов’язковий параметр, торгова сума, яку слід списати з картки.
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>actionType</code>''' </td>
</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">тип наступної дії:
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Різниця повернеться клієнту на картку протягом '''1–2 днів''', залежно від регламенту банку
 
</td>
    </tr></table>
'''<br>Опис параметрів відповіді'''  
<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"><tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">статус платежу </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Можливі '''paymentState:'''
• '''accepted -''' платіж успішний (кінцевий статус)


* '''"FormRedirect"''' -  необхідно створити сторінку (форму) з html-коду, який передано у параметрі "actionContent" :'''"<html>...</html>",''' відкрити її клієнту, наприклад, для проходження ним 3D-secure перевірки. Альтернативним варіантом є переадресація клієнта за посиланням параметра '''"alternativeRedirectUrl".'''
'''pending -''' платіж в обробці (некінцевий статус)
* Після проходження перевірки клієнт буде передресовано на фінальну сторінку EasyPay або на


<code>"urls": {</code>
• '''declined -''' платіж відхилений (кінцевий статус)


<code>"success": "string",</code>
• '''none -''' платіж не знайдено
</td>
    </tr></table>


<code>"failed": "string"</code>


<code>}</code>


* '''"UrlRedirect"''' - переадресувати клієнта на посилання з "action" або переадресувати клієнта за посиланням з '''"alternativeRedirectUrl".'''
Для платежів з 2DS переадресація на сторінку банку-емітента не відбувається, і користувач відразу отримує статус платежу.
* '''"ConfirmCode"''' -необхідно надіслати код перевірки з смс методом '''confirmCodeVerification''' ([[MerchantAPI#Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки|Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки]])


'''"None"''' - можливий при використанні інструменту гаманець '''("instrumentType": "EMoney"),''' кошти успішно списані з гаманця, партнеру надсилається повідомлення про списання. </td></tr><tr>
Після '''спроби розхолдування платежу''' партнеру буде надіслано '''сповіщення''' згідно з варіантом, вказаним в налаштуваннях сервісу [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>actionContent</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''"<html>...</html>"''' - html форма сторінки банку для введення коду 3DS. Сформувати сторінку з коду та відкрити її клієнту. Після підтвердження платежу відбудеться 302-й редирект на ваші "urls" із запиту createOrder, або на фінальну сторінку EasyPay </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер транзакції в EasyPay </td></tr></table>


'''<br />2DSecure case:'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
Статус платежу необхідно перевіряти методом '''[[MerchantAPI#Перевірка статусу платежу|orderState]]'''
    <tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''"Confirmed"''' та '''"status": "Done"''' - платіж пройшов успішно. При інших значеннях необхідно перевірити статус '''''платежу''''' '''('''[[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]]''')''' </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>status</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''"Done" -'''платіж завершено, додаткові дії не потрібні.  При '''"paymentState":'''  


* '''"Confirmed"''' - означає, що транзакція на стороні EasyPay прийнята (http - оповіщення успішно доставлено партнеру) </td></tr><tr>
==== Параметри BrowseInfo при 3DS оплаті ====
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>''' </td>
У зв'язку з переходом банків - екваєрів на модель роботи 3D Secure 2.x, при створенні замовлення з одночасною передачею інструменту оплати в запиті (карта, токен карти, токен Apple / Google Pay), необхідно передавати додаткові параметри пристрою (браузера) клієнта в заголовках і в тілі запиту createOrder, у прикладі вони виділені:
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер транзакції до EasyPay </td></tr></table>
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
 
<br>
==== Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки ====
У випадку "<code>actionType</code>": "<code>ConfirmCode</code>", клієнту прийде код підтвердження, який потрібно передати до EasyPay
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/payment/confirmCodeVerification</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/createOrder</span>
</p>
</p>'''HEADERS'''
'''Request'''<syntaxhighlight lang="json" line="1">
  "appId: b15c4b64-8964-4c80-852e-df59a0e0d9b6",<br>
headers
    "pageId: 607514b8-1da5-490a-bdf3-0c6883131625",<br>
    "partnerKey: easypay-test",<br>
    "sign: XJ3roGhTLwAZXigBp/iVRdsXlZYdTSen3xSM+29GaRg=",<br>
    "Content-Type:application/json",<br>
    <span style="color: green;">"AcceptHeader:*/*",</span><br>
    <span style="color: green;">"User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"</span><br>
'''BODY'''
<div style="font-family: monospace; white-space: pre-line;">


"Content-Type": "application/json"
  "order":{
"PartnerKey": "partnerName"
    "serviceKey":"MERCHANT-TEST",
"locale": "ua"
    "orderId":"test_3ds2x",
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
    "additionalItems":{
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
      "Merchant.UrlNotify":"http://url.noti.fy"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
    },
 
    "description":"Easy test payment",
body
    "amount":"1"
{
  },
  "code": "string"
  "userPaymentInstrument":{
}
    "instrumentType":"Card",
    "pan":"4444444444444444",
    "expire":"0599",
    "cvv":"123"
  },
  <span style="color: green;">
  "browserInfo":{
    "colorDepth":"24",
    "screenHeight":"824",
    "screenWidth":"1536",
    "language":"uk-UA",
    "javaEnabled":"false",
    "javascriptEnabled": "true",
    "timeZone":"-180"
  }
  </span>
 
</div>






</syntaxhighlight>
'''Response'''<syntaxhighlight lang="json" line="1">
headers
відсутній


body
<br>
{  }
'''Параметри''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"><tr>
</syntaxhighlight>Якщо "status":"Need3Ds", то клієнту потрібно пройти 3DS перевірку в залежності від значення '''"actionType":'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    <tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>FormRedirect</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AcceptHeader:*/*</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">необхідно СТВОРИТИ  сторінку (форму) з html-коду, який передано у параметрі </td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">передавайте без змін</td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>actionContent</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>User-Agent</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">"<html>...</html>", відкрити її клієнту для проходження ним 3D-secure перевірки. Альтернативним варіантом є переадресація клієнта за посиланням параметра '''"alternativeRedirectUrl"''' </td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">передавайте клієнтський User-Agent </td></tr></table>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>UrlRedirect</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">необхідно переадресувати клієнта на посилання з '''"action"''' або переадресувати клієнта за посиланням з '''"alternativeRedirectUrl".''' Відобразиться форма банку емітента картки для перевірки 3D Secure. Після введення коду клієнта переадресує на сторінку успіху чи помилки. Адреси сторінок передаються на етапі створення замовлення.


<code>"urls": {</code>


<code>   "success": "string",</code>
'''Приклад, як збирати дані на JS:'''<syntaxhighlight lang="markdown" line="1">
getBrowserInfo() {
    let browserInfoModel = {};
    browserInfoModel.colorDepth = window.screen.colorDepth.toString();
    browserInfoModel.screenHeight = window.screen.height.toString();
    browserInfoModel.screenWidth = window.screen.width.toString();
    browserInfoModel.language = window.navigator.language;
    browserInfoModel.javaEnabled = window.navigator.javaEnabled();
    browserInfoModel.timeZone = (new Date()).getTimezoneOffset().toString();
    return browserInfoModel;
  }


<code>   "failed": "string"</code>
</syntaxhighlight>Якщо все передано правильно, то отримайте відповідь як нижче у прикладі '''"Якщо передано userPaymentInstrument (для випадку з 3DSecure)",''' або помилку оплати з картки, наприклад, "Недостатньо коштів".


<code>}</code> </td></tr></table>
У випадку, якщо додаткові параметри передані неправильно, отримайте помилку платіжного сервісу, наприклад:<syntaxhighlight lang="markdown">
"errorCode":"PAYMENT_PUMB_SERVICE_FAILURE",
    "errorMessage":"Технічна помилка екваєра. Зверніться до служби підтримки EasyPay, або спробуйте пізніше"


<br>
</syntaxhighlight>'''Відповідь (RESPONSE)''':<syntaxhighlight lang="json" line="1">
header:
відсутній


==== Перевірка статусу платежу ====
body:
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
{
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
    "accountInfo": null,
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/orderState</span>
    "bankingDetails": null,
</p>
    "amount": 1,
 
    "amountMax": 4999,
'''Request'''<syntaxhighlight lang="json" line="1">
    "amountMin": 0.01,
headers:
     "paymentInstrumentsTypes": [
"Content-Type": "application/json"
        {
"PartnerKey": "partnerName"
            "instrumentType": "EMoney",
"locale": "ua"
            "commission": 0,
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
            "amountMin": 0.01,
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
            "amountMax": 4999,
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
            "userPaymentInstruments": []
 
        },
body
        {
{
            "instrumentType": "RCard",
  "serviceKey":"MERCHANT-TEST",
            "commission": 2,
  "orderId":"test_20240524-0015",
            "amountMin": 0.01,
  "transactionId":"1413668587"
            "amountMax": 4999,
}
            "userPaymentInstruments": []
 
        },
</syntaxhighlight>
        {
            "storedCards": [],
            "instrumentType": "Card",
            "commission": 2,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": [
                {
                    "instrumentId": 4211698,
                    "instrumentType": "Card",
                    "instrumentValue": null,
                    "alias": null,
                    "commission": 2,
                    "loyaltyCommission": null,
                    "actionsKeys": null,
                    "priorityIndex": 0,
                    "additionalParams": {}
                }
            ]
        },


        {
            "walletStatus": "NotRegistered",
            "instrumentType": "MasterPass",
            "commission": 2,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": []
        },
        {
            "instrumentType": "LifeMoney",
            "commission": 0.03,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": [
                {
"instrumentId": 5098216,
                    "instrumentType": "LifeMoney",
                    "instrumentValue": null,
                    "alias": null,
                    "commission": 0.03,
                    "loyaltyCommission": null,
                    "actionsKeys": null,
                    "priorityIndex": 0,
                    "additionalParams": {}
                }
            ]
        }
    ],
    "forwardUrl": https://easypay.ua/whitepage/81b14a73-730c-40d4-8064-ce1c10e0c53b,
  "error": null,
}


'''Response'''<syntaxhighlight lang="json" line="1">
Якщо передано userPaymentInstrument (для випадку з 3DSecure):
headers:
{
відсутній
  "paymentState":"WaitVerify",
  "action":"https://merchantapi.easypay.ua/api/payment/redirect/4df828bf-379b-4e88-8868-f667f12d74a9",
  "actionContent":"<html><head></head><body><form action='https://acs.monobank.com.ua/PaReqVISA.jsp' method='post' id='submitForm'><input type='hidden' name='PaReq'  value='eJxVUsluwjAQ/RWUY6VgO2RFg1FoqJpDUgThwNF1XAglS7NUpF9fm4alt3nzxvNm3hjm5/w0+hZ1k5XFTCNjrI1Ewcs0K/YzbZu86K42p5AcaiGCjeBdLShEomnYXoyydKY5mGNuWh966mKmm6lH9HcHY91zLeZMmGkT19EorPy1+KIwCFGpMzYAXaHsWPMDK1oKjH8twpiaBBumBWiAkIs6DCgh9oQ4rmsRW2pgQH9pKFgu6NLf7Fb+7ikIN8k6XGyT8C0GdKGAl13R1j21zQmgK4CuPtFD21bNFCHBmr5i/bhjCJAiAN2HWnUqamSjc5bS+Mj7+Pg5iY5LIwp8HCe7nyjZ4igJZ4BUBaSsFdTABsYecUfEmxIyteQ6lzywXE1AidpgiKFSEv4D8ZgA6Xstz9JTz5XUDYE4V2UhZIU08xYDus/7/Kos5a0yz7Kx6dgWNpStl5R6n0knDBNblwYKAFKP0HAxNBxbRv8+wS+7NLXc' /><input type='hidden' name='TermUrl' value='https://merchantapi.easypay.ua/api/payment/confirm/185ff3c7-8daa-4715-af1a-23f7554d19bb,0e101596-2a6a-4a0e-92e2-dac1e7a5c69d,-1' /><input type='hidden' name='MD' value='ee6eda7e-6252-41af-a696-825e85b34878' /></form><script>document.getElementById('submitForm').submit();</script> </body></html>",
  "actionType":"FormRedirect",
  "status":"Need3Ds", "alternativeRedirectUrl":"https://merchantapi.easypay.ua/api/payment/altredirect/00f9befe-a200-4e4d-ae27-0a4bdbc443fc",
  "transactionId":860094566,
  "retrievalReferenceNo":null,
  "responseItems":{
    "SessionId":"a9692063-2db5-4d25-8a66-e62b4476d1e4",
    "MerchantOpertion":"CheckPaymentOperationOrder",
    "Operation":"CheckPayment",
    "BankingDetails":""
  },
  "error":null
}


body:
Якщо передано userPaymentInstrument (для випадку без 3DSecure):
"merchantKey":"easypay-test",
{
   "transactionId":1413668587,
   "redirectUrl":null,
   "orderId":"test_20240524-0015",
   "action":null,
  "amount":3.000000,
   "paymentState":"Confirmed",
   "paymentState":"declined",
   "status":"Done",
  "refundTransactionId":1413673292,
   "actionType":"UrlRedirect",
   "":
  "transactionId":847870521,
  "paymentsList":[
"retrievalReferenceNo":null,
   
  "responseItems": null,
  ],
   "refunds":[
    {
      "refundTransactionId":1413669380,
      "paymentState":"accepted",
      "refundAmount":1.10,
      "dateAccepted":"2024-05-24T16:14:45+03:00",
      "dateDeclined":null,
      "datePost":"2024-05-24T16:14:39+03:00"
    },
    {
      "refundTransactionId":1413673292,
      "paymentState":"accepted",
      "refundAmount":1.90,
      "dateAccepted":"2024-05-24T16:19:40+03:00",
      "dateDeclined":null,
"datePost":"2024-05-24T16:19:33+03:00"
    }
  ],
   "error":null
   "error":null
}
}


</syntaxhighlight>
 
'''<br />Параметри'''
</syntaxhighlight>'''Опис параметрів'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
     <tr>
     <tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;"></th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">'''Фінальний'''
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
'''статус?'''</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">'''Значення/ подальші дії'''</th>
     </tr><tr>
     </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>accepted</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>accountInfo</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">         '''так'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">додаткова інформація про послугу  </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">платіж прийнято</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Якщо параметр відсутній, використовується значення ServiceKey з тіла запиту CreateOrder'''.'''  
    </tr><tr>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>declined</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">так</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">платіж відхилений
</td>
</td>
</tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума замовлення  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Якщо параметр відсутній, використовується значення OrderId, передане в тілі запиту CreateOrder.</td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amountMax</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">максимальна сума платежу за послугою </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
</tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amountMin</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">мінімальна сума за послугою </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
     </tr><tr>
     </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>pending</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>forwardUrl</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ні</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">URL сторінки оплати, для партнерів які не мають сертифікатів PCI DSS для обробки карткових даних. Або якщо партнер не має платіжної сторінки. </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">платіж знаходиться в обробці, необхідно повторити запит статусу пізніше
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">на сторінці оплати можемо відключати елементи інтерфейсу:
</td>
- логотип EasyPay можемо приховувати
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>none</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">- </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">статус платежу не визначено, необхідно повторити запит статусу до отримання кінцевого статусу</td>
    </tr></table>


- лічильник часу, що залишився до оплати, може бути відображений/прихований


'''Нетипові відповіді запит статусу:'''
- поле "Призначення" (можемо вимкнути, або за замовчуванням зробити відкритим/закритим)


* Якщо платіж не знайдено, прийде відповідь:
- рядок з логотипом партнера та назвою можемо приховати
<syntaxhighlight lang="json" line="1">
{
"error":{
"errorCode":"MERCHANT_ORDERID_NOT_FOUND",
"title":null,
"description":null,
"errorMessage":"MERCHANT_ORDERID_NOT_FOUND",
"fieldErrors":[  ]
}


</syntaxhighlight>
- поле введення імейл сховати / відобразити


* Якщо платіж (сторінка, замовлення) не були відкриті клієнтом або не було спроби оплати, прийде відповідь:
- рядок з "Номер замовлення" приховати/показати
<syntaxhighlight lang="json" line="1">
</td>
{
"merchantKey": "easypay-test",
"transactionId": 0,
"orderId": "Some orderId2",
"amount": 0,
"paymentState": "pending",
"refundTransactionId": null,
"paymentsList": [],
"error": null
}


</syntaxhighlight>
      </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentInstrumentsTypes</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">список інструментів оплати. Інструменти '''Emoney''', vcard та '''RCard''' видаємо тільки для користувачів, які авторизовані в системі EasyPay. </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
Можливі значення '''instrumentType'''
* Emoney – гаманець EasyPay
* Card – платіжна картка
* RCard – платіжна картка, підв'язана в системі EasyPay
* ApplePay – оплата через  ApplePay
* GooglePay – оплата через GooglePay
* LifeMoney – мобільні гроші Лайф.
* KsMoney –  мобільні гроші Київстар
* VodafoneMoney – мобільні гроші Водафон
* картки лояльності Fishka
</td>
</tr></table>


* Якщо отримано помилку на замовлення на етапі визначення реквізитів:
<syntaxhighlight lang="json" line="1">
{
  "merchantKey": "easypay-test",
  "transactionId": 0,
  "orderId": "Some orderId",
  "amount": 0,
  "paymentState": "declined",
  "refundTransactionId": null,
  "paymentsList": [],
  "error": {
    "errorCode": "PROVIDER_ACCOUNT_INVALID", (ерор код може (має) відрізнятися від того, що в прикладі)
    "title": "Помилка системи",
    "description": "Акаунт не знайдено",
    "errorMessage": "string"
  }
}


</syntaxhighlight>


'''3DSecure / mobile payments case:'''<syntaxhighlight lang="json">
Якщо передано userPaymentInstrument (для випадку з 3DSecure):


При виконанні запиту статусу на замовлення, у яких є спліт (платіжна опція) - повертається наступна модель:
{
  "paymentState":"WaitVerify",
  "action":"https://merchantapi.easypay.ua/api/payment/redirect/4df828bf-379b-4e88-8868-f667f12d74a9",
  "actionContent":"<html><head></head><body><form" action="https://acs.monobank.com.ua/PaReqVISA.jsp' method='post' id='submitForm'><input type="hidden" name="PaReq" value='eJxVUsluwjAQ/RWUY6VgO2RFg1FoqJpDUgThwNF1XAglS7NUpF9fm4alt3nzxvNm3hjm5/w0+hZ1k5XFTCNjrI1Ewcs0K/YzbZu86K42p5AcaiGCjeBdLShEomnYXoyydKY5mGNuWh966mKmm6lH9HcHY91zLeZMmGkT19EorPy1+KIwCFGpMzYAXaHsWPMDK1oKjH8twpiaBBumBWiAkIs6DCgh9oQ4rmsRW2pgQH9pKFgu6NLf7Fb+7ikIN8k6XGyT8C0GdKGAl13R1j21zQmgK4CuPtFD21bNFCHBmr5i/bhjCJAiAN2HWnUqamSjc5bS+Mj7+Pg5iY5LIwp8HCe7nyjZ4igJZ4BUBaSsFdTABsYecUfEmxIyteQ6lzywXE1AidpgiKFSEv4D8ZgA6Xstz9JTz5XUDYE4V2UhZIU08xYDus/7/Kos5a0yz7Kx6dgWNpStl5R6n0knDBNblwYKAFKP0HAxNBxbRv8+wS+7NLXc' /><input type='hidden' name='TermUrl' value='https://merchantapi.easypay.ua/api/payment/confirm/185ff3c7-8daa-4715-af1a-23f7554d19bb,0e101596-2a6a-4a0e-92e2-dac1e7a5c69d,-1' /><input type='hidden' name='MD' value='ee6eda7e-6252-41af-a696-825e85b34878' /></form><script>document.getElementById('submitForm').submit();</script> </body></html>",
  "actionType":"FormRedirect",
  "status":"Need3Ds", "alternativeRedirectUrl":"https://merchantapi.easypay.ua/api/payment/altredirect/00f9befe-a200-4e4d-ae27-0a4bdbc443fc",
  "transactionId":"860094566",
  "retrievalReferenceNo":"null",
  "responseItems":{
    "SessionId":"a9692063-2db5-4d25-8a66-e62b4476d1e4",
    "MerchantOpertion":"CheckPaymentOperationOrder",
    "Operation":"CheckPayment",
    "BankingDetails":""
  },
  "error":null
}


'''Request:'''<syntaxhighlight lang="json" line="1">
Якщо передано userPaymentInstrument (для випадку без 3DSecure):
headers:
{
  "redirectUrl":null,
  "action":null,
  "paymentState":"Confirmed",
  "status":"Done",
  "actionType":"UrlRedirect",
  "transactionId":847870521,
"retrievalReferenceNo":null,
  "responseItems": null,
  "error":null
}


"Content-Type": "application/json"
</syntaxhighlight>
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


body
<br>'''Опис параметрів'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
{
    <tr>
  "serviceKey":"easypay-test",
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
  "orderId":"full_split_11",
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
  "transactionId":""
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>''' </td>
}
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">
* '''Confirmed''' - платіж підтверджений (кінцевий статус, якщо "status": "done")
* '''WaitConfirm''' - платіж у статусі "обробляється", необхідно додатково запросити фінальний статус платежу
* '''WaitVerify''' - від клієнта очікується підтвердження (наприклад, якщо "status": "Need3Ds" - необхідно пройти перевірку 3D Secure) </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>status</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">
* '''Done''' - додаткові дії не потрібні, якщо при цьому "зберіганнядержави":"затверджено", означає платіж повністю успішний. При іншому значенні paymentState- платіж не прийняв кінцевий статус, необхідно запросити статус ([[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]]).
* '''Need3Ds''' - необхідно підтвердження 3D Secure від клієнта ([[MerchantAPI#Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки|Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки]])
* '''NeedConfirmCode''' - необхідно надіслати код перевірки зі смс методом confirmCodeVerification ([[MerchantAPI#Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки|Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки]])
* '''NeedLookup''' - необхідно надіслати код перевірки з смс '''''методом confirmCodeVerification ('''''[[MerchantAPI#Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки|Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки]]) </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>actionType</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">тип наступної дії:
 
* '''"FormRedirect"''' -  необхідно створити сторінку (форму) з html-коду, який передано у параметрі "actionContent" :'''"<html>...</html>",''' відкрити її клієнту, наприклад, для проходження ним 3D-secure перевірки. Альтернативним варіантом є переадресація клієнта за посиланням параметра '''"alternativeRedirectUrl".'''
* Після проходження перевірки клієнт буде передресовано на фінальну сторінку EasyPay або на
 
<code>"urls": {</code>
 
<code>"success": "string",</code>


<code>"failed": "string"</code>


</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
<code>}</code>
headers
відсутній


body
* '''"UrlRedirect"''' - переадресувати клієнта на посилання з "action" або переадресувати клієнта за посиланням з '''"alternativeRedirectUrl".'''
{
* '''"ConfirmCode"''' -необхідно надіслати код перевірки з смс методом '''confirmCodeVerification''' ([[MerchantAPI#Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки|Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки]])
    "merchantKey": "easypay-test",
 
    "transactionId": 991379504,
'''"None"''' - можливий при використанні інструменту гаманець '''("instrumentType": "EMoney"),''' кошти успішно списані з гаманця, партнеру надсилається повідомлення про списання. </td></tr><tr>
    "orderId": "full_split_11",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>actionContent</code>'''</td>
    "amount": 3.150000,
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''"<html>...</html>"''' - html форма сторінки банку для введення коду 3DS. Сформувати сторінку з коду та відкрити її клієнту. Після підтвердження платежу відбудеться 302-й редирект на ваші "urls" із запиту createOrder, або на фінальну сторінку EasyPay </td></tr><tr>
    "paymentState": "accepted",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>''' </td>
    "refundTransactionId": null,
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер транзакції в EasyPay </td></tr></table>
    "paymentsList": [
 
        {
'''<br />2DSecure case:'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
            "merchantKey": "easypay-test",
    <tr>
            "transactionId": 991379509,
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
            "orderId": "full_split_11",
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
            "amount": 1.030000,
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>''' </td>
            "paymentState": "accepted",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''"Confirmed"''' та '''"status": "Done"''' - платіж пройшов успішно. При інших значеннях необхідно перевірити статус '''''платежу''''' '''('''[[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]]''')''' </td></tr><tr>
            "refundTransactionId": null,
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>status</code>''' </td>
            "date": "2021-09-15T14:07:38+03:00",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''"Done" -'''платіж завершено, додаткові дії не потрібні. При '''"paymentState":'''
            "error": null
 
        },
* '''"Confirmed"''' - означає, що транзакція на стороні EasyPay прийнята (http - оповіщення успішно доставлено партнеру) </td></tr><tr>
        {
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>''' </td>
            "merchantKey": "easypay-test",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер транзакції до EasyPay </td></tr></table>
            "transactionId": 991379508,
            "orderId": "full_split_11",
            "amount": 0.050000,
            "paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        },
        {
            "merchantKey": "easypay-test",
            "transactionId": 991379507,
            "orderId": "full_split_11",
            "amount": 1.020000,
"paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        },
        {
            "merchantKey": "easypay-test",
            "transactionId": 991379506,
            "orderId": "full_split_11ID",
            "amount": 1.050000,
            "paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        }
    ],
    "error": null
}


</syntaxhighlight>
<br>


 
==== Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки ====
'''Параметри''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
----У випадку "<code>actionType</code>": "<code>ConfirmCode</code>", клієнту прийде код підтвердження, який потрібно передати до EasyPay
    <tr>
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentsList</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">список платежів у структурі спліту з деталізацією. </td></tr></table>
 
 
У випадку зі сплітованими платежами, в основному тілі відповіді '''OrderState''' - параметру '''transactionId''' присвоюється внутрішній технічний номер (нефінансової) операції.<syntaxhighlight lang="json" line="1">
"urls": {
  "success": "string",
  "failed": "string"
}
 
</syntaxhighlight>
 
==== Скасування платежу ====
Метод викликається '''лише''' для платежів у статусі '''"accepted".''' Для успішного скасування має бути достатньо суми прийнятих платежів у день скасування. Можна скасовувати платежі, які не старші 30 днів. Успішне повернення після цього терміну – не гарантується, залежить від умов банків-еквайєрів.
 
Повернення суми на картку відбувається в строк 0-3 робочих дні, в окремих випадках – до 30 робочих днів. Це залежить від умов банку-еквайєра, через який пройшов основний платіж, а також банку-емітента.
 
===== Скасування звичайного платежу =====
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;"> /api/merchant/cancelOrder</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/payment/confirmCodeVerification</span>
</p>
</p>
'''Request'''<syntaxhighlight lang="json" line="1">
headers


'''Request''' <syntaxhighlight lang="json" line="1">
headers
"Content-Type": "application/json"
"Content-Type": "application/json"
"PartnerKey": "partnerName"
"PartnerKey": "partnerName"
Рядок 1590: Рядок 1575:
body
body
{
{
   "serviceKey": "MERCHANT-TEST",
   "code": "string"
  "orderId": "test_20210217-121843",
  "transactionId": "913141164",
  "amount":"1"
}
}


</syntaxhighlight>
</syntaxhighlight>
'''Response'''<syntaxhighlight lang="json" line="1">
'''Response'''<syntaxhighlight lang="json" line="1">
headers
headers  
відсутній
 
body
body
{
{ }
  "merchantKey":"easypay-test",
</syntaxhighlight>Якщо "status":"Need3Ds", то клієнту потрібно пройти 3DS перевірку в залежності від значення '''"actionType".'''
  "transactionId":913141164,
<br>
  "refundTransactionId":913141464,
'''Опис параметрів:''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
  "orderId":"test_20210217-121843",
    <tr>
  "amount":1.000000,
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
  "paymentState":"accepted",
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
  "error":null
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>FormRedirect</code>''' </td>
}
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">необхідно СТВОРИТИ  сторінку (форму) з html-коду, який передано у параметрі </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>actionContent</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">"<html>...</html>", відкрити її клієнту для проходження ним 3D-secure перевірки. Альтернативним варіантом є переадресація клієнта за посиланням параметра '''"alternativeRedirectUrl"''' </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>UrlRedirect</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">необхідно переадресувати клієнта на посилання з '''"action"''' або переадресувати клієнта за посиланням з '''"alternativeRedirectUrl".''' Відобразиться форма банку емітента картки для перевірки 3D Secure. Після введення коду клієнта переадресує на сторінку успіху чи помилки. Адреси сторінок передаються на етапі створення замовлення.
 
<code>"urls": {</code>


</syntaxhighlight>
<code>   "success": "string",</code>


<code>   "failed": "string"</code>


<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
<code>}</code> </td></tr></table>
    <!-- Перший рядок - заголовок -->
    <tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
    </tr>


    <!-- Другий рядок -->
<br>
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">скасована сума </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">для часткового скасування - передається із сумою, яку потрібно скасувати.
для скасування повної суми - параметр amount не передається
</td>
    </tr>


    <!-- Третій рядок -->
==== Перевірка статусу платежу ====
    <tr>
----
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">оригінальна транзакція</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">магазину чи послуги
передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.
</td>
    </tr>


    <!-- Четвертий рядок -->
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
    <tr>
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>refundTransactionId</code>''' </td>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/orderState</span>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">транзакція рефанду (скасування) </td>
</p>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">транзакція рефанду (скасування)
</td>
    </tr>


    <!-- П'ятий рядок -->
'''Request'''<syntaxhighlight lang="json" line="1">
    <tr>
headers:
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>'''  </td>
"Content-Type": "application/json"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">статус транзакції рефанду (скасування). Можливі значення: </td>
"PartnerKey": "partnerName"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Можливі значення:
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


* a'''ccepted''' - скасування успішне. Створено транзакцію рефанду з негативною сумою
body
* '''declined''' - скасування пройшло неуспішно
{
* p'''ending''' або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.
  "serviceKey":"MERCHANT-TEST",
</td>
  "orderId":"test_20240524-0015",
  </table>
  "transactionId":"1413668587"
}


Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен  повертати '''"'''<code>paymentState</code>'''":"'''<code>declined</code>'''",''' а запит статусу транзакції скасування - '''"'''<code>paymentState</code>'''": "'''<code>accepted</code>'''"'''
</syntaxhighlight>


При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація ([[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]), на Merchant.UrlNotify буде '''одноразово''' надіслано POST - запит із параметром "<code>action</code>": "<code>refund</code>'''"''' та сумою (amount), яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.


===== Скасування платежу (замовлення зі Splitting параметрами) =====
'''Response'''<syntaxhighlight lang="json" line="1">
Скасування платежу (Замовлення) можна робити:
headers:
відсутній


* на всю суму платежу (замовлення)
body:
* на суму одного спліту (Часткова скасування платежу (замовлення))
"merchantKey":"easypay-test",
* на суму меншу від суми спліту (Часткова скасування спліту)
  "transactionId":1413668587,
<br>
  "orderId":"test_20240524-0015",
 
  "amount":3.000000,
===== Скасування повної суми платежу (замовлення зі Splitting параметрами) =====
  "paymentState":"declined",
* Для скасування повної суми Splitting транзакції необхідно виконати запит статусу транзакції згідно з розділом "[[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]]'''"''' використовуючи основний <code>OrderID</code>
  "refundTransactionId":1413673292,
* Отриманий у відповіді кореневий <code>transactionID</code> використовувати у запиті [[MerchantAPI#Скасування платежу|<code>cancelOrder</code>]]
  "":
* У відповідь на запит [[MerchantAPI#Скасування платежу|<code>cancelOrder</code>]] буде отримано відповідь зі статусом скасування, а також буде отримано коллбек по кожній транзакції, яка входила до Splitting транзакції.
  "paymentsList":[
* Коллбек на загальну суму Splitting транзакції не надходить.
   
<br>
  ],
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
  "refunds":[
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
    {
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;"> /api/merchant/cancelOrder</span>
      "refundTransactionId":1413669380,
</p>
      "paymentState":"accepted",
      "refundAmount":1.10,
      "dateAccepted":"2024-05-24T16:14:45+03:00",
      "dateDeclined":null,
      "datePost":"2024-05-24T16:14:39+03:00"
     },
    {
      "refundTransactionId":1413673292,
      "paymentState":"accepted",
      "refundAmount":1.90,
      "dateAccepted":"2024-05-24T16:19:40+03:00",
      "dateDeclined":null,
"datePost":"2024-05-24T16:19:33+03:00"
     }
  ],
  "error":null
}


'''Request'''<syntaxhighlight lang="json" line="1">
</syntaxhighlight>
headers
'''<br />Опис параметрів'''
"Content-Type": "application/json"
<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
"PartnerKey": "partnerName"
    <tr>
"locale": "ua"
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;"></th>
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">'''Фінальний'''
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
'''статус?'''</th>
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">'''Значення/ подальші дії'''</th>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>accepted</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">        '''так'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">платіж прийнято</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>declined</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">так</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">платіж відхилений
</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>pending</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ні</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">платіж знаходиться в обробці, необхідно повторити запит статусу пізніше
</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>none</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">- </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">статус платежу не визначено, необхідно повторити запит статусу до отримання кінцевого статусу</td>
    </tr></table>
 
 
'''Нетипові відповіді запит статусу:'''


body
* Якщо платіж не знайдено, прийде відповідь:
<syntaxhighlight lang="json" line="1">
{
{
  "serviceKey": "easypay-test",
"error":{
  "orderId": "full_split_11",
"errorCode":"MERCHANT_ORDERID_NOT_FOUND",
  "transactionId": 991379504,
"title":null,
"description":null,
"errorMessage":"MERCHANT_ORDERID_NOT_FOUND",
"fieldErrors":[  ]
}
}
</syntaxhighlight>
</syntaxhighlight>
'''Response'''<syntaxhighlight lang="json" line="1">
headers
відсутній


body
* Якщо платіж (сторінка, замовлення) не були відкриті клієнтом або не було спроби оплати, прийде відповідь:
<syntaxhighlight lang="json" line="1">
{
{
  "merchantKey":"easypay-test",
"merchantKey": "easypay-test",
  "transactionId": 991379504,
"transactionId": 0,
  "refundTransactionId":913141464,
"orderId": "Some orderId2",
  "orderId":"full_split_11",
"amount": 0,
  "amount":1.000000,
"paymentState": "pending",
  "paymentState":"accepted",
"refundTransactionId": null,
  "error":null
"paymentsList": [],
"error": null
}
}


</syntaxhighlight>
</syntaxhighlight>


<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
* Якщо отримано помилку на замовлення на етапі визначення реквізитів:
    <!-- Перший рядок - заголовок -->
<syntaxhighlight lang="json" line="1">
    <tr>
{
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
  "merchantKey": "easypay-test",
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
  "transactionId": 0,
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
  "orderId": "Some orderId",
    </tr>
  "amount": 0,
  "paymentState": "declined",
  "refundTransactionId": null,
  "paymentsList": [],
  "error": {
    "errorCode": "PROVIDER_ACCOUNT_INVALID", (ерор код може (має) відрізнятися від того, що в прикладі)
    "title": "Помилка системи",
    "description": "Акаунт не знайдено",
    "errorMessage": "string"
  }
}


    <!-- Другий рядок -->
</syntaxhighlight>
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер транзакції, що скасовується, приходить при отриманні коллбека за оплаченим замовленням (параметр payment_id)</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr>


    <!-- Третій рядок -->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума, що скасовується:
для '''часткового''' скасування - передається із сумою, яку потрібно скасувати.
</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"> </td>
    </tr>


    <!-- Четвертий рядок -->
При виконанні запиту статусу на замовлення, у яких є спліт (платіжна опція) - повертається наступна модель:
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">оригінальна транзакція, яка була відправлена ​​у запиті cancelOrder</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr>


    <!-- П'ятий рядок -->
'''Request:'''<syntaxhighlight lang="json" line="1">
    <tr>
headers:
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>refundTransactionId</code>'''</td>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">транзакція рефанду (скасування) </td>
"Content-Type": "application/json"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
"PartnerKey": "partnerName"
   
"locale": "ua"
    </tr>
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


    <!-- П'ятий рядок -->
body
    <tr>
{
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
  "serviceKey":"easypay-test",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума, яка була скасована </td>
  "orderId":"full_split_11",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
  "transactionId":""
    </tr>
}


    <!-- Cьомий рядок-->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">статус транзакції рефанду (скасування) </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">'''Можливі значення:'''
* '''accepted''' - скасування успішне. Створено транзакцію рефанду з негативною сумою
* '''declined''' - скасування пройшло неуспішно
* '''Pending''' або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.
</td>
    </tr>


    <!-- Восьмий рядок->
</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
    <tr>
headers
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AppId</code>'''</td>
відсутній
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор торгової точки партнера </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">параметр валідний протягом 90 днів. Один і той же AppID може використовуватись для декількох платежів)</td>
      </tr>


  <!-- Десятий рядок->
body
      <tr>
{
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AppId</code>'''</td>
    "merchantKey": "easypay-test",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор торгової точки партнера </td>
    "transactionId": 991379504,
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">параметр валідний протягом 90 днів. Один і той же AppID може використовуватись для декількох платежів)</td>
    "orderId": "full_split_11",
  </table>
    "amount": 3.150000,
 
    "paymentState": "accepted",
      <!-- Десятий рядок->
    "refundTransactionId": null,
      <tr>
    "paymentsList": [
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AppId</code>'''</td>
        {
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор торгової точки партнера </td>
            "merchantKey": "easypay-test",
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">параметр валідний протягом 90 днів. Один і той же AppID може використовуватись для декількох платежів)</td>
            "transactionId": 991379509,
 
            "orderId": "full_split_11",
      </tr>
            "amount": 1.030000,
            "paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        },
        {
            "merchantKey": "easypay-test",
            "transactionId": 991379508,
            "orderId": "full_split_11",
            "amount": 0.050000,
            "paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        },
        {
            "merchantKey": "easypay-test",
            "transactionId": 991379507,
            "orderId": "full_split_11",
            "amount": 1.020000,
"paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        },
        {
            "merchantKey": "easypay-test",
            "transactionId": 991379506,
            "orderId": "full_split_11ID",
            "amount": 1.050000,
            "paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        }
    ],
    "error": null
}


    <!-- П'ятий рядок --><!-- П'ятий рядок --><!-- П'ятий рядок --></table>Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен тепер повертати <code>"paymentState"''':"'''declined'''"'''</code> як для основної так і для окремих транзакцій, а запит статусу транзакції скасування - <code>"paymentState":"accepted".</code>
</syntaxhighlight>
 
'''Опис параметрів''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    <tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentsList</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">список платежів у структурі спліту з деталізацією. </td></tr></table>
 
 
У випадку зі сплітованими платежами, в основному тілі відповіді '''OrderState''' - параметру '''transactionId''' присвоюється внутрішній технічний номер (нефінансової) операції.<syntaxhighlight lang="json" line="1">
"urls": {
  "success": "string",
  "failed": "string"
}


</syntaxhighlight>


При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація '''(див.''' [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]''')''', на Merchant.UrlNotify буде '''одноразово''' надіслано POST - запит із параметром <code>"action": "refund"</code> та сумою (<code>amount</code>), яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.
==== Скасування платежу ====
----Метод викликається '''лише''' для платежів у статусі '''"accepted".''' Для успішного скасування має бути достатньо суми прийнятих платежів у день скасування. Можна скасовувати платежі, які не старші 30 днів. Успішне повернення після цього терміну – не гарантується, залежить від умов банків-еквайєрів.


===== Часткове скасування (повернення) платежу (замовлення зі Splitting параметрами) =====
Повернення суми на картку відбувається в строк 0-3 робочих дні, в окремих випадках – до 30 робочих днів. Це залежить від умов банку-еквайєра, через який пройшов основний платіж, а також банку-емітента.
Для часткового скасування платежу необхідно виконати запит <code>cancelCurder</code> використовуючи <code>transactionID</code> який був отриманий в коллбеку (параметр payment_id), а також вказавши суму скасування (вона має бути меншою або дорівнює сумі транзакції, що скасовується).


* У відповідь на запит <code>cancelOrder</code> буде отримано відповідь зі статусом скасування, а також буде отримано коллбек про успішне скасування цієї транзакції.
===== Скасування звичайного платежу =====
<br>
----
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
Рядок 1811: Рядок 1862:
'''Request''' <syntaxhighlight lang="json" line="1">
'''Request''' <syntaxhighlight lang="json" line="1">
headers
headers
"Content-Type": "application/json"
"Content-Type": "application/json"
"PartnerKey": "partnerName"
"PartnerKey": "partnerName"
Рядок 1821: Рядок 1871:
body
body
{
{
   "serviceKey": "easypay-test",
   "serviceKey": "MERCHANT-TEST",
   "orderId": "full_split_11",
   "orderId": "test_20210217-121843",
   "transactionId": 991379509,
   "transactionId": "913141164",
   "amount":1.00
   "amount":"1"
}
}


</syntaxhighlight><table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
</syntaxhighlight>
    <tr>
'''Response'''<syntaxhighlight lang="json" line="1">
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер транзакції, що скасовується, приходить при отриманні коллбека за оплаченим замовленням (параметр payment_id)</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума, що скасовується:
для '''часткового''' скасування - передається із сумою, яку потрібно скасувати.
</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"> </td>
    </tr></table>
 
'''Response'''<syntaxhighlight lang="json" line="1">
headers
headers
відсутній
body
body
{
{
   "merchantKey":"easypay-test",
   "merchantKey":"easypay-test",
   "transactionId":"991379509",
   "transactionId":913141164,
   "refundTransactionId":"913141464",
   "refundTransactionId":913141464,
   "orderId":"full_split_11",
   "orderId":"test_20210217-121843",
   "amount":"1.000000",
   "amount":1.000000,
   "paymentState":"accepted",
   "paymentState":"accepted",
   "error":"null"
   "error":null
}
}


</syntaxhighlight><table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
</syntaxhighlight>
 
'''<br />Опис параметрів'''
<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    <!-- Перший рядок - заголовок -->
     <tr>
     <tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
     </tr><tr>
     </tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>'''</td>
 
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">оригінальна транзакція, яка була відправлена ​​у запиті cancelOrder</td>
    <!-- Другий рядок -->
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    <tr>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>refundTransactionId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">скасована сума </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">транзакція рефанду (скасування)
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">для часткового скасування - передається із сумою, яку потрібно скасувати.
для скасування повної суми - параметр amount не передається
</td>
</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"> </td>
     </tr>
     </tr><tr>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
    <!-- Третій рядок -->
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума, яка була скасована</td>
     <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>''' </td>
     </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">оригінальна транзакція</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">магазину чи послуги
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">транзакція рефанду (скасування) </td>
передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.  
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
* '''accepted''' - скасування успішне. Створено транзакцію рефанду з негативною сумою
* '''declined''' - скасування пройшло неуспішно
* '''pending''' або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.
</td>
</td>
   
     </tr>
     </tr></table>


    <!-- Четвертий рядок -->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>refundTransactionId</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">транзакція рефанду (скасування) </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">транзакція рефанду (скасування)
</td>
    </tr>


Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен тепер повертати "paymentState":"declined", а запит статусу транзакції скасування - "paymentState":"accepted"
    <!-- П'ятий рядок -->
При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація '''(див.''' [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]''')''', на Merchant.UrlNotify буде одноразово надіслано POST - запит із параметром '''"action": "refund"''' та сумою '''(amount)''', яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.
    <tr>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>''' </td>
=== Повідомлення про платіж ===
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">статус транзакції рефанду (скасування). Можливі значення: </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Можливі значення:


# Партнер обов'язково вибирає 1 або кілька способів сповіщення та повідомляє його в EasyPay. Партнер зазначає платіж успішним на своїй стороні лише після отримання цього повідомлення
* a'''ccepted''' - скасування успішне. Створено транзакцію рефанду з негативною сумою
# Ми надсилаємо HTTP - колек з IP 93.183.196.26 методом POST з інформацією про платіж.
* '''declined''' - скасування пройшло неуспішно
# Запит надсилає EasyPay партнеру після того, як транзакція набула фінального статусу (Accepted, Declined).
* p'''ending''' або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.
# URL для повідомлень '''(UrlNotify)''' партнер направляє у запиті '''createOrder''' у параметрі:
</td>
  </table>


<code>"order":{</code>
Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен  повертати '''"'''<code>paymentState</code>'''":"'''<code>declined</code>'''",''' а запит статусу транзакції скасування - '''"'''<code>paymentState</code>'''": "'''<code>accepted</code>'''"'''


<code>"additionalItems":{</code>
При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація ([[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]), на Merchant.UrlNotify буде '''одноразово''' надіслано POST - запит із параметром "<code>action</code>": "<code>refund</code>'''"''' та сумою (amount), яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.


<code>"Merchant.UrlNotify":"<nowiki>https://notify.url</nowiki>"</code>
===== Скасування платежу (замовлення зі Splitting параметрами) =====
----Скасування платежу (Замовлення) можна робити:


<code>}</code>
* на всю суму платежу (замовлення)
* на суму одного спліту (Часткова скасування платежу (замовлення))
* на суму меншу від суми спліту (Часткова скасування спліту)
<br>


<code>}</code>
===== Скасування повної суми платежу (замовлення зі Splitting параметрами) =====
 
----
"Merchant.UrlNotify" Параметр не може бути порожнім і має відповідати формату URL.
* Для скасування повної суми Splitting транзакції необхідно виконати запит статусу транзакції згідно з розділом "[[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]]'''"''' використовуючи основний <code>OrderID</code>
<p style="border: 1px solid #FF6F6F; background-color: rgba(255, 204, 204, 0.5); padding: 10px; border-radius: 4px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 40px; margin: 0;">
* Отриманий у відповіді кореневий <code>transactionID</code> використовувати у запиті [[MerchantAPI#Скасування платежу|<code>cancelOrder</code>]]
     <span style="position: absolute; top: 10px; left: 10px; font-size: 24px; color: #FF4500;">❗️</span>
* У відповідь на запит [[MerchantAPI#Скасування платежу|<code>cancelOrder</code>]] буде отримано відповідь зі статусом скасування, а також буде отримано коллбек по кожній транзакції, яка входила до Splitting транзакції.
     '''Важливо:''' якщо у відповіді не отримано HTTP StatusCode 200, запит нотифі буде надіслано повторно протягом 1-10 хвилин. І може продовжуватися визначену кількість разів (по замовчанню - 50), поки не отримано статусу “200 ОК”
* Коллбек на загальну суму Splitting транзакції не надходить.
<br>
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;"> /api/merchant/cancelOrder</span>
</p>
</p>


'''Request'''<syntaxhighlight lang="json" line="1">
'''Request'''<syntaxhighlight lang="json" line="1">
headers
headers
"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


"Sign": "Bq2d0oaqVGMRWpX5wsGpOlpqLg42pBdDO7TfTPYVmnU="
body
body
{
{
   "OperationType": "Payment",
   "serviceKey": "easypay-test",
   "PartnerKey": "groshi-com",  
   "orderId": "full_split_11",
   "ServiceKey": "GROSHI-COM-GOOGLEPAY",
   "transactionId": 991379504,
  "TransactionStatus": "Accepted",
}
   "MerchantOrderId": "3127194_28_450866",
</syntaxhighlight>
   "DateTime": "2023-12-09T14:00:48",
'''Response'''<syntaxhighlight lang="json" line="1">
   "Amount": 2059.08,
headers
   "Commission": 28.83,
відсутній
  "TransactionId": 1336448544,
 
   "AdditionalItems": {
body
    "Merchant.Inn": "3178404189",
{
    "Merchant.Details": ";0;0;;4;",
   "merchantKey":"easypay-test",
    "Merchant.UrlNotify": "https://testpartner.ua/callback",
   "transactionId": 991379504,
    "Merchant.ClientFullName": "Іванов Дмитро"
   "refundTransactionId":913141464,
    "Acquirer.MerchantId":"12345678"
   "orderId":"full_split_11",
    "Acquirer.TerminalId":"E1234567"
   "amount":1.000000,
    "Card.BrandType":"Visa"
  "paymentState":"accepted",
    "AuthCode":"012345"
  "error":null
  }
}
}


</syntaxhighlight>
</syntaxhighlight>'''Опис параметрів'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
 
<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
     <!-- Перший рядок - заголовок -->
     <!-- Перший рядок - заголовок -->
     <tr>
     <tr>
Рядок 1956: Рядок 2005:
     <!-- Другий рядок -->
     <!-- Другий рядок -->
     <tr>
     <tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>OperationType</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">тип оповіщення</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер транзакції, що скасовується, приходить при отриманні коллбека за оплаченим замовленням (параметр payment_id)</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">'''Можливі значення:'''
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
'''payment -''' про успішний платіж (повторюється, якщо у відповідь не отримано статусу 200)
 
'''refund -''' про успішне скасування платежу (відправляється разово)
</td>
     </tr>
     </tr>


     <!-- Третій рядок -->
     <!-- Третій рядок -->
     <tr>
     <tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>PartnerKey</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ІД партнера у системі EasyPay </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума, що скасовується:
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
для '''часткового''' скасування - передається із сумою, яку потрібно скасувати.
</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"> </td>
     </tr>
     </tr>


     <!-- Четвертий рядок -->
     <!-- Четвертий рядок -->
     <tr>
     <tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>ServiceKey</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ІД сервісу партнера у системі EasyPay </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">оригінальна транзакція, яка була відправлена ​​у запиті cancelOrder</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
     </tr>
     </tr>
Рядок 1981: Рядок 2028:
     <!-- П'ятий рядок -->
     <!-- П'ятий рядок -->
     <tr>
     <tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>TransactionStatus</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>refundTransactionId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">статус платежу  </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">транзакція рефанду (скасування) </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
      
      
Рядок 1989: Рядок 2036:
     <!-- П'ятий рядок -->
     <!-- П'ятий рядок -->
     <tr>
     <tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>MerchantOrderId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер замовлення партнера із запиту createOrder </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума, яка була скасована </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
     </tr>
     </tr>
Рядок 1996: Рядок 2043:
     <!-- Cьомий рядок-->
     <!-- Cьомий рядок-->
     <tr>
     <tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>Acquirer.MerchantId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор торговц'''я''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">статус транзакції рефанду (скасування) </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">'''Можливі значення:'''
* '''accepted''' - скасування успішне. Створено транзакцію рефанду з негативною сумою
* '''declined''' - скасування пройшло неуспішно
* '''Pending''' або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.
</td>
     </tr>
     </tr>


Рядок 2023: Рядок 2074:
       </tr>
       </tr>


     <!-- П'ятий рядок -->
     <!-- П'ятий рядок --><!-- П'ятий рядок --><!-- П'ятий рядок --></table>Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен тепер повертати <code>"paymentState"''':"'''declined'''"'''</code> як для основної так і для окремих транзакцій, а запит статусу транзакції скасування - <code>"paymentState":"accepted".</code>
    <tr>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>Acquirer.TerminalId</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор платіжного пристрою  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr>   


    <!-- П'ятий рядок -->
При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація '''(див.''' [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]''')''', на Merchant.UrlNotify буде '''одноразово''' надіслано POST - запит із параметром <code>"action": "refund"</code> та сумою (<code>amount</code>), яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>Card.BrandType</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">найменування платіжної системи, платіжний інструмент якої використовується </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>


      </tr>
===== Часткове скасування (повернення) платежу (замовлення зі Splitting параметрами) =====
Для часткового скасування платежу необхідно виконати запит <code>cancelCurder</code> використовуючи <code>transactionID</code> який був отриманий в коллбеку (параметр payment_id), а також вказавши суму скасування (вона має бути меншою або дорівнює сумі транзакції, що скасовується).


    <!-- П'ятий рядок -->
* У відповідь на запит <code>cancelOrder</code> буде отримано відповідь зі статусом скасування, а також буде отримано коллбек про успішне скасування цієї транзакції.
    <tr>
<br>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AuthCode</code>'''</td>
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">Код авторизації </td>
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;"> /api/merchant/cancelOrder</span>
</p>


</tr>
'''Request''' <syntaxhighlight lang="json" line="1">
headers


    <!-- П'ятий рядок -->
"Content-Type": "application/json"
    <tr>
"PartnerKey": "partnerName"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>DateTime</code>'''</td>
"locale": "ua"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">час надання платежу статусу на стороні EasyPay </td>
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">якщо партнер не відповість статусом 200 на запит з action:payment, то в наступному запиті час буде новим</td>
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
    </tr>   
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


     <!-- П'ятий рядок -->
body
     <tr>
{
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>TransactionId</code>'''</td>
  "serviceKey": "easypay-test",
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ID транзакції на стороні EasyPay </td>
  "orderId": "full_split_11",
  "transactionId": 991379509,
  "amount":1.00
}
 
</syntaxhighlight>'''Опис параметрів'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
     <tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
     </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер транзакції, що скасовується, приходить при отриманні коллбека за оплаченим замовленням (параметр payment_id)</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума, що скасовується:
для '''часткового''' скасування - передається із сумою, яку потрібно скасувати.
</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"> </td>
    </tr></table>


      </tr>
'''Response'''<syntaxhighlight lang="json" line="1">
headers
відсутній


    <!-- П'ятий рядок --></table>
body
<br>Необхідно перевіряти підпис у нашому HTTP notify, налаштувати прийом лише для наших IP 93.183.196.26.
{
Для правильного обчислення підпису, тіло з нотифай потрібно брати як є, без перетворень та форматувань.
  "merchantKey":"easypay-test",
У випадку, якщо підпис notify не перевірено, всі фінансові ризики перекладаються на партнера.
  "transactionId":"991379509",
 
  "refundTransactionId":"913141464",
==== Отримання інформації про рекурентний платіж ====
  "orderId":"full_split_11",
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
  "amount":"1.000000",
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
  "paymentState":"accepted",
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/system/createApp</span>
  "error":"null"
</p>
}


'''Request'''<syntaxhighlight lang="json" line="1">
</syntaxhighlight>'''Опис параметрів'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
headers
    <tr>
 
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
"PartnerKey": "partnerName"
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
"locale": "ua"
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
    </tr><tr>
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionId</code>'''</td>
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">оригінальна транзакція, яка була відправлена ​​у запиті cancelOrder</td>
queryParams
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
"serviceKey": "string"
    </tr><tr>
"orderId": "string"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>refundTransactionId</code>'''</td>
"reccurentId": "0"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">транзакція рефанду (скасування)
 
</td>
</syntaxhighlight>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"> </td>
 
    </tr><tr>
'''Response'''<syntaxhighlight lang="json" line="1">
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
headers
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума, яка була скасована</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">транзакція рефанду (скасування) </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
* '''accepted''' - скасування успішне. Створено транзакцію рефанду з негативною сумою
* '''declined''' - скасування пройшло неуспішно
* '''pending''' або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.
</td>
   
    </tr></table>


body
{
  "merchantReccurentPaymentDetails": [
    {
      "templateId": 0,
      "orderDescription": "string",
      "serviceName": "string",
      "serviceKey": "string",
      "orderId": "string",
      "amount": 0,
      "croneRule": "string",
      "dateRun": "2019-01-21T08:24:39.154Z",
      "isEnabled": true,
      "dateExpire": "2019-01-21T08:24:39.154Z"
    }
  ],
  "error": {
    "errorCode": "string",
    "title": "string",
    "description": "string",
    "errorMessage": "string",
    "fieldErrors": [
      {
        "fieldName": "string",
        "errorCode": "string",
        "errorMessage": "string"
      }
    ]
  }
}


Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен тепер повертати "paymentState":"declined", а запит статусу транзакції скасування - "paymentState":"accepted"
При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація '''(див.''' [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]''')''', на Merchant.UrlNotify буде одноразово надіслано POST - запит із параметром '''"action": "refund"''' та сумою '''(amount)''', яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.
=== Повідомлення про платіж ===
----
# Партнер обов'язково вибирає 1 або кілька способів сповіщення та повідомляє його в EasyPay. Партнер зазначає платіж успішним на своїй стороні лише після отримання цього повідомлення
# Ми надсилаємо HTTP - колек з IP 93.183.196.26 методом POST з інформацією про платіж.
# Запит надсилає EasyPay партнеру після того, як транзакція набула фінального статусу (Accepted, Declined).
# URL для повідомлень '''(UrlNotify)''' партнер направляє у запиті '''createOrder''' у параметрі:
<br>
<syntaxhighlight lang="json" line="1">
"order":{
"additionalItems":{
"Merchant.UrlNotify":"https://notify.url"
}
}
</syntaxhighlight>
</syntaxhighlight>
 
<br>
"Merchant.UrlNotify" Параметр не може бути порожнім і має відповідати формату URL.
<br>
<br>


==== Виклик рекурентного платежу ====
    <p style="border: 1px solid #FFA500; background-color: rgba(255, 165, 0, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     ⚠️ <strong>Важливо!</strong> Якщо у відповіді не отримано <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #D63384;">HTTP StatusCode 200</span>, запит нотифікації буде надіслано повторно протягом <strong>1-10 хвилин</strong>. 
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     Повторення може продовжуватися визначену кількість разів (за замовчуванням – <strong>50 разів</strong>), поки не буде отримано статусу <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #198754;">"200 ОК"</span>.
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/reccurent/payment</span>
</p>
</p>'''Request'''<syntaxhighlight lang="json" line="1">
'''Request'''<syntaxhighlight lang="json" line="1">
headers
headers


"Content-Type": "application/json"
"Sign": "Bq2d0oaqVGMRWpX5wsGpOlpqLg42pBdDO7TfTPYVmnU="
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
 
body
body
{
{
   "reccurentId": 0,
   "OperationType": "Payment",
   "amount": 0
  "PartnerKey": "groshi-com",
  "ServiceKey": "GROSHI-COM-GOOGLEPAY",
  "TransactionStatus": "Accepted",
  "MerchantOrderId": "3127194_28_450866",
  "DateTime": "2023-12-09T14:00:48",
  "Amount": 2059.08,
  "Commission": 28.83,
  "TransactionId": 1336448544,
   "AdditionalItems": {
    "Merchant.Inn": "3178404189",
    "Merchant.Details": ";0;0;;4;",
    "Merchant.UrlNotify": "https://testpartner.ua/callback",
    "Merchant.ClientFullName": "Іванов Дмитро"
    "Acquirer.MerchantId":"12345678"
    "Acquirer.TerminalId":"E1234567"
    "Card.BrandType":"Visa"
    "AuthCode":"012345"
  }
}
}


</syntaxhighlight>'''Опис параметрів'''<table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    <!-- Перший рядок - заголовок -->
    <tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
    </tr>


    <!-- Другий рядок -->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>OperationType</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">тип оповіщення</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">'''Можливі значення:'''
'''payment -''' про успішний платіж (повторюється, якщо у відповідь не отримано статусу 200)


</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
'''refund -''' про успішне скасування платежу (відправляється разово)
headers
</td>
    </tr>


body
    <!-- Третій рядок -->
{
    <tr>
  "reccurentId": 0,
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>PartnerKey</code>'''</td>
  "transactionId": 0,
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ІД партнера у системі EasyPay </td>
  "transactionStatus": "None",
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
  "error": {
     </tr>
    "errorCode": "string",
    "title": "string",
    "description": "string",
    "errorMessage": "string",
    "fieldErrors": [
       {
        "fieldName": "string",
        "errorCode": "string",
        "errorMessage": "string"
      }
     ]
  }
}


</syntaxhighlight>Також буде надіслано нотифікацію у разі успішного платежу. Створення рекурентного платежу на операцію, у структурі якої є спліт – не підтримується.
    <!-- Четвертий рядок -->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>ServiceKey</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ІД сервісу партнера у системі EasyPay </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr>


<br>
    <!-- П'ятий рядок -->
=== Видалення рекурентного платежу ===
    <tr>
<p style="border: 1px solid rgba(255, 0, 0, 0.5); background-color: rgba(255, 0, 0, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 100px;">
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>TransactionStatus</code>'''</td>
    <span style="position: absolute; top: 50%; left: 10px; background-color: #FF0000; color: #FFFFFF; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold; border: 2px solid #FF0000; transform: translateY(-50%);">DELETE</span>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">статус платежу  </td>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px; color: #333333;">/api/system/createApp</span>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
</p>
   
    </tr>


    <!-- П'ятий рядок -->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>MerchantOrderId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер замовлення партнера із запиту createOrder </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr>


'''Request''' <syntaxhighlight lang="json" line="1">
    <!-- Cьомий рядок-->
headers
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>Acquirer.MerchantId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор торговц'''я''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr>


"PartnerKey": "partnerName"
    <!-- Восьмий рядок->
"locale": "ua"
    <tr>
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AppId</code>'''</td>
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор торгової точки партнера </td>
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">параметр валідний протягом 90 днів. Один і той же AppID може використовуватись для декількох платежів)</td>
      </tr>


body
  <!-- Десятий рядок->
відсутній
      <tr>
</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AppId</code>'''</td>
headers
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор торгової точки партнера </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">параметр валідний протягом 90 днів. Один і той же AppID може використовуватись для декількох платежів)</td>
  </table>
 
      <!-- Десятий рядок->
      <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AppId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор торгової точки партнера </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">параметр валідний протягом 90 днів. Один і той же AppID може використовуватись для декількох платежів)</td>


-  
      </tr>
 
    <!-- П'ятий рядок -->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>Acquirer.TerminalId</code>''' </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор платіжного пристрою  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr>   


body
    <!-- П'ятий рядок -->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>Card.BrandType</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">найменування платіжної системи, платіжний інструмент якої використовується </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>


-
      </tr>
</syntaxhighlight>


== Перекази та «безпечна угода» ==
    <!-- П'ятий рядок -->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>AuthCode</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">Код авторизації </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>


=== Створення замовлення на перекази між картами ===
</tr>
Призначений для перевірки створення переказів між картами та реалізації функціоналу безпечної угоди на ресурсах мерчанта. Перед викликом цього методу потрібно:


# мати доступні AppID та PageID, отримані за методами: CreateApp ([[MerchantAPI#Реєстрація точки та створення сесії|Реєстрація точки та створення сесії]]) та CreatePage ([[MerchantAPI#Створення сесії|Створення сесії]]);
    <!-- П'ятий рядок -->
# отримати serviceKey, який підтримує операції переказів з картки на картку;
    <tr>
<br>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>DateTime</code>'''</td>
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">час надання платежу статусу на стороні EasyPay </td>
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">якщо партнер не відповість статусом 200 на запит з action:payment, то в наступному запиті час буде новим</td>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/createOrder</span><syntaxhighlight lang="json" line="1">
    </tr>   
 
    <!-- П'ятий рядок -->
    <tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>TransactionId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ID транзакції на стороні EasyPay </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
 
      </tr>
 
    <!-- П'ятий рядок --></table>
<br>Необхідно перевіряти підпис у нашому HTTP notify, налаштувати прийом лише для наших IP 93.183.196.26.
Для правильного обчислення підпису, тіло з нотифай потрібно брати як є, без перетворень та форматувань.
У випадку, якщо підпис notify не перевірено, всі фінансові ризики перекладаються на партнера.
 
==== Отримання інформації про рекурентний платіж ====
----
<p style="border: 1px solid deepskyblue; background-color: rgba(135, 206, 235, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 70px;">
<span style="position: absolute; top: 10px; left: 10px; background-color: deepskyblue; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">GET</span>
<span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/reccurent/info</span></p>
 
'''Request'''<syntaxhighlight lang="json" line="1">
headers
headers
"Content-Type": "application/json"
 
"PartnerKey": "partnerName"
"PartnerKey": "partnerName"
"locale": "ua"
"locale": "ua"
Рядок 2219: Рядок 2355:
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
queryParams
"serviceKey": "string"
"orderId": "string"
"reccurentId":  "0"
"dateFrom": 2025-03-10
"dateTo": 2025-03-17
"isEnabled": true|false
"pageNumber": 1
"countPerPage": 3
</syntaxhighlight>
'''Response'''<syntaxhighlight lang="json" line="1">
headers


body
body
{
{
"order": {
  "merchantReccurentPaymentDetails":[
            "serviceKey": "string",
    {
            "orderId": "string",
      "recurrentId":14433854,
            "description": "string",
      "orderDescription":"Easy payment",
            "amount":1001.0,
      "serviceName":"Мерчант Тест UA",
            "paymentOperation":"Hold",
      "serviceKey":"MERCHANT-TEST",
            "additionalItems": {},
      "orderId":"test_20250312-153601+url",
            "expire": "2019-04-15T07:49:20",
      "amount":1.000000,
            "fields": [
      "croneRule":"* 17 * * *",
                          {
      "dateCreate":"2025-03-12T16:38:02+02:00",
                      "fieldName": "Pan",
      "dateRun":"2025-03-13T17:00:00+02:00",
                      "fieldValue": "5555444433332222",
      "dateLastPayment":"2025-03-12T19:47:05+02:00",
                      "fieldKey": " bb37c1ef-3345-412e-8e76-4a6a48f64f70",
      "isEnabled":true,
                          }
      "dateExpire":"2025-03-12T21:37:42+02:00",
                          ]
      "properties":{
              },
        "failedCount":"1",
"urls": {
"urlNotify":"http://109.251.205.8:9987/merch/notifysigncheckexample.php"
          "success": "string",
      }
          "failed": "string"
    },
    {
      "recurrentId":14433852,
      "orderDescription":"Easy payment",
      "serviceName":"Мерчант Тест UA",
      "serviceKey":"MERCHANT-TEST",
      "orderId":"test_20250312-153601",
      "amount":1.000000,
      "croneRule":"* 17 * * *",
      "dateCreate":"2025-03-12T16:37:25+02:00",
      "dateRun":"2025-03-13T17:00:00+02:00",
      "dateLastPayment":"2025-03-12T19:47:05+02:00",
      "isEnabled":true,
      "dateExpire":"2025-03-12T21:37:03+02:00",
      "properties":{
        "failedCount":"1"
      }
    }
  ],
  "totalCount":2,
  "totalFilteredCount":2,
  "pageFilteredCount":2,
  "currentPageNumber":1,
  "numberOfPages":1,
  "error":null
}
}
</syntaxhighlight>'''Параметри''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
 
</syntaxhighlight><table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
     <tr>
     <tr>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
       <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th></tr><tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>serviceKey</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>serviceKey</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор послуги Мерчант</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ІД сервісу партнера у системі EasyPay </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">видає EasyPay</td>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>orderId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>orderId</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">унікальний ідентифікатор номера замовлення у системі партнера; </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер замовлення партнера із запиту createOrder  </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>reccurentId</code>'''</td>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер рекурента </td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>description</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>dateFrom</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">опис замовлення  </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">дата створення рекурента з..  </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">до 120 символів</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>dateTo</code>'''</td>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">дата створення рекурента по.. </td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>isEnabled</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума замовлення, роздільник – точка  </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">відобразити лише активні / або неактивні рекуренти </td></tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>pageNumber</code>''' </td>
   
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">відобразити сторінку номер..  </td></tr><tr>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>countPerPage</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentOperation</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">кількість записів на сторінці </td></tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">тип платіжного процесу </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>templateId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер рекуренту (reccurentId) </td></tr></table><br>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>additionalItems</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">необов'язкові додаткові параметри
</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">наприклад:
<code>"additionalItems":{ "Merchant.Param1":"CustomValue" }</code>,
де Merchant.Param1 - індивідуальний параметр партнера Param1
узгоджується з EasyPay;
</td>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>fieldName</code>''' </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">
* '''Pan''' – значення параметра для ініціювання списання перекладу карту. Обов'язкове заповнення;
* '''fieldValue: "5555444433332222"''' – вказується номер картки, куди потрібно зарахувати переказ (опціонально, альтернатива fieldKey);
* '''fieldKey''': " bb37c1ef-3385-412e-8e76-4a9448f64f70" –вказується GUID токена, куди слід зарахувати переказ (опціонально, альтернатива fieldValue);
*   '''expire -''' час життя замовлення. Після закінчення заданого часу замовлення сплатити неможливо. Час життя сторінки може відображатися на платіжній сторінці у вигляді таймера (за замовчуванням таймер вимкнено). Значення має бути більшим за поточний час на 6 хвилин. Значення за замовчуванням – 3 дні. </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>urls</code>'''</td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">
* '''success -''' url сторінки успіху, для редиректу клієнта у разі успішної оплати (після оплати клієнт може не дочекатися редиректу на цей url, тому редирект '''не можна використовувати як індикатор успішної оплати,''' отримання оповіщення про успішний платіж - '''див. п. 2.7)'''
* '''failed''' - url сторінки помилки для редиректу клієнта у разі неуспішної оплати. Приклад get-параметрів, які приходять на url.failed та url.succes (те ж, але без errorCode): </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">?serviceKey=merchanttest-5310&orderId=re9r9er94jr&amount=1.20&description=
Тестове+описання+замовлення&transactionId=722443797&date=2019-0611T14:49:07&recurrentId=&''errorCode=PAYMENT_ALFABANK_-2006''&sign=
eYkFYixpB3wnKoZDzkAiqWgdMkeHETDWmDsFMCaPO44=</td>
 
      </tr></table>
 
'''Response'''<syntaxhighlight lang="json" line="1">
headers
відсутній
 
body
"forwardUrl": "https://easypay.ua/whitepage/81b14a73-730c-40d4-8064-ce1c10e0c53b",
  "error": "null",
</syntaxhighlight>Для введення даних картки на платіжній сторінці користувач повинен бути переадресований за '''forwardUrl.'''
 
Після введення клієнтом даних картки на платіжній сторінці та завершення успішного списання коштів з картки – платіж буде поставлений у статус захолдованого. Перевірка статусу здійснюється викликом методу OrderState ([[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]]). Для завершення переказу на картку (перерахування на картку Одержувача) необхідно викликати метод [[MerchantAPI#Завершення переказу на карту Одержувача|Завершення переказу на карту Одержувача]]
 
При необхідності скасувати переказ (повернути суму відправнику) – потрібно викликати метод CancelOrder ([[MerchantAPI#Скасування платежу|Скасування платежу]]). Скасування частини суми переказу – неможливе. Лише скасування на повну суму.
 
'''Важливо! Завершення переказу ('''[[MerchantAPI#Завершення переказу на карту Одержувача|Завершення переказу на карту Одержувача]]''') або повне скасування переказу ('''[[MerchantAPI#Скасування платежу|Скасування платежу]]''') мають бути виконані протягом 30 днів з дати створення переказу ('''[[MerchantAPI#Створення замовлення на перекази між картами|Створення замовлення на перекази між картами]]''')'''
 
=== Завершення переказу на карту Одержувача ===
Призначений для завершення перекладу після створення за методом [[MerchantAPI#Створення замовлення на перекази між картами|Створення замовлення на перекази між картами]]
 
Перед викликом цього методу потрібно мати доступні AppID та PageID, отримані за методами CreateApp ([[MerchantAPI#Реєстрація точки та створення сесії|Реєстрація точки та створення сесії]]) та CreatePage ([[MerchantAPI#Створення сесії|Створення сесії]])


==== Виклик рекурентного платежу ====
----
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/system/createApp</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/reccurent/payment</span>
</p>'''Request'''<syntaxhighlight lang="json" line="1">
</p>'''Request'''<syntaxhighlight lang="json" line="1">
headers
headers
Рядок 2329: Рядок 2455:
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


body  
body
{
  "reccurentId": 0,
  "amount": 0
}
 
 
 
</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
headers
 
body
{
{
"order": {
  "reccurentId": 0,
            "serviceKey": "string",
  "transactionId": 0,
            "orderId": "string",
  "transactionStatus": "None",
            "transactionID": "string",
  "error": {
            "fields": [
    "errorCode": "string",
                          {  
    "title": "string",
                          "fieldName": "Pan",
    "description": "string",
                          "fieldValue": "1111222233334444"
     "errorMessage": "string",
                          "fieldKey": "af27c751-1b8b-47a8-94b3-14507e93b44a"}
     "fieldErrors": [
</syntaxhighlight><table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
       {
     <tr>
        "fieldName": "string",
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
        "errorCode": "string",
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
        "errorMessage": "string"
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
       }
     </tr><tr>
     ]
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>serviceKey</code>'''</td>
  }
       <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">ідентифікатор послуги Мерчант</td>
}
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">видає EasyPay</td>
 
    </tr><tr>
</syntaxhighlight>Також буде надіслано нотифікацію у разі успішного платежу. Створення рекурентного платежу на операцію, у структурі якої є спліт не підтримується.
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>orderId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">унікальний ідентифікатор номера замовлення у системі партнера; </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionID</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">унікальний номер транзакції у системі EasyPay;  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">до 120 символів</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>fieldName</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''Pan –''' значення параметра для ініціювання списання перекладу карту.  </td>
       <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">необов'язковий параметр ('''потрібно вказати, якщо потрібно замінити картку Одержувача)'''</td>
      
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>fieldValue</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''5555444433332222''' – вказується номер картки, куди потрібно зарахувати переклад (опціонально, альтернатива fieldKey) </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">необов'язковий параметр ('''потрібно вказати, якщо потрібно замінити картку Одержувача)'''</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>fieldKey</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''"bb37c1ef-3385-412e-8e76-4a9448f64f70"''' вказується GUID токена, куди слід зарахувати переклад (опціонально, альтернатива fieldValue).
</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">необов'язковий параметр ('''потрібно вказати, якщо потрібно замінити картку Одержувача)'''
</td>
    </tr></table>


<br>


'''Response''' <syntaxhighlight lang="json" line="1">
=== Видалення рекурентного платежу ===
----
<p style="border: 1px solid rgba(255, 0, 0, 0.5); background-color: rgba(255, 0, 0, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 100px;">
    <span style="position: absolute; top: 50%; left: 10px; background-color: #FF0000; color: #FFFFFF; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold; border: 2px solid #FF0000; transform: translateY(-50%);">DELETE</span>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px; color: #333333;">/api/merchant/reccurent/delete/{id}</span>
</p>
'''Request''' <syntaxhighlight lang="json" line="1">
headers
headers
відсутній
 
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


body
body
{
відсутній
"paymentState": "pending",
</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
"orderId": "Test Hold134",
headers
"amount": 1.05,
"transactionId": 1046180773,
"error": null
}
</syntaxhighlight><table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    <tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>amount</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">сума завершеного переказу</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>error</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">код помилки </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>orderId</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">унікальний ідентифікатор номера замовлення у системі партнера  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">до 120 символів</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>transactionID</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">унікальний номер транзакції у системі EasyPay  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">необов'язковий параметр ('''потрібно вказати, якщо потрібно замінити картку Одержувача)'''</td>
   
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>paymentState</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">статус платежу.  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Можливі paymentState:


* '''accepted (фінальний статус) - переказ успішно завершено;'''
-  
* '''declined (фінальнильнй статус) -переказ не завершено;'''
* '''pending (не фінальний статус) - платіж знаходиться в обробці, необхідно повторити запит статусу пізніше;'''
* '''paymentHold (не фінальний статус) - гроші з картки Відправника списано, але переказ не завершено на картку Одержувача;'''
* '''none (-) - статус платежу не визначено, необхідно повторити запит статусу до отримання кінцевого статусу;'''</td>
    </tr></table>


body


Для отримання актуального статусу переказу потрібно викликати OrderState ([[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]])
-
</syntaxhighlight>


== Робота з токенізованими картами ==
== Робота з токенізованими картами ==
Рядок 2433: Рядок 2526:
Перед викликом цього методу. Потрібно викликати один із методів:
Перед викликом цього методу. Потрібно викликати один із методів:


'''-''' [[MerchantAPI#Реєстрація точки та створення сесії|CreateApp (Реєстрація точки та створення сесії)]]
'''-''' [[MerchantAPI#Реєстрація точки та створення сесії|CreateApp]]  


'''-''' [[MerchantAPI#Створення сесії|CreatePage (Створення сесії]])
'''-''' [[MerchantAPI#Створення сесії|CreatePage]] <br>
<br>
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/tokenCard</span>'''Request''' <syntaxhighlight lang="json" line="1">
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/tokenCard</span></p>
<br>
'''Request''' <syntaxhighlight lang="json" line="1">
headers
headers


Рядок 2480: Рядок 2574:


===== Токенізація за допомогою введення даних картки користувачем на сторінці (сертифікація PCI:DSS не потрібна) =====
===== Токенізація за допомогою введення даних картки користувачем на сторінці (сертифікація PCI:DSS не потрібна) =====
Перед викликом цього методу, потрібно викликати один із методів:  
Перед викликом цього методу, потрібно викликати один із методів:


'''-''' CreateApp [[MerchantAPI#Реєстрація точки та створення сесії|(Реєстрація точки та створення сесії)]]
'''-''' [[MerchantAPI#Реєстрація точки та створення сесії|CreateApp]];


'''-''' CreatePage ([[MerchantAPI#Створення сесії|Створення сесії]])
'''-''' [[MerchantAPI#Створення сесії|CreatePage]];
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">api/merchant/tokenCard/create</span>'''Request'''<syntaxhighlight lang="markdown">
     <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">api/merchant/tokenCard/create</span></p>
'''Request'''<syntaxhighlight lang="json" line="1">
headers  
headers  
"Content-Type: application/json"
"PartnerKey: partnerName"
"locale: ua"
"AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


"Content-Type: "application/json"
body
"PartnerKey: "partnerName"
{
"locale: "ua"
  "phone": "8888",
"AppId: "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
  "expire": "2020-12-06T12:54:32.043Z",
"PageId: "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
  "urls": {
"Sign: "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
    "success": "https://test.ua",
    "failed": "https://test1.ua",
    "notify": "https://test2.ua",
    "back": "https://test3.ua"
  },
  "description": "testtts",
  "checkExistingToken": false
  "operationType":"SingleToken | createToken | ExistingToken"
}


</syntaxhighlight>
</syntaxhighlight>


===== Отримання списку токенізованих карт =====
Метод призначений для отримання списку токенізованих карток за номером телефону (ознакою) користувача.<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/tokenCards/get</span>'''Request''' <syntaxhighlight lang="markdown" line="1">
headers


'PartnerKey: partnerName'
'''Response'''<syntaxhighlight lang="json" line="1">
'locale: ua'
headers
'AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'TimeStamp: 1554360173'
'Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='
 
queryparams
phone = string
cardGuid= Guid
 
</syntaxhighlight>'''Response''' <syntaxhighlight lang="json" line="1">
headers  
відсутній


body
body
{
{
  "tokenCards": [
"forwardUrl": "https://easypay.ua/ua/tokencard/cae16afc-be56-4a39-8ce1-5de4f4142e76",
  {
"error": null
    "cardGuid": "55F5118B-B695-43BA-8555-AF8B698C4D2C",
    "pan": "48741234****1234",
    "expire”: "1222"
  }],
  "error": "null"
}
}


</syntaxhighlight>Якщо передати тільки ідентифікатор клієнта (параметр phone) - у відповіді будуть всі карти поточного клієнта. Якщо передати <code>phone</code> та <code>cardGuid</code> - у відповіді буде одна карта поточного клієнта.  
</syntaxhighlight>
 
{| style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"
<br>
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Параметр
===== Видалення токенізованих карт =====
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Характеристика
Метод призначений для видалення токенізованих карток за номером телефону. Якщо у клієнта під одним номером кілька карток, всі картки будуть видалені.
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Коментарій
<p style="border: 1px solid rgba(255, 0, 0, 0.5); background-color: rgba(255, 0, 0, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 100px;">
|-
    <span style="position: absolute; top: 50%; left: 10px; background-color: #FF0000; color: #FFFFFF; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold; border: 2px solid #FF0000; transform: translateY(-50%);">DELETE</span>
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>description</code>'''
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px; color: #333333;">/api/merchant/tokenCards/delete/phone</span>
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |опис, який відобразиться на сторінці токенізації
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>expire</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |час життя сторінки токенізації (по дефолту - 15 хвилин)
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>phone</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |ідентифікатор клієнта, під яким збережеться картка (будь-які літери, цифри, GUID.
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |'''Не повинен містити символ ‘+’'''
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>urls</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |містить інформацію про:


* сторінці успіху партнера (success) для переадресації клієнта після успішної токенізації, потрібно обов'язково передавати
* сторінці помилки ('''failed''') для переадресації клієнта у разі помилки
* адреса для відправки callback-запиту з деталями при успішній токенізації ('''notify''')
* адресу для повернення назад зі сторінки токенізації ('''back''')
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>forwardUrl</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |сторінка для додавання картки (токенізації)
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>checkExistingToken</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |перевірка наявності токена по карті, що вводиться у даного партнера.
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |Параметр може набувати значення:


<p style="border: 1px solid rgba(255, 0, 0, 0.5); background-color: rgba(255, 0, 0, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 100px;">
* true - проводити валідацію на наявність раніше створеного токена по цій карті;
    <span style="position: absolute; top: 50%; left: 10px; background-color: #FF0000; color: #FFFFFF; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold; border: 2px solid #FF0000; transform: translateY(-50%);">DELETE</span>
* false - валідація відсутня;
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px; color: #333333;">/api/merchant/tokenCards/delete/phone?CardGuid=Guid</span>'''Request'''<syntaxhighlight lang="markdown" line="1">
* null - валідація відсутня;
headers


'PartnerKey: partnerName'
'locale: ua'
'AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'TimeStamp: 1554360173'
'Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='


queryparams
Якщо параметру '''checkExistingToken''' присвоєно значення true, слід очікувати наступних сценаріїв поведінки:


cardGuid= Guid
* “checkExistingToken” : '''true,''' і в системі '''немає раніше створених токенів''' під зазначену карту під даним партнером (partnerKey) - формується запит на верифікацію введених даних картки (надсилання коду верифікації). За результатом успішної верифікації – створюється токен. При неуспішній верифікації – токен не створюється. У callback пишуться дані щодо створеного токену;
* “checkExistingToken” : '''true,''' і в системі '''є раніше створені токени''' під зазначену карту під даним партнером (partnerKey) - користувачу відкривається сторінка успіху, додаткова верифікація (надсилання коду верифікації не відбувається), токен не створюється, а в callback вказується '''масив раніше створених токенів''';
* “checkExistingToken” : '''false / null,''' ​​і в системі немає раніше створених токенів під зазначену карту під даним партнером (partnerKey) - формується запит на верифікацію введених даних картки (надсилання коду верифікації). За результатом успішної верифікації – створюється токен. При неуспішній верифікації – токен не створюється. У callback пишуться дані щодо створеного токену;
* “checkExistingToken” : '''false / null,''' ​​і в системі '''є раніше створені токени''' під зазначену карту під даним партнером (partnerKey) – формується запит на верифікацію введених даних картки (надсилання коду верифікації). За результатом успішної верифікації – створюється токен. При неуспішній верифікації – токен не створюється. У callback пишуться дані щодо створеного токену.
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>operationType</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |''(Новий параметр) задає тип операції токенізації''
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |
* '''SingleToken''' - для однієї карти завжди повертається той самий токен. Логіка така:


* перевіряємо чи є токен для цієї картки під '''partnerKey''' із запиту


</syntaxhighlight>'''Response'''<syntaxhighlight lang="markdown" line="1">
* якщо є 1 або більше токенів - беремо останній з них, створюємо новий запис з цим токеном для переданого ідентифікатора клієнта '''(phone)''', відправляємо цей токен в callback у кореневому параметрі '''cardGuid'''
headers
* якщо токенів немає - створюємо новий для цього '''phone''' і відправляємо його в callback в кореневому параметрі '''cardGuid''' (один і той же '''cardGuid''' може бути прив'язаний до різних phone)
відсутній


body
* '''createToken''' - значення за замовчуванням, звичайне створення токена (можна не передавати)
відсутній
* '''ExistingToken''' - поведінка аналогічна '''checkExistingToken:true'''
</syntaxhighlight>
|}
'''На сторінці токенізації можемо керувати інтерфейсом (на стороні EasyPay):'''
* відображати/сховати логотип EasyPay
* відображати/приховати логотип та назву партнера
* відображати/приховати опис з деталями токенізації
* відображати опис у згорнутому/розгорнутому вигляді


===== Видача кредиту (переказ на картку користувача) =====
'''Приклад callback - запит з IP адреси 93.183.196.26 після успішної токенізації:'''
Метод призначений для переказу на картку користувача суми кредиту.
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/createOrder</span>
</p>Перед викликом цього методу потрібно викликати один із методів:


* [[MerchantAPI#Реєстрація точки та створення сесії|CreateAPP]]
'''Request'''<syntaxhighlight lang="json" line="1">
* [[MerchantAPI#Створення сесії|CreatePage]]
<br>
'''Request:'''<syntaxhighlight lang="json" line="1">
headers
headers


"Content-Type": "application/json"
Sign : AStbusXxzYdr48vssdr4/VXZCITrad8vr1A/tWhCBP8=
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


body
body
{
{  
   "order":{
   "partnerKey":"partnerName",
  "serviceKey":"CARD-FILL",
  "phone":"test989",
  "description":"test top up card",
  "cardGuid":"2ad57b2e-eb5b-4a99-ad05-788cf589b8af",
  "amount":1.12, (decimal)
  "pan":"44411122****3558",
  "orderId":"test",
  "expire":"0524",
  "fields":[
  "datePost":"2021-02-24T17:32:07.447",
    {
  "codeType":"Mpi3Ds"
        "fieldName":"Pan",
}
        "fieldValue":"4102321200001111",
 
        "fieldKey":"b95d541a-c11f-49bc-9042-295dbf74ccn6"
 
    },
</syntaxhighlight>
    {
{| style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"
        "fieldName":"Phone",
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Параметр
        "fieldValue":"38093520000"
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Характеристика
    }
|-
  ],
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>phone</code>'''
    "additionalItems": {
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |ідентифікатор клієнта, під яким збережено картку
      "Merchant.ClientFullName": "Иванов Петр Сергеевич",
|-
                    "Merchant.Address": "04080, Київ, вул.Межигірська 82а корп.Б, кв.32",
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>cardGuid</code>'''
                    "Merchant.Inn": "3334445823"
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |токен збереженої карти
        }
|-
  },
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>pan</code>'''
  "userPaymentInstrument":{
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |маскований номер картки
  "instrumentType":"Vcash"
|-
  }
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>expire</code>'''
}
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |термін дії карти
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>datePost</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |час додавання картки
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>codeType</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |ознака типу верифікації картки. Mpi3Ds – з використанням 3ds.
|}
 


'''Приклад callback - запит з IP адреси 93.183.196.26 з параметром ExistingToken:'''


</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
'''Request'''<syntaxhighlight lang="json" line="1">
headers
headers
відсутній
Sign : AStbusXxzYdr48vssdr4/VXZCITrad8vr1A/tWhCBP8=


body  
body
{
{
"redirectUrl": null,
  "partnerKey":"easypay-test",
"action": null,
  "phone":"380509899549",
"paymentState": "Confirmed",
  "cardGuid":null,
"status": "Done",
  "pan":"44411122****3558",
"actionType": "UrlRedirect",
  "expire":"0524",
"transactionId": "766934634",
  "datePost":"2021-05-18T18:41:53.152",
"retrievalReferenceNo": "null",
  "codeType":"Code",
"responseItems": "null",
  "existingTokens":[
"error": "null"
      {
        "partnerKey":"easypay-test",
        "phone":"380509899549",
        "cardGuid":"bac4f855-xxxx-xxxx-bece-14cdf23c6c52",
        "pan":"44411122****3558",
        "expire":"0524",
        "datePost":"2021-05-18T18:28:23.840",
        "codeType":"Mpi3Ds"
      },
      {
        "partnerKey":"easypay-test",
        "phone":"380509899549",
        "cardGuid":"6338e8b4-xxxx-xxxx-a3e5-f46ad0cb0efa",
        "pan":"44411123****3558",
        "expire":"0524",
        "datePost":"2021-05-18T18:34:25.733",
        "codeType":"Mpi3Ds"
  },
      {
        "partnerKey":"easypay-test",
        "phone":"380509899549",
        "cardGuid":"18e3c35e-xxxx-xxxx-ba59-9506154394c0",
        "pan":"44411123****3558",
        "expire":"0524",
        "datePost":"2021-05-18T18:39:42.010",
        "codeType":"Mpi3Ds"
      }
  ]
}
}


</syntaxhighlight>'''Параметри'''
</syntaxhighlight>
{| style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"
{| style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Параметр
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Параметр
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Характеристика
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Характеристика
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Коментарій
|-
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |paymentState
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>existingTokens</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |масив з даними раніше створених токенів по цій карті під даного партнера '''(partnerKey)'''
* '''Confirmed''' оплата пройшла успішно
|}
* '''WaitConfirm ''' очікується підтвердження платежу
* '''Rejected''' і '''Refunded''' платіж відхинело
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>transactionId</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" | ідентифікатор платежу в системі Easypay
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |У об'єкти поля передається інформація для поповнення карти. Номер картки можна вказувати:


* для випадку з PCI DSS сертифікацією: у відкритому вигляді


'''<code>"fieldName":"Pan",</code>'''


'''<code>"fieldValue":"4102321200001111",</code>'''
===== Отримання списку токенізованих карт =====
----Метод призначений для отримання списку токенізованих карток за номером телефону (ознакою) користувача.
<br>
<p style="border: 1px solid deepskyblue; background-color: rgba(135, 206, 235, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 70px;">
<span style="position: absolute; top: 10px; left: 10px; background-color: deepskyblue; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">GET</span>
<span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/tokenCards/get</span></p>
'''Request'''<syntaxhighlight lang="markdown" line="1">
headers


* для випадку без PCI DSS сертифікації: у вигляді токена (як отримати токен картки - див. [[MerchantAPI#Токенізація карти|Токенізація карти]]):
'PartnerKey: partnerName'
'locale: ua'
'AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'TimeStamp: 1554360173'
'Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='


'''<code>"fieldName":"Pan",</code>'''
queryparams
phone = string
cardGuid= Guid
</syntaxhighlight>'''Response''' <syntaxhighlight lang="json" line="1">
headers
відсутній


'''<code>"fieldKey":"b95d541a-c11f-49bc-9042-295dbf74ccn6"</code>'''
body
{
  "tokenCards": [
  {
    "cardGuid": "55F5118B-B695-43BA-8555-AF8B698C4D2C",
    "pan": "48741234****1234",
    "expire”: "1222"
  }],
  "error": "null"
}


Також потрібно вказати:
</syntaxhighlight>Якщо передати тільки ідентифікатор клієнта (параметр phone) - у відповіді будуть всі карти поточного клієнта. Якщо передати <code>phone</code> та <code>cardGuid</code> - у відповіді буде одна карта поточного клієнта.


- номер телефону клієнта:
<br>


'''<code>"fieldName":"Phone",</code>'''
===== Видалення токенізованих карт =====
----Метод призначений для видалення токенізованих карток за номером телефону. Якщо у клієнта під одним номером кілька карток, всі картки будуть видалені.
<p style="border: 1px solid rgba(255, 0, 0, 0.5); background-color: rgba(255, 0, 0, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 100px;">
    <span style="position: absolute; top: 50%; left: 10px; background-color: #FF0000; color: #FFFFFF; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold; border: 2px solid #FF0000; transform: translateY(-50%);">DELETE</span>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px; color: #333333;">/api/merchant/tokenCards/delete/phone</span>


'''<code>"fieldValue":"38093520000"</code>'''


- ПІБ та адреса клієнта АБО ПІБ та ІПН клієнта:
<p style="border: 1px solid rgba(255, 0, 0, 0.5); background-color: rgba(255, 0, 0, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 100px;">
    <span style="position: absolute; top: 50%; left: 10px; background-color: #FF0000; color: #FFFFFF; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold; border: 2px solid #FF0000; transform: translateY(-50%);">DELETE</span>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px; color: #333333;">/api/merchant/tokenCards/delete/phone?CardGuid=Guid</span></p>'''Request'''<syntaxhighlight lang="markdown" line="1">
headers


'''<code>"additionalItems": {</code>'''
'PartnerKey: partnerName'
'locale: ua'
'AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'TimeStamp: 1554360173'
'Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='


'''<code>      "Merchant.ClientFullName": "Іванов Петро Сергійович"</code>'''
queryparams


'''<code>                  "Merchant.Address": "04080, Київ, вул.Межигірська 82а корп.Б, кв.32"</code>'''
cardGuid= Guid


'''<code>      "Merchant.Inn": "3334445862"</code>'''


'''<code>        }</code>'''
</syntaxhighlight>'''Response'''<syntaxhighlight lang="markdown" line="1">
|}
headers
відсутній


body
відсутній
</syntaxhighlight>


'''Статус видачі кредиту:'''
===== Видача кредиту (переказ на картку користувача) =====
Метод призначений для переказу на картку користувача суми кредиту.
<p style="border: 1px solid #9ACD32; background-color: rgba(192, 255, 192, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/createOrder</span>
</p>Перед викликом цього методу потрібно викликати один із методів:


* Якщо у відповіді отримано кінцевий статус <code>(paymentState = Confirmed / Rejected / Refunded)</code> - необхідно присвоїти його платежу.
* [[MerchantAPI#Реєстрація точки та створення сесії|CreateAPP]]
* Якщо кінцевий статус у відповіді не отримано <code>(paymentState = WaitConfirm)</code>, '''у тому числі при серверних, мережевих та будь-яких інших відповідях та помилках''' - необхідно запросити статус платежу методом '''orderState''' ([[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]]) до отримання кінцевого статусу.
* [[MerchantAPI#Створення сесії|CreatePage]]
<br>
'''Request:'''<syntaxhighlight lang="json" line="1">
headers


'''''Важливо врахувати, що нотифікація про оплату не надсилається (якщо партнер/мерчант не повідомив про необхідність такого налаштування).'''''
"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="


'''''Скасування транзакції не передбачено.'''''
body
 
Response (Приклади відповідей при помилках: status code = 400)<syntaxhighlight lang="json" line="1">
{
{
    "error": {
  "order":{
        "errorCode": "MERCHANT_CREATEORDER_VALIDATION_EXCEPTION",
  "serviceKey":"CARD-FILL",
        "title": null,
  "description":"test top up card",
        "description": null,
  "amount":1.12, (decimal)
        "errorMessage": "MERCHANT_CREATEORDER_VALIDATION_EXCEPTION",
  "orderId":"test",
        "fieldErrors": [
  "fields":[
            {
    {
                "fieldName": "Order.Fields[0]",
        "fieldName":"Pan",
                "errorCode": "SERVICE_FIELDS_VALIDATION_EXCEPTION",
        "fieldValue":"4102321200001111",
                "errorMessage": "Вказана умова не була виконана для значення поля."
        "fieldKey":"b95d541a-c11f-49bc-9042-295dbf74ccn6"
            }
    },
        ]
    {
    }
        "fieldName":"Phone",
        "fieldValue":"38093520000"
    }
  ],
    "additionalItems": {
      "Merchant.ClientFullName": "Иванов Петр Сергеевич",
                    "Merchant.Address": "04080, Київ, вул.Межигірська 82а корп.Б, кв.32",
                    "Merchant.Inn": "3334445823"
        }
  },
  "userPaymentInstrument":{
  "instrumentType":"Vcash"
  }
}
}




{
</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
    "error": {
headers
        "errorCode": "PAYMENT_ALFABANK_CASH2CARD_C2Pv2",
відсутній
        "title": "Платіжна помилка",
        "description": "Платіжна помилка",
        "errorMessage": "Обслуговуються тільки карти емітовані українськими банками",
        "fieldErrors": []
    }
}
 


body
{
{
    "error": {
"redirectUrl": null,
        "errorCode": "PAYMENT_ALFABANK_CASH2CARD_C2Pa8",
"action": null,
        "title": "Платіжна помилка",
"paymentState": "Confirmed",
        "description": "Платіжна помилка",
"status": "Done",
        "errorMessage": "Необхідно уточнити реквізити картки одержувача у банку емітента",
"actionType": "UrlRedirect",
        "fieldErrors": []
"transactionId": "766934634",
    }
"retrievalReferenceNo": "null",
"responseItems": "null",
"error": "null"
}
}


</syntaxhighlight>
</syntaxhighlight>'''Опис параметрів''' 
 
{| style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;"
===== Нотифікації (колбеки) щодо операцій поповнення карток =====
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Параметр
Дані колбеки є опціональним (додатковим) способом отримання інформації від EasyPay про результат виконання запиту на поповнення картки.
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Характеристика
! style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;" |Коментарій
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |paymentState
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |
* '''Confirmed''' оплата пройшла успішно
* '''WaitConfirm ''' очікується підтвердження платежу
* '''Rejected''' і '''Refunded''' платіж відхинело
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |
|-
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |'''<code>transactionId</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" | ідентифікатор платежу в системі Easypay
| style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;" |У об'єкти поля передається інформація для поповнення карти. Номер картки можна вказувати:


Для активації отримання колбеків мерчант (партнер) повинен повідомити EasyPay про таку необхідність, після чого EasyPay включає цю опцію.
* для випадку з PCI DSS сертифікацією: у відкритому вигляді


Спосіб відправки колбека - '''HTTP - з IP 93.183.196.26''' буде надіслано '''POST''' запит з інформацією про платіж на вказаний <code>urlNotify</code>.
'''<code>"fieldName":"Pan",</code>'''


<code>urlNotify</code> прописується на стороні EasyPay і використовується за замовчуванням, якщо партнер не передав його у своєму запиті.
'''<code>"fieldValue":"4102321200001111",</code>'''


URL для повідомлень ('''UrlNotify''') повідомляє партнер (мерчант).
* для випадку без PCI DSS сертифікації: у вигляді токена (як отримати токен картки - див. [[MerchantAPI#Токенізація карти|Токенізація карти]]):


Партнер може передавати '''UrlNotify''' у запиті '''createOrder''' у параметрі:
'''<code>"fieldName":"Pan",</code>'''


<code>"order":{</code>
'''<code>"fieldKey":"b95d541a-c11f-49bc-9042-295dbf74ccn6"</code>'''


<code>"additionalItems":{</code>
Також потрібно вказати:


<code>"Merchant.UrlNotify":"<nowiki>https://notify.url</nowiki>"</code>
- номер телефону клієнта:


<code>}</code>
'''<code>"fieldName":"Phone",</code>'''


<code>}</code>
'''<code>"fieldValue":"38093520000"</code>'''


"Merchant.UrlNotify" параметр не може бути порожнім і повинен відповідати формату URL.
-  ПІБ та адреса клієнта АБО ПІБ та ІПН клієнта:


Якщо у відповідь не отримано HTTP StatusCode 200 - запит нотифі буде надіслано повторно, доки не отримано статусу “200 ОК”.
'''<code>"additionalItems": {</code>'''


Коли нотифікацію (колбек) успішно доставлено (отримано статус 200 ОК), повторне відправлення колбеків припиняється.
'''<code>      "Merchant.ClientFullName": "Іванов Петро Сергійович"</code>'''


Відправлення колбеків можливе за двома сценаріями:
'''<code>                  "Merchant.Address": "04080, Київ, вул.Межигірська 82а корп.Б, кв.32"</code>'''


1) лише за успішними операціями (транзакціями);
'''<code>      "Merchant.Inn": "3334445862"</code>'''


2) за операціями (транзакціями) у фінальному статусі (успішні та відхилені).
'''<code>        }</code>'''
|}


Надання фінального статусу операції (транзакції) асинхронно з процесом відправки колбека (фінансова транзакція набуває фінального статусу незалежно від статусу прийняття колбека партнером).


'''Request'''<syntaxhighlight lang="markdown" line="1">
'''Статус видачі кредиту:'''
headers


"Sign: "Bq2d0oaqVGMRWpX5wsGpOlpqLg42pBdDO7TfTPYVmnU="
* Якщо у відповіді отримано кінцевий статус <code>(paymentState = Confirmed / Rejected / Refunded)</code> - необхідно присвоїти його платежу.
"User-Agent": "EasyPay.MerchantNotifyService"
* Якщо кінцевий статус у відповіді не отримано <code>(paymentState = WaitConfirm)</code>, '''у тому числі при серверних, мережевих та будь-яких інших відповідях та помилках''' - необхідно запросити статус платежу методом '''orderState''' ([[MerchantAPI#Перевірка статусу платежу|Перевірка статусу платежу]]) до отримання кінцевого статусу.
<br>
<p style="border: 1px solid #4A90E2; background-color: rgba(74, 144, 226, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
    Важливо врахувати, що нотифікація про оплату не надсилається (якщо партнер/мерчант не повідомив про необхідність такого налаштування).<br><br>
    Скасування транзакції не передбачено.
</p>
<br>


body


Response (Приклади відповідей при помилках: status code = 400)<syntaxhighlight lang="json" line="1">
{
{
  "action": "payment",
    "error": {
  "merchant_id": 5347,
        "errorCode": "MERCHANT_CREATEORDER_VALIDATION_EXCEPTION",
  "order_id": "5",
        "title": null,
  "date": "2019-06-19T15:38:10.7802613+03:00",
        "description": null,
  "details": {
        "errorMessage": "MERCHANT_CREATEORDER_VALIDATION_EXCEPTION",
    "amount": 1.00,
        "fieldErrors": [
    "desc": "Wooden tables x 10",
            {
    "payment_id": 724502946,
                "fieldName": "Order.Fields[0]",
     "recurrent_id": null
                "errorCode": "SERVICE_FIELDS_VALIDATION_EXCEPTION",
  },
                "errorMessage": "Вказана умова не була виконана для значення поля."
  "additionalitems": {
            }
    "BankName": "CB PRIVATBANK",
        ]
    "Card.Pan": "414962******1234",
    }
  }
}
 
 
{
     "error": {
        "errorCode": "PAYMENT_ALFABANK_CASH2CARD_C2Pv2",
        "title": "Платіжна помилка",
        "description": "Платіжна помилка",
        "errorMessage": "Обслуговуються тільки карти емітовані українськими банками",
        "fieldErrors": []
    }
}
}


</syntaxhighlight>'''Параметри''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    <tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>action</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">тип оповіщення</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">'''payment -''' про успішний платіж (повторюється, якщо у відповідь не отримано статусу 200)</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>merchant_id</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер сервісу партнера на стороні EasyPay; </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>order_id</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер замовлення партнера із запиту createOrder;  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>date</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">час надання платежу статусу на стороні EasyPay;  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">необов'язковий параметр ('''потрібно вказати, якщо потрібно замінити картку Одержувача)'''</td>
   
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>details</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">детальна інформація про платіжну операцію (транзакцію) </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
* '''payment_id -''' ID детальна інформація про платіжну операцію (транзакцію):
* '''amount''' - сума фінансової операції;
* '''desc''' - опис замовлення, отриманий під час запиту CreateOrder;
* '''recurrent_id''' - ознака реккурентного платежу (завжди за замовчуванням на операціях поповнення картки – null);</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>additionalitems</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">блок додаткових параметрів, до якого можуть включатися додаткові айтеми, отримані в запиті CreateOrder:
</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
* '''BankName''' - назва банку власника картки;
* '''Card.Pan -''' номер картки у маскованому вигляді.</td>
    </tr></table>


{
    "error": {
        "errorCode": "PAYMENT_ALFABANK_CASH2CARD_C2Pa8",
        "title": "Платіжна помилка",
        "description": "Платіжна помилка",
        "errorMessage": "Необхідно уточнити реквізити картки одержувача у банку емітента",
        "fieldErrors": []
    }
}
</syntaxhighlight>


Необхідно перевіряти підпис у нашому HTTP notify, налаштувати прийом лише для наших IP 93.183.196.26.
===== Нотифікації (колбеки) щодо операцій поповнення карток =====
Дані колбеки є опціональним (додатковим) способом отримання інформації від EasyPay про результат виконання запиту на поповнення картки.


'''У випадку, якщо підпис notify не перевірено, всі фінансові ризики перекладаються на партнера.'''
Для активації отримання колбеків мерчант (партнер) повинен повідомити EasyPay про таку необхідність, після чого EasyPay включає цю опцію.


== Інтеграція з ApplePay ==
Спосіб відправки колбека - '''HTTP - з IP 93.183.196.26''' буде надіслано '''POST''' запит з інформацією про платіж на вказаний <code>urlNotify</code>.
----Вимоги
 
<code>urlNotify</code> прописується на стороні EasyPay і використовується за замовчуванням, якщо партнер не передав його у своєму запиті.
 
URL для повідомлень ('''UrlNotify''') повідомляє партнер (мерчант).
 
Партнер може передавати '''UrlNotify''' у запиті '''createOrder''' у параметрі:


# Ваш сайт повинен працювати за схемою HTTPS та підтримувати протокол TLS 1.2.
<code>"order":{</code>
# Потрібно погодитись з умовами надання послуг Apple Pay.
# Необхідно укласти договір із Easypay.ua.


''Apple Pay надає простий та безпечний спосіб проведення платежів у додатках iOS, watchOS та сайтах Safari. Використовуючи Face ID, Touch ID або двічі клацнувши Apple Watch, користувачі можуть швидко та безпечно передавати свої платіжні дані для оплати.''
<code>"additionalItems":{</code>


=== Оплата з платіжної сторінки Easypay ===
<code>"Merchant.UrlNotify":"<nowiki>https://notify.url</nowiki>"</code>
При такому способі підключення немає потреби у додаткових інтеграціях. Кнопка Apple Pay буде відображена на сторінці оплати EasyPay


=== Оплата ApplePay з додатку ===
<code>}</code>
'''Вимоги:'''


# Необхідно мати акаунт у [https://developer.apple.com/ Apple Developer], в який потрібно зареєструвати індивідуальний [https://help.apple.com/developer-account/#/devb2e62b839?sub=devf31990e3f Merchant ID].
<code>}</code>
# Необхідно дотримуватися [https://developer.apple.com/apple-pay/marketing/ вимоги до брендування].


==== Реєстрація та перевірка в системі Apple Pay ====
"Merchant.UrlNotify" параметр не може бути порожнім і повинен відповідати формату URL.


# Зареєструйте MerchantID та надішліть до EasyPay:
Якщо у відповідь не отримано HTTP StatusCode 200 - запит нотифі буде надіслано повторно, доки не отримано статусу “200 ОК”.
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
## У розділі "Identifiers" виберіть "Merchant IDs".
## Додайте новий Merchant ID, натиснувши на "+" у верхньому правому куті екрана.
## Заповніть поля * і натисніть «Continue».
## Натисніть Register, щоб підтвердити введені дані.
## Повідомте EasyPay ваш MerchantID.


''Примітка: * - Description – опис; Identifier – домен вашого сайту у зворотному порядку, з додаванням «merchant» на початку (наприклад, сайт shop.ua, Identifier – merchant.ua.shop).''
Коли нотифікацію (колбек) успішно доставлено (отримано статус 200 ОК), повторне відправлення колбеків припиняється.


# Отримайте від EasyPay сформований CSR-файл, який буде необхідний для подальших кроків.
Відправлення колбеків можливе за двома сценаріями:
# Сформуйте Apple Pay Payment Processing Certificate та надішліть до EasyPay:
 
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
1) лише за успішними операціями (транзакціями);
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
 
## У розділі "Identifiers" виберіть "Merchant IDs".
2) за операціями (транзакціями) у фінальному статусі (успішні та відхилені).
## Виберіть створений вами Merchant ID та натисніть «Edit».
 
## У розділі Apple Pay Payment Processing Certificate, натисніть "Create Certificate".
Надання фінального статусу операції (транзакції) асинхронно з процесом відправки колбека (фінансова транзакція набуває фінального статусу незалежно від статусу прийняття колбека партнером).
## На наступному екрані натисніть Continue.
## Візьміть отриманий від EasyPay CSR-файл і завантажте його на сайт, натиснувши Choose File, а потім Continue.
## Завантажте згенерований сертифікат.
## Надішліть сертифікат (файл apple_pay.cer) до EasyPay


==== Технічна інтеграція з ApplePay ====
'''Request''' <syntaxhighlight lang="markdown" line="1">
headers


# Щоб інтегрувати Apple Pay у мобільний додаток, дотримуйтесь інструкцій за посиланням: https://developer.apple.com/documentation/passkit/apple_pay.  
"Sign: "Bq2d0oaqVGMRWpX5wsGpOlpqLg42pBdDO7TfTPYVmnU="
"User-Agent": "EasyPay.MerchantNotifyService"


body


'''Приклад відповіді ApplePay'''<syntaxhighlight lang="json" line="1">
{
{
"paymentData":
  "action": "payment",
   {
   "merchant_id": 5347,
    "version":"EC_v1",   "data":"FDXK/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ/dGK9UZDP/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp/clv4",   "signature":"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=",
  "order_id": "5",
     "header":
  "date": "2019-06-19T15:38:10.7802613+03:00",
     {      "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==",
  "details": {
      "publicKeyHash":"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=",
     "amount": 1.00,
      "transactionId":"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4"
     "desc": "Wooden tables x 10",
    }
    "payment_id": 724502946,
    "recurrent_id": null
   },
   },
   "paymentMethod":
   "additionalitems": {
  {
     "BankName": "CB PRIVATBANK",
     "displayName":"MasterCard 5179",
     "Card.Pan": "414962******1234",
     "network":"MasterCard",
    "type":"debit"
  },  "transactionIdentifier":"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4"
}
 
</syntaxhighlight>2. Надішліть <code>paymentData</code> в поле <code>userPaymentInstrument / token в Easypay</code> ([[MerchantAPI#Створення замовлення|Створення замовлення]]). Приклад запиту '''createOrder''':<syntaxhighlight lang="json" line="1">
{
  "order":{
    "serviceKey":"MERCHANT-TEST",
    "orderId":"test_20210309-171148",
    "description":"Test payment",
    "amount":"1"
  },
  "userPaymentInstrument":{
    "instrumentType":"ApplePay",
    "token":"{\"paymentData\": {\"version\":\"EC_v1\",  \"data\":\"FDXK\/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8\/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV\/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ\/dGK9UZDP\/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp\/clv4\",  \"signature\":\"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB\/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=\",\"header\":{  \"ephemeralPublicKey\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo\/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==\", \"publicKeyHash\":\"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=\",\"transactionId\":\"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4\"}  },  \"paymentMethod\":  {  \"displayName\":\"MasterCard 5179\",\"network\":\"MasterCard\",\"type\":\"debit\"  },  \"transactionIdentifier\":\"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4\"}",
    "gatewayMerchantId":"{ApplePayMerchantId}"
   }
   }
}
}


</syntaxhighlight>
</syntaxhighlight>'''Опис параметрів'''  <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
 
    <tr>
=== Оплата із сайту ===
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
Вимоги
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
 
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
# Необхідно мати акаунт у [https://developer.apple.com/ Apple Developer], до якого потрібно зареєструвати індивідуальний [https://help.apple.com/developer-account/#/devb2e62b839?sub=devf31990e3f Merchant ID].
    </tr><tr>
# Необхідно дотримуватися [https://developer.apple.com/apple-pay/marketing/ вимог до брендування].
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>action</code>'''</td>
 
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">тип оповіщення</td>
==== Реєстрація та перевірка в системі Apple Pay ====
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">'''payment -''' про успішний платіж (повторюється, якщо у відповідь не отримано статусу 200)</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>merchant_id</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер сервісу партнера на стороні EasyPay; </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>order_id</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер замовлення партнера із запиту createOrder;  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;"></td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>date</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">час надання платежу статусу на стороні EasyPay;  </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">необов'язковий параметр ('''потрібно вказати, якщо потрібно замінити картку Одержувача)'''</td>
   
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>details</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">детальна інформація про платіжну операцію (транзакцію) </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
* '''payment_id -''' ID детальна інформація про платіжну операцію (транзакцію):
* '''amount''' - сума фінансової операції;
* '''desc''' - опис замовлення, отриманий під час запиту CreateOrder;
* '''recurrent_id''' - ознака реккурентного платежу (завжди за замовчуванням на операціях поповнення картки – null);</td>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>additionalitems</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">блок додаткових параметрів, до якого можуть включатися додаткові айтеми, отримані в запиті CreateOrder:
</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
* '''BankName''' - назва банку власника картки;
* '''Card.Pan -''' номер картки у маскованому вигляді.</td>
    </tr></table>
 
 
Необхідно перевіряти підпис у нашому HTTP notify, налаштувати прийом лише для наших IP 93.183.196.26.
 


# Зареєструйте MerchantID та надішліть до EasyPay:
<p style="border: 1px solid #FFA500; background-color: rgba(255, 165, 0, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
    ⚠️ <strong>Важливо!</strong> У випадку, якщо підпис <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #D63384;">notify</span> не перевірено, всі фінансові ризики перекладаються на партнера.
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
</p>
 
== Інтеграція з ApplePay ==
----Вимоги
 
# Ваш сайт повинен працювати за схемою HTTPS та підтримувати протокол TLS 1.2.
# Потрібно погодитись з умовами надання послуг Apple Pay.
# Необхідно укласти договір із Easypay.ua.
<br>Apple Pay надає простий та безпечний спосіб проведення платежів у додатках iOS, watchOS та сайтах Safari. Використовуючи Face ID, Touch ID або двічі клацнувши Apple Watch, користувачі можуть швидко та безпечно передавати свої платіжні дані для оплати.
 
=== Оплата з платіжної сторінки Easypay ===
----При такому способі підключення немає потреби у додаткових інтеграціях. Кнопка Apple Pay буде відображена на сторінці оплати EasyPay
 
=== Оплата ApplePay з додатку ===
----'''Вимоги:'''
 
# Необхідно мати акаунт у [https://developer.apple.com/ Apple Developer], в який потрібно зареєструвати індивідуальний [https://help.apple.com/developer-account/#/devb2e62b839?sub=devf31990e3f Merchant ID].
# Необхідно дотримуватися [https://developer.apple.com/apple-pay/marketing/ вимоги до брендування].
 
<br>
==== Реєстрація та перевірка в системі Apple Pay ====
 
# Зареєструйте MerchantID та надішліть до EasyPay:
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
## У розділі "Identifiers" виберіть "Merchant IDs".
## У розділі "Identifiers" виберіть "Merchant IDs".
## Додайте новий Merchant ID, натиснувши на "+" у верхньому правому куті екрана.
## Додайте новий Merchant ID, натиснувши на "+" у верхньому правому куті екрана.
Рядок 2954: Рядок 3177:
## Завантажте згенерований сертифікат.
## Завантажте згенерований сертифікат.
## Надішліть сертифікат (файл apple_pay.cer) до EasyPay
## Надішліть сертифікат (файл apple_pay.cer) до EasyPay
# Зареєструйте та підтвердіть свій домен:
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
## У розділі "Identifiers" виберіть "Merchant IDs".
## Виберіть створений вами Merchant ID та натисніть «Edit».
## У розділі "Merchant Domains" натисніть "Add Domain".
## Введіть ім'я домену та натисніть "Continue" *.
## Завантажте файл apple-developer-merchantid-domain-association.txt.
## Збережіть файл на сервері від Apple.
## Натисніть Verify.


''Примітка: * - домен повинен підтримувати HTTPS.''
==== Технічна інтеграція з ApplePay ====
 
# Щоб інтегрувати Apple Pay у мобільний додаток, дотримуйтесь інструкцій за посиланням: https://developer.apple.com/documentation/passkit/apple_pay.  


# Створіть Apple Pay Merchant Identity Certificate:
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
## У розділі "Identifiers" виберіть "Merchant IDs".
## Виберіть створений вами Merchant ID та натисніть «Edit».
## У розділі Apple Pay Merchant Identity Certificate натисніть Create Certificate.
## Виконайте дії, описані на сайті Apple, а потім натисніть «Continue».
## Скопіюйте згенерований CSR-файл, вибравши Choose File, а потім Continue.
## Завантажте згенерований сертифікат (merchant_id.cer) і відкрийте його у програмі Keychain Access на комп'ютері Mac.
## У Keychain Access виберіть сертифікат, що імпортується, та експортувати його у формат .p12 (Personal Information Exchange).
## Виконайте команду: openssl pkcs12 -in merchant_id.p12 -out merchant_id.pem -nodes -clcerts
## Скопіюйте створений сертифікат у форматі PEM на сервер. Це буде потрібно для створення [https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/requesting_an_apple_pay_payment_session Apple Pay Payment Session] в процесі [https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/providing_merchant_validation перевірки магазину].


==== Технічна інтеграція з ApplePay ====
'''Приклад відповіді ApplePay''' <syntaxhighlight lang="json" line="1">
Для створення сертифікату (-ів) від Партнера потрібні:
{
"paymentData":
  {
    "version":"EC_v1",    "data":"FDXK/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ/dGK9UZDP/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp/clv4",    "signature":"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=",
    "header":
    {      "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==",
      "publicKeyHash":"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=",
      "transactionId":"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4"
    }
  },
  "paymentMethod":
  {
    "displayName":"MasterCard 5179",
    "network":"MasterCard",
    "type":"debit"
  },  "transactionIdentifier":"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4"
}


# Country Name (2 letter code) [AU]: ?
</syntaxhighlight>2. Надішліть <code>paymentData</code> в поле <code>userPaymentInstrument / token в Easypay</code> ([[MerchantAPI#Створення замовлення|Створення замовлення]]). Приклад запиту '''createOrder''':<syntaxhighlight lang="json" line="1">
# State or Province Name (full name) [Some-State]: ?
{
# Locality Name (eg, city) []: ?
  "order":{
# Organization Name (eg, company) [Internet Widgits Pty Ltd]: ?
    "serviceKey":"MERCHANT-TEST",
# Organizational Unit Name (eg, section) []: ?
    "orderId":"test_20210309-171148",
# Common Name (e.g. server FQDN or YOUR name) []: ?
    "description":"Test payment",
# Email Address []: ?
    "amount":"1"
  },
  "userPaymentInstrument":{
    "instrumentType":"ApplePay",
    "token":"{\"paymentData\": {\"version\":\"EC_v1\",  \"data\":\"FDXK\/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8\/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV\/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ\/dGK9UZDP\/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp\/clv4\",  \"signature\":\"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB\/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=\",\"header\":{  \"ephemeralPublicKey\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo\/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==\", \"publicKeyHash\":\"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=\",\"transactionId\":\"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4\"}  },  \"paymentMethod\":  {  \"displayName\":\"MasterCard 5179\",\"network\":\"MasterCard\",\"type\":\"debit\"  }, \"transactionIdentifier\":\"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4\"}",
    "gatewayMerchantId":"{ApplePayMerchantId}"
  }
}
 
</syntaxhighlight>


Повідомте, чи буде оплата тільки в додатку, або також і на WEB.
=== Оплата із сайту ===
----'''Вимоги:'''


Щоб інтегрувати Apple Pay на сайт, дотримуйтесь інструкцій за [https://developer.apple.com/documentation/apple_pay_on_the_web. посиланням]
# Необхідно мати акаунт у [https://developer.apple.com/ Apple Developer], до якого потрібно зареєструвати індивідуальний [https://help.apple.com/developer-account/#/devb2e62b839?sub=devf31990e3f Merchant ID].
# Необхідно дотримуватися [https://developer.apple.com/apple-pay/marketing/ вимог до брендування].


# Перевірте можливість оплати з Apple Pay. Виконується перевірка, підтримує або браузер оплату з Apple Pay, а також є у Wallet картку, якою можна оплачувати.
==== Реєстрація та перевірка в системі Apple Pay ====
<syntaxhighlight lang="markdown" line="1">
if (window.ApplePaySession) {
    var promise = ApplePaySession.canMakePaymentsWithActiveCard({YOUR_MERCHANT_ID});
    promise.then(function(canMakePayments) {
        if (canMakePayments)
    });
} else {
}


</syntaxhighlight>
# Зареєструйте MerchantID та надішліть до EasyPay:
2. Сформуйте структуру платежу для сесії<syntaxhighlight lang="markdown">
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
document.getElementById("apple-pay-button").onclick = function(event) {
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
    var paymentRequest = {
## У розділі "Identifiers" виберіть "Merchant IDs".
        currencyCode: 'UAH',
## Додайте новий Merchant ID, натиснувши на "+" у верхньому правому куті екрана.
        countryCode: 'UA',
## Заповніть поля * і натисніть «Continue».
        total: {
## Натисніть Register, щоб підтвердити введені дані.
            label: {PRODUCT_NAME},
## Повідомте EasyPay ваш MerchantID.
            amount: {PAYMENT_AMOUNT}
<br>
        },
<p style="border: 1px solid #4A90E2; background-color: rgba(74, 144, 226, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
        merchantCapabilities: ['supports3DS'],
    Примітка: <em>* - Description – опис; Identifier – домен вашого сайту у зворотному порядку, з додаванням «merchant» на початку (наприклад, сайт shop.ua, Identifier – merchant.ua.shop).</em>
        supportedNetworks: ['masterCard', 'visa']
</p>
    };
<br>
 
# Отримайте від EasyPay сформований CSR-файл, який буде необхідний для подальших кроків.
var session = new ApplePaySession(3, paymentRequest)
# Сформуйте Apple Pay Payment Processing Certificate та надішліть до EasyPay:
 
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
</syntaxhighlight>
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
3. Відкрити платіжну сесію з Apple, отримати від них paymentData:
## У розділі "Identifiers" виберіть "Merchant IDs".
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
## Виберіть створений вами Merchant ID та натисніть «Edit».
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
## У розділі Apple Pay Payment Processing Certificate, натисніть "Create Certificate".
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/applePay/validateSession</span><syntaxhighlight lang="json" line="1">
## На наступному екрані натисніть Continue.
headers
## Візьміть отриманий від EasyPay CSR-файл і завантажте його на сайт, натиснувши Choose File, а потім Continue.
 
## Завантажте згенерований сертифікат.
--header "Content-Type: application/json"
## Надішліть сертифікат (файл apple_pay.cer) до EasyPay
--header "AppId: cd7fde18-15db-4d94-a91b-7cf8edd81209"
# Зареєструйте та підтвердіть свій домен:
--header "PageId: 3e7bf353-417a-410c-a22e-df8bdcccb760"
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
--header "PartnerKey: easypay-test"
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
--header "locale: ua"
## У розділі "Identifiers" виберіть "Merchant IDs".
## Виберіть створений вами Merchant ID та натисніть «Edit».
## У розділі "Merchant Domains" натисніть "Add Domain".
## Введіть ім'я домену та натисніть "Continue" *.
## Завантажте файл apple-developer-merchantid-domain-association.txt.
## Збережіть файл на сервері від Apple.
## Натисніть Verify.
<br>
<p style="border: 1px solid #4A90E2; background-color: rgba(74, 144, 226, 0.1); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; color: #333; position: relative;">
    Примітка: <em>* - домен повинен підтримувати HTTPS.</em>
</p>
<br>
# Створіть Apple Pay Merchant Identity Certificate:
## Увійдіть до свого облікового запису [https://developer.apple.com/ Apple Developer Account].
## Перейдіть до розділу «Certificates, Identifiers & Profiles».
## У розділі "Identifiers" виберіть "Merchant IDs".
## Виберіть створений вами Merchant ID та натисніть «Edit».
## У розділі Apple Pay Merchant Identity Certificate натисніть Create Certificate.
## Виконайте дії, описані на сайті Apple, а потім натисніть «Continue».
## Скопіюйте згенерований CSR-файл, вибравши Choose File, а потім Continue.
## Завантажте згенерований сертифікат (merchant_id.cer) і відкрийте його у програмі Keychain Access на комп'ютері Mac.
## У Keychain Access виберіть сертифікат, що імпортується, та експортувати його у формат .p12 (Personal Information Exchange).
## Виконайте команду: openssl pkcs12 -in merchant_id.p12 -out merchant_id.pem -nodes -clcerts
## Скопіюйте створений сертифікат у форматі PEM на сервер. Це буде потрібно для створення [https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/requesting_an_apple_pay_payment_session Apple Pay Payment Session] в процесі [https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/providing_merchant_validation перевірки магазину].


body
<br>
{
==== Технічна інтеграція з ApplePay ====
  "url": "https://apple-pay-gateway.apple.com/paymentservices/startSession",
Для створення сертифікату (-ів) від Партнера потрібні:
  "merchantIdentifier": "string", /ідентифікатор мерчанту в Apple/
  "displayName": "test", /ідентифікатор магазина/послуги/товару (латиниці) ; буде відображатися в toolBar/
  "initiative": "web", /Канал оплати/
  "initiativeContext": "string" /Доменне ім’я, Доменное имя, пов'язане із сертифікатом Apple Identity/
}


# Country Name (2 letter code) [AU]: ?
# State or Province Name (full name) [Some-State]: ?
# Locality Name (eg, city) []: ?
# Organization Name (eg, company) [Internet Widgits Pty Ltd]: ?
# Organizational Unit Name (eg, section) []: ?
# Common Name (e.g. server FQDN or YOUR name) []:?
# Email Address []: ?


</syntaxhighlight><blockquote>*response з цього методу передається в сесію Apple, після чого при успішній авторизації платежу, повернеться до необхідний для завершення платежу.</blockquote>4. Приклад відповіді ApplePay<syntaxhighlight lang="json" line="1">
Повідомте, чи буде оплата тільки в додатку, або також і на WEB.
{
"paymentData":
  {
    "version":"EC_v1",    "data":"FDXK/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ/dGK9UZDP/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp/clv4",    "signature":"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=",
    "header":
    {      "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==",
      "publicKeyHash":"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=",
      "transactionId":"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4"
    }
  },
  "paymentMethod":
  {
    "displayName":"MasterCard 5179",
    "network":"MasterCard",
    "type":"debit"
  },  "transactionIdentifier":"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4"
}


</syntaxhighlight>5. Надішліть <code>paymentData</code> в поле <code>userPaymentInstrument / token</code> в Easypay ([[MerchantAPI#Створення замовлення|Створення замовлення]]). Перед цим потрібно викликати метод EasyPayApi CreateApp.
Щоб інтегрувати Apple Pay на сайт, дотримуйтесь інструкцій за [https://developer.apple.com/documentation/apple_pay_on_the_web. посиланням]  


'''Приклад запиту  createOrder:'''<syntaxhighlight lang="json" line="1">
# Перевірте можливість оплати з Apple Pay. Виконується перевірка, підтримує або браузер оплату з Apple Pay, а також є у Wallet картку, якою можна оплачувати.
{
<syntaxhighlight lang="markdown" line="1">
  "order":{
if (window.ApplePaySession) {
     "serviceKey":"MERCHANT-TEST",
    var promise = ApplePaySession.canMakePaymentsWithActiveCard({YOUR_MERCHANT_ID});
    "orderId":"test_20210309-171148",
     promise.then(function(canMakePayments) {
    "description":"Test payment",
        if (canMakePayments)
     "amount":"1"
     });
  },
} else {
  "userPaymentInstrument":{
    "instrumentType":"ApplePay",
    "token":"{\"paymentData\": {\"version\":\"EC_v1\",  \"data\":\"FDXK\/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8\/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV\/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ\/dGK9UZDP\/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp\/clv4\",  \"signature\":\"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB\/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=\",\"header\":{  \"ephemeralPublicKey\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo\/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==\", \"publicKeyHash\":\"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=\",\"transactionId\":\"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4\"}  },  \"paymentMethod\":  {  \"displayName\":\"MasterCard 5179\",\"network\":\"MasterCard\",\"type\":\"debit\"  },  \"transactionIdentifier\":\"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4\"}",
    "gatewayMerchantId":"{YOUR_MERCHANT_ID}"
  }
}
}


</syntaxhighlight>
</syntaxhighlight>
2. Сформуйте структуру платежу для сесії<syntaxhighlight lang="markdown">
document.getElementById("apple-pay-button").onclick = function(event) {
    var paymentRequest = {
        currencyCode: 'UAH',
        countryCode: 'UA',
        total: {
            label: {PRODUCT_NAME},
            amount: {PAYMENT_AMOUNT}
        },
        merchantCapabilities: ['supports3DS'],
        supportedNetworks: ['masterCard', 'visa']
    };


== Інтеграція з GooglePay ==
var session = new ApplePaySession(3, paymentRequest)
----'''Вимоги'''
# Ваш сайт повинен працювати за схемою HTTPS та підтримувати протокол TLS 1.2.
# Потрібно погодитися з [https://payments.developers.google.com/terms/sellertos умовами надання]  послуг GooglePay.
# Необхідно укласти договір із Easypay.ua.


Google Pay™  - це миттєвий спосіб оплати від Google, який дозволяє просто та швидко сплатити карткою, без необхідності вводити дані для кожного платежу. Ці картки надійно зберігаються в Google. Даний метод доступний для оплати в мобільних програмах на будь-яких пристроях Android і при здійсненні платежу в браузері Chrome.
</syntaxhighlight>
3. Відкрити платіжну сесію з Apple, отримати від них paymentData:
<p style="border: 1px solid #9ACD32; background-color: rgba(144, 238, 144, 0.5); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 80px;">
    <span style="position: absolute; top: 10px; left: 10px; background-color: #006400; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">POST</span>
    <span style="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/applePay/validateSession</span><syntaxhighlight lang="json" line="1">
headers


• '''Документація'''
--header "Content-Type: application/json"
--header "AppId: cd7fde18-15db-4d94-a91b-7cf8edd81209"
--header "PageId: 3e7bf353-417a-410c-a22e-df8bdcccb760"
--header "PartnerKey: easypay-test"
--header "locale: ua"


# [https://developers.google.com/pay/api/android Для додатків]
body
# [https://developers.google.com/pay/api/web Для веб-сайтів]
{
  "url": "https://apple-pay-gateway.apple.com/paymentservices/startSession",
  "merchantIdentifier": "string", /ідентифікатор мерчанту в Apple/
  "displayName": "test", /ідентифікатор магазина/послуги/товару (латиниці) ; буде відображатися в toolBar/
  "initiative": "web", /Канал оплати/
  "initiativeContext": "string" /Доменне ім’я, Доменное имя, пов'язане із сертифікатом Apple Identity/
}


• '''Вимоги щодо брендування'''


# [https://developers.google.com/pay/api/android/guides/brand-guidelines Для додатків]
</syntaxhighlight><blockquote>*response з цього методу передається в сесію Apple, після чого при успішній авторизації платежу, повернеться до необхідний для завершення платежу.</blockquote>4. Приклад відповіді ApplePay<syntaxhighlight lang="json" line="1">
# [https://developers.google.com/pay/api/web/guides/brand-guidelines Для веб-сайтів]
{
 
"paymentData":
=== Оплата з платіжної сторінки Easypay ===
  {
При такому способі підключення немає потреби у додаткових інтеграціях. Кнопка GooglePay відображається на сторінці оплати EasyPay.
    "version":"EC_v1",    "data":"FDXK/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ/dGK9UZDP/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp/clv4",    "signature":"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=",
 
    "header":
=== Отримання токена GooglePay для оплати ===
    {      "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==",
<nowiki>*</nowiki>Використовуйте бойове середовище GooglePay для отримання PaymentData
      "publicKeyHash":"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=",
 
      "transactionId":"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4"
Для отримання PaymentData. Як параметри скрипта вкажіть:
    }
  },
  "paymentMethod":
  {
    "displayName":"MasterCard 5179",
    "network":"MasterCard",
    "type":"debit"
  },  "transactionIdentifier":"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4"
}


# Доступні методи платежу: var '''allowedPaymentMethods''' = ['CARD', 'TOKENIZED_CARD'];
</syntaxhighlight>5. Надішліть <code>paymentData</code> в поле <code>userPaymentInstrument / token</code> в Easypay ([[MerchantAPI#Створення замовлення|Створення замовлення]]). Перед цим потрібно викликати метод EasyPayApi CreateApp.
# Тип токенізації- PAYMENT_GATEWAY: '''tokenizationType''': 'PAYMENT_GATEWAY';
# Параметр '''gateway''': easypay;
# Параметр '''gatewayMerchantId''': Ваш бойовий '''merchantAccount от Google,''' який повідомляє в EasyPay.


Якщо з вашого боку інтеграція виконана правильно, Ви на своєму сайті/додатку отримаєте кнопку
'''Приклад запиту  createOrder:'''<syntaxhighlight lang="json" line="1">
{
  "order":{
    "serviceKey":"MERCHANT-TEST",
    "orderId":"test_20210309-171148",
    "description":"Test payment",
    "amount":"1"
  },
  "userPaymentInstrument":{
    "instrumentType":"ApplePay",
    "token":"{\"paymentData\": {\"version\":\"EC_v1\",  \"data\":\"FDXK\/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8\/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV\/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ\/dGK9UZDP\/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp\/clv4\",  \"signature\":\"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB\/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=\",\"header\":{  \"ephemeralPublicKey\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo\/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==\", \"publicKeyHash\":\"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=\",\"transactionId\":\"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4\"}  },  \"paymentMethod\":  {  \"displayName\":\"MasterCard 5179\",\"network\":\"MasterCard\",\"type\":\"debit\"  },  \"transactionIdentifier\":\"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4\"}",
    "gatewayMerchantId":"{YOUR_MERCHANT_ID}"
  }
}
 
</syntaxhighlight>


'''ВСТАВИТИ КНОПКУ'''
== Інтеграція з GooglePay ==
----'''Вимоги'''
# Ваш сайт повинен працювати за схемою HTTPS та підтримувати протокол TLS 1.2.
# Потрібно погодитися з [https://payments.developers.google.com/terms/sellertos умовами надання]  послуг GooglePay.
# Необхідно укласти договір із Easypay.ua.


Після натискання кнопки на пристрої з підключеним Google Pay з'явиться спливаюче вікно або форма вибору прив'язаної картки.
Google Pay™  - це миттєвий спосіб оплати від Google, який дозволяє просто та швидко сплатити карткою, без необхідності вводити дані для кожного платежу. Ці картки надійно зберігаються в Google. Даний метод доступний для оплати в мобільних програмах на будь-яких пристроях Android і при здійсненні платежу в браузері Chrome.


'''Приклад відповіді від GooglePay Api'''<syntaxhighlight lang="json">
• '''Документація'''
 
# [https://developers.google.com/pay/api/android Для додатків]
# [https://developers.google.com/pay/api/web Для веб-сайтів]
 
• '''Вимоги щодо брендування'''
 
# [https://developers.google.com/pay/api/android/guides/brand-guidelines Для додатків]
# [https://developers.google.com/pay/api/web/guides/brand-guidelines Для веб-сайтів]
 
<br>
=== Оплата з платіжної сторінки Easypay ===
----При такому способі підключення немає потреби у додаткових інтеграціях. Кнопка GooglePay відображається на сторінці оплати EasyPay.
 
=== Отримання токена GooglePay для оплати ===
----<nowiki>*</nowiki>Використовуйте бойове середовище GooglePay для отримання PaymentData
 
Для отримання PaymentData. Як параметри скрипта вкажіть:
 
# Доступні методи платежу: var allowedPaymentMethods = ['CARD', 'TOKENIZED_CARD'];
# Тип токенізації- PAYMENT_GATEWAY: tokenizationType: 'PAYMENT_GATEWAY';
# Параметр gateway: easypay;
# Параметр gatewayMerchantId: Ваш бойовий merchantAccount от Google, який повідомляє в EasyPay.
 
Якщо з вашого боку інтеграція виконана правильно, Ви на своєму сайті/додатку отримаєте кнопку
 
Після натискання кнопки на пристрої з підключеним Google Pay з'явиться спливаюче вікно або форма вибору прив'язаної картки.
 
'''Приклад відповіді від GooglePay Api'''<syntaxhighlight lang="json">
{
{
     "apiVersionMinor":0,
     "apiVersionMinor":0,
Рядок 3155: Рядок 3454:
Надішліть дані з поля token з відповіді від '''GooglePay Api''' у поле '''userPaymentInstrument/token''' у Easypay (розділ [[MerchantAPI#Створення замовлення|Створення замовлення]])
Надішліть дані з поля token з відповіді від '''GooglePay Api''' у поле '''userPaymentInstrument/token''' у Easypay (розділ [[MerchantAPI#Створення замовлення|Створення замовлення]])


Перед цим потрібно викликати метод '''EasyPayApi createApp.'''
Перед цим потрібно викликати метод '''EasyPayApi [[MerchantAPI#Реєстрація точки та створення сесії|createApp.]]'''


'''Приклад запиту'''
'''Приклад запиту'''
Рядок 3177: Рядок 3476:
</syntaxhighlight>
</syntaxhighlight>


== Оплата за QR MasterPass ==
== Створення підпису ==
Для мерчантів, які мають пряму інтеграцію з MasterPass
----Формування підпису Sign (основний варіант для POST – запитів)<syntaxhighlight lang="text">
Sign = base64(sha256(secretKey + requestBody))


QR MasterPass - оплата з гаманця MasterPass із використанням Qr code.
</syntaxhighlight>'''Де:'''
* <code>secretKey</code> – секретний ключ.
* <code>requestBody</code> – тіло запиту у форматі JSON (ідентичне формату EasyPay).
<br>


=== Отримання даних для QR-code ===
=== Приклади коду ===
Потрібно створити сесію ([[MerchantAPI#Створення сесії|Створення сесії]]). Після цього необхідно створити замовлення
----'''C#'''


([[MerchantAPI#Створення замовлення|Створення замовлення]]).
<code>Convert.ToBase64String(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(data)))</code>


У відповіді в '''<code>paymentInstrumentsTypes => instrumentType: "QrMasterpass"</code>''' об'єкт, який містить інформацію для формування QR code. У '''<code>instrumentvalue</code>''' буде рядок, з якого потрібно генерувати QR code.<syntaxhighlight lang="json">
'''PHP'''
{
  "instrumentType":"QrMasterpass",
  "commission":0.0,
  "amountMin":1.00,
  "amountMax":14999.00,
  "userPaymentInstruments":[
  {
    "instrumentId":8499910,
    "instrumentType":"QrMasterpass",     
"instrumentValue":"00020101021252040000530398054034005802UA5909
EasyPayUa6004Kiev64190002UK0109EasyPayUa80850017ua.
mastercard.www010200020840703434032003434180702054456177041211109354874205020181500017
ua.mastercard.www011720191111093548742020499996223030443590603391070410036304AF79",
    "alias":null,
    "commission":0.0,
    "loyaltyCommission":null,
    "actionsKeys":null,
    "priorityIndex":0,
    "additionalParams":{
        "OrderId":"4825209b-1caa-472e-b530-dc3e8efd541c"
    }
  }
  ]
}


</syntaxhighlight>
<code>base64_encode(hash('sha256', ($secretKey.$requestbody), true))</code>


=== Перевірка статусу QR code ===
<br>
Метод повертає інформацію про поточний статус QR code.
== Можливі варіанти інструментів оплати ==
----


<p style="border: 1px solid deepskyblue; background-color: rgba(135, 206, 235, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 70px;">
===== Оплата <span style="         display: inline-block;        padding: 4px 16px;        border: 2px solid #0033A0; /* Темно-синій колір рамки */        background-color: #0033A0; /* Темно-синій фон */        color: white; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */    ">VISA</span> <span style="         display: inline-block;         padding: 8px 20px; /* Збільшене відступи для однакового розміру */        border: 2px solid transparent; /* Прозора рамка для градієнту */        background: linear-gradient(to right, #FF5F00, #FFBF00); /* Градієнт від червоного до оранжевого */        color: white; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */        font-size: 16px; /* Однаковий розмір шрифта */    ">MasterCarD</span> =====
<span style="position: absolute; top: 10px; left: 10px; background-color: deepskyblue; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">GET</span>
<syntaxhighlight lang="json" line="1">
<span style="margin-left: 5px; font-weight: bold; font-size: 16px;">//api/payment/qrPaymentCheck</span>
"paymentInstrumentsTypes": [
</p>'''Request'''<syntaxhighlight lang="json" line="1">
      {
headers
          "storedCards": [],
 
          "instrumentType": "Card",
"PartnerKey": "partnerName"  
          "commission": 2.00,
"locale": "ua"
          "amountMin": 0.01,
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
          "amountMax": 14000.00,
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
          "userPaymentInstruments": [
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
              {
 
                  "instrumentId": 4211698,
queryParams
                  "instrumentType": "Card",
 
                  "instrumentValue": null,
headers
                  "alias": null,
відсутній
                  "commission": 2.00,
 
                  "loyaltyCommission": null,
body
                  "actionsKeys": null,
{
                  "priorityIndex": 200,
  "status": "Generated",
                  "additionalParams": {}
  "transactionId": null,
              }
  "error": null
          ]
}
  ]
      },
      {
          "instrumentType": "RCard",
          "commission": 2.00,
          "amountMin": 0.01,
          "amountMax": 14000.00,
          "userPaymentInstruments": []
      },


</syntaxhighlight>Можливі значення '''"status":'''
</syntaxhighlight>
===== Мобільні гроші  <span style="         display: inline-block;        padding: 8px 20px; /* Збільшене відступи для однакового розміру */        border: 2px solid #00A3E0; /* Темно-синій колір рамки */        background:FFFFE0; /* Темно-синій фон */        color: #00A3E0; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */  font-size: 24px;        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */        font-size: 16px; /* Однаковий розмір шрифта */    ">Київстар</span><span style="        display: inline-block;        padding: 8px 20px; /* Збільшене відступи для однакового розміру */        border: 2px solid #F7E300; /* Темно-синій колір рамки */        background:FFFFE0; /* Темно-синій фон */        color: #0033A0; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */  font-size: 24px;        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */        font-size: 16px; /* Однаковий розмір шрифта */    ">Lifecell</span><span style="         display: inline-block;        padding: 8px 20px; /* Збільшене відступи для однакового розміру */        border: 2px solid #E60012; /* Темно-синій колір рамки */        background:FFFFE0; /* Темно-синій фон */        color: #E60012; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */  font-size: 24px;        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */        font-size: 16px; /* Однаковий розмір шрифта */    ">Vodafone</span> =====


* Generated
<syntaxhighlight lang="json" line="1">
* Scanned
{
* PaymentStarted
          "instrumentType": "KSMoney",
* PaymentFinished
          "commission": 0.0,
* PaymentFinished  
          "amountMin": 0.01,
 
          "amountMax": 14000.00,
'''"transactionId"''' – ідентифікатор платежу в системі EasyPay.
          "userPaymentInstruments": [
 
              {
=== Оплата за QR code ===
                  "instrumentId": 4958975,
Метод для оплати за QR кодом. Працює тільки з QR кодами, які були отримання від EasyPay.
                  "instrumentType": "KSMoney",
<p style="border: 1px solid deepskyblue; background-color: rgba(135, 206, 235, 0.2); padding: 10px; border-radius: 8px; font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; position: relative; padding-left: 70px;">
                  "instrumentValue": null,
<span style="position: absolute; top: 10px; left: 10px; background-color: deepskyblue; color: white; padding: 2px 12px; border-radius: 4px; font-size: 14px; font-weight: bold;">GET</span>
                  "alias": null,
<span style="margin-left: 5px; font-weight: bold; font-size: 16px;">//api/payment/create/qr</span>
                  "commission": 0.0,
</p>
                  "loyaltyCommission": null,
 
                  "actionsKeys": null,
'''Request''' <syntaxhighlight lang="json">
                  "priorityIndex": 1,
headers
                  "additionalParams": {}
 
              }
"PartnerKey": "partnerName"
          ]
"locale": "ua"
      },
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
      {
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
          "instrumentType": "LifeMoney",
          "commission": 0.03,
          "amountMin": 0.01,
          "amountMax": 6000.00,
          "userPaymentInstruments": [
              {
                  "instrumentId": 5098216,
                  "instrumentType": "LifeMoney",
                  "instrumentValue": null,
                  "alias": null,
                  "commission": 0.03,
                  "loyaltyCommission": null,
                  "actionsKeys": null,
                  "priorityIndex": 0,
                  "additionalParams": {}
              }
          ]
 
</syntaxhighlight>


body
===== Картки лояльності <span style="            display: inline-block;            padding: 8px 20px;            border: 2px solid #FF0000; /* Червона рамка */            background-color: #FF0000; /* Червоний фон */            color: white; /* Білий текст*/            font-family: Arial, sans-serif; /* Шрифт Arial */            font-weight: bold; /* Жирний шрифт */            border-radius: 24px; /* Закруглені краї */            text-transform: uppercase; /* Великі літери */            font-size: 16px; /* Розмір шрифта */        ">Fishka</span> =====
{
<syntaxhighlight lang="json" line="1">
  "qrCode": "string",
]
  "amount": 1,
      },
  "userPaymentInstrument": {
      {
"instrumentId": 8499910,
          "instrumentType": "FishkaB2B",
"instrumentType": "QrMasterpass",
          "commission": 2.00,
                "alias": "Mycard",
          "amountMin": 0.01,
                "pan": "4102*******4441"
          "amountMax": 1000.00,
  },
          "userPaymentInstruments": []
  "resultUrl": "string"
      },
}
      {
          "instrumentType": "FishkaB2C",
          "commission": 2.00,
          "amountMin": 0.01,
          "amountMax": 1000.00,
          "userPaymentInstruments": []
      },


</syntaxhighlight>
</syntaxhighlight>
'''Response'''<syntaxhighlight lang="json" line="1">
headers
відсутній


body
===== Оплата <span style="        display: inline-block;        padding: 8px 20px; /* Збільшене відступи для однакового розміру */         border: 2px solid #000000; /* Темно-синій колір рамки */        background:FFFFFF ; /* Темно-синій фон */        color: #000000; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */        font-size: 16px; /* Однаковий розмір шрифта */    ">ApplePay</span> <span style="        display: inline-block;        padding: 8px 20px;        border-style: solid;        border-width: 4px;        border-color: #4285F4 #EA4335 #FABB05 #34A853; /* Чітке розмежування кольорів */        background-color: #FFFFFF; /* Білий фон всередині */        color: #000000; /* Колір тексту */        font-family: Arial, sans-serif;        font-weight: bold;        text-transform: uppercase;        font-size: 16px;        border-radius: 24px; /* Закруглені краї */    ">GPAY</span> =====
{
<syntaxhighlight lang="json" line="1">
  "paymentState": "Confirmed",
{
  "status": "Done",
           "instrumentType": "ApplePay",
  "retrievalReferenceNo": 11111111,
           "commission": 2.00,
  "error": null
           "amountMin": 0.01,
}
           "amountMax": 9999.00,
 
 
</syntaxhighlight>
 
 
Можливі значення “'''paymentState'''”
 
* Rejected  
<br>
 
== Створення підпису ==
Формування підпису Sign (основний варіант для POST – запитів)<syntaxhighlight lang="text">
Sign = base64(sha256(secretKey + requestBody))
 
</syntaxhighlight>'''Де:'''
* <code>secretKey</code> – секретний ключ.
* <code>requestBody</code> – тіло запиту у форматі JSON (ідентичне формату EasyPay).
<br>
 
=== Приклади коду ===
'''C#'''
 
<code>Convert.ToBase64String(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(data)))</code>
 
'''PHP'''
 
<code>base64_encode(hash('sha256', ($secretKey.$requestbody), true))</code>
 
<br>
== Можливі варіанти інструментів оплати ==
 
===== Оплата <span style="        display: inline-block;        padding: 4px 16px;        border: 2px solid #0033A0; /* Темно-синій колір рамки */        background-color: #0033A0; /* Темно-синій фон */        color: white; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */    ">VISA</span> <span style="        display: inline-block;        padding: 8px 20px; /* Збільшене відступи для однакового розміру */         border: 2px solid transparent; /* Прозора рамка для градієнту */        background: linear-gradient(to right, #FF5F00, #FFBF00); /* Градієнт від червоного до оранжевого */        color: white; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */         font-weight: bold; /* Жирний шрифт */        border-radius: 24px; /* Закруглені краї */         text-transform: uppercase; /* Великі літери */         font-size: 16px; /* Однаковий розмір шрифта */    ">MasterCarD</span> =====
<syntaxhighlight lang="json" line="1">
"paymentInstrumentsTypes": [
      {
          "storedCards": [],
           "instrumentType": "Card",
           "commission": 2.00,
           "amountMin": 0.01,
           "amountMax": 14000.00,
           "userPaymentInstruments": [
           "userPaymentInstruments": [
               {
               {
                   "instrumentId": 4211698,
                   "instrumentId": 10958126,
                   "instrumentType": "Card",
                   "instrumentType": "ApplePay",
                   "instrumentValue": null,
                   "instrumentValue": null,
                   "alias": null,
                   "alias": null,
Рядок 3341: Рядок 3611:
                   "loyaltyCommission": null,
                   "loyaltyCommission": null,
                   "actionsKeys": null,
                   "actionsKeys": null,
                   "priorityIndex": 200,
                   "priorityIndex": 0,
                   "additionalParams": {}
                   "additionalParams": {}
               }
               }
           ]
           ]
  ]
       },
       },
       {
       {
           "instrumentType": "RCard",
           "instrumentType": "GooglePay",
           "commission": 2.00,
           "commission": 2.00,
           "amountMin": 0.01,
           "amountMin": 0.01,
           "amountMax": 14000.00,
           "amountMax": 9999.00,
          "userPaymentInstruments": []
      },
 
</syntaxhighlight>
===== Мобільні гроші  <span style="        display: inline-block;        padding: 8px 20px; /* Збільшене відступи для однакового розміру */        border: 2px solid #00A3E0; /* Темно-синій колір рамки */        background:FFFFE0; /* Темно-синій фон */        color: #00A3E0; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */  font-size: 24px;        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */        font-size: 16px; /* Однаковий розмір шрифта */    ">Київстар</span><span style="        display: inline-block;        padding: 8px 20px; /* Збільшене відступи для однакового розміру */        border: 2px solid #F7E300; /* Темно-синій колір рамки */        background:FFFFE0; /* Темно-синій фон */        color: #0033A0; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */  font-size: 24px;        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */        font-size: 16px; /* Однаковий розмір шрифта */    ">Lifecell</span><span style="        display: inline-block;        padding: 8px 20px; /* Збільшене відступи для однакового розміру */        border: 2px solid #E60012; /* Темно-синій колір рамки */        background:FFFFE0; /* Темно-синій фон */        color: #E60012; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */  font-size: 24px;        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */        font-size: 16px; /* Однаковий розмір шрифта */    ">Vodafone</span> =====
 
<syntaxhighlight lang="json" line="1">
{
          "instrumentType": "KSMoney",
          "commission": 0.0,
          "amountMin": 0.01,
          "amountMax": 14000.00,
           "userPaymentInstruments": [
           "userPaymentInstruments": [
               {
               {
                   "instrumentId": 4958975,
                   "instrumentId": 10958137,
                   "instrumentType": "KSMoney",
                   "instrumentType": "GooglePay",
                   "instrumentValue": null,
                   "instrumentValue": null,
                   "alias": null,
                   "alias": null,
                   "commission": 0.0,
                   "commission": 2.00,
                   "loyaltyCommission": null,
                   "loyaltyCommission": null,
                   "actionsKeys": null,
                   "actionsKeys": null,
                   "priorityIndex": 1,
                   "priorityIndex": 0,
                   "additionalParams": {}
                   "additionalParams":  
              }
                    {
          ]
                      "PublicKey": "BKdzipvJvJzcbTMm3dO0LEh1AXFr8qfSiPjwrI7vv9F6hqhDJB1M="
      },
                    }
      {
          "instrumentType": "LifeMoney",
          "commission": 0.03,
          "amountMin": 0.01,
          "amountMax": 6000.00,
          "userPaymentInstruments": [
              {
                  "instrumentId": 5098216,
                  "instrumentType": "LifeMoney",
                  "instrumentValue": null,
                  "alias": null,
                  "commission": 0.03,
                  "loyaltyCommission": null,
                  "actionsKeys": null,
                  "priorityIndex": 0,
                  "additionalParams": {}
               }
               }
           ]
           ]
      }
  ]


</syntaxhighlight>
</syntaxhighlight>


===== Картки лояльності <span style="            display: inline-block;            padding: 8px 20px;            border: 2px solid #FF0000; /* Червона рамка */            background-color: #FF0000; /* Червоний фон */            color: white; /* Білий текст*/            font-family: Arial, sans-serif; /* Шрифт Arial */            font-weight: bold; /* Жирний шрифт */             border-radius: 24px; /* Закруглені краї */            text-transform: uppercase; /* Великі літери */            font-size: 16px; /* Розмір шрифта */        ">Fishka</span> =====
=== Управління інструментами оплати ===
----Управління інструментами оплати на сторінці оплати EasyPay здійснюється при створенні замовлення. Параметр <code>allowedInstruments</code> визначає, які інструменти оплати будуть відображатися на сторінці платіжного шлюзу.
<br>
<syntaxhighlight lang="json" line="1">
<syntaxhighlight lang="json" line="1">
  ]
  "userInfo": {  
      },
      "phone": "string"
      {
  },
          "instrumentType": "FishkaB2B",
          "commission": 2.00,
          "amountMin": 0.01,
          "amountMax": 1000.00,
          "userPaymentInstruments": []
      },
      {
          "instrumentType": "FishkaB2C",
          "commission": 2.00,
          "amountMin": 0.01,
          "amountMax": 1000.00,
          "userPaymentInstruments": []
      },


</syntaxhighlight>
Обов'язкові параметри:
    "order": {
      "serviceKey": "string",
      "orderId": "string",
      "description": "string",
      "amount":1.01, (decimal)
"allowedInstruments": [ "string" ]
</syntaxhighlight>'''Опис параметрів''' <table style="border-collapse: collapse; width: 100%; font-family: Roboto, sans-serif; font-weight: 100; font-size: 0.8em; color: #333;">
    <tr>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Параметр</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Характеристика</th>
      <th style="border: none; border-bottom: 1px solid #d3d3d3; text-align: center; padding: 8px;">Коментарій</th>
    </tr><tr>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>allowedInstruments</code>'''</td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">параметр в якому передаються інструменти оплати, які будуть відображені на сторінці </td>
      <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">Можливі значення:


===== Оплата  <span style="        display: inline-block;        padding: 8px 20px; /* Збільшене відступи для однакового розміру */        border: 2px solid #000000; /* Темно-синій колір рамки */        background:FFFFFF ; /* Темно-синій фон */        color: #000000; /* Білий текст */        font-family: Arial, sans-serif; /* Шрифт */        font-weight: bold; /* Жирний шрифт */        border-radius: 24px; /* Закруглені краї */        text-transform: uppercase; /* Великі літери */        font-size: 16px; /* Однаковий розмір шрифта */    ">ApplePay</span> <span style="        display: inline-block;        padding: 8px 20px;        border-style: solid;        border-width: 4px;        border-color: #4285F4 #EA4335 #FABB05 #34A853; /* Чітке розмежування кольорів */        background-color: #FFFFFF; /* Білий фон всередині */        color: #000000; /* Колір тексту */        font-family: Arial, sans-serif;        font-weight: bold;        text-transform: uppercase;        font-size: 16px;        border-radius: 24px; /* Закруглені краї */     ">GPAY</span> =====
* RCard
<syntaxhighlight lang="json" line="1">
* Card
{
* EBank
          "instrumentType": "ApplePay",
* FishkaB2C
          "commission": 2.00,
* ApplePay
          "amountMin": 0.01,
* GooglePay</td>
          "amountMax": 9999.00,
    </tr></table>
          "userPaymentInstruments": [
'''<br>
              {
Поведінка системи'''
                  "instrumentId": 10958126,
# '''Якщо параметр''' <code>allowedInstruments</code> '''не передано або він порожній''': На сторінці оплати будуть відображені всі доступні інструменти, які підключені для партнера.
                  "instrumentType": "ApplePay",
# '''Якщо з переданих інструментів немає доступних для оплати''': Повертається помилка: <code>PAYMENTINSTRUMENT_NOT_FOUND</code>
                  "instrumentValue": null,
# '''Приклад помилки''': У разі, якщо у партнера активні ApplePay і Card, а в запиті передається GooglePay, повертається помилка <code>PAYMENTINSTRUMENT_NOT_FOUND</code>.
                  "alias": null,
# '''Якщо передані доступні інструменти оплати''': У разі, якщо партнер передає, наприклад, GooglePay та Card, але GooglePay не активний для цього партнера, система поверне посилання з активним інструментом Card.
                  "commission": 2.00,
<br>
                  "loyaltyCommission": null,
                  "actionsKeys": null,
                  "priorityIndex": 0,
                  "additionalParams": {}
              }
          ]
      },
      {
          "instrumentType": "GooglePay",
          "commission": 2.00,
          "amountMin": 0.01,
          "amountMax": 9999.00,
          "userPaymentInstruments": [
              {
                  "instrumentId": 10958137,
                  "instrumentType": "GooglePay",
                  "instrumentValue": null,
                  "alias": null,
                  "commission": 2.00,
                  "loyaltyCommission": null,
                  "actionsKeys": null,
                  "priorityIndex": 0,
                  "additionalParams":
                    {
                      "PublicKey": "BKdzipvJvJzcbTMm3dO0LEh1AXFr8qfSiPjwrI7vv9F6hqhDJB1M="
                    }
              }
          ]
      }
  ]
 
</syntaxhighlight>


== Технічна підтримка ==
== Технічна підтримка ==
За потреби консультацій з питань реалізації API можна написати запит на ''[email protected]''
----За потреби консультацій з питань реалізації API можна написати запит на ''[email protected]''

Поточна версія на 15:34, 12 серпня 2025

Загальні відомості


Протокол призначено для торговців, які є одержувачами платежів. Продавець підписує договір про прийняття платежів або анкету-акцепт до публічної оферти.

Щоб отримати платежі, ви можете використовувати web, мобільні версії сайтів, а також мобільні програми. У разі використання цього протоколу не здійснюється перевірка даних для ідентифікації замовлення або облікового запису. EasyPay завжди приймає дані, надіслані та створені продавцем.

Заголовки запитів


Для надсилання запиту та отримання відповіді у форматі JSON, необхідно передати такі обов’язкові заголовки у запиті.

--header 'Content-Type: application/json'

--header 'AppId: cd7fde18-15db-4d94-a91b-7cf8edd81209'

--header 'PageId: 3e7bf353-417a-410c-a22e-df8bdcccb760'

--header 'PartnerKey: easypay-test'

--header 'locale: ua'

--header 'Sign: bS+vPOwu1Sif1Iz47Cdh+z1RAi0s6X21C3uU0YNBNWE='

URL


Посилання Характеристика Коментарій
https://merchantapi.easypay.ua Production в т.ч. для надсилання тестових запитів


Налаштування безпеки


Партнер надає IP, з яких будуть здійснюватися запити.



Реєстрація партнера в системі EasyPay


Реєстрація нового торговця передбачає отримання унікального ідентифікатора PartnerKey.

Характеристика параметрів реєстрації
Параметр Характеристика Коментарій
PartnerKey унікальний ідентифікатор партнера (продавця) у системі EasyPay. передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.
ServiceKey ідентифікатор сервісу торговця у системі EasyPay. магазину чи послуги

передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.

SecretKey секретний ключ для формування підпису відомий лише торговцю та EasyPay

передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.

AppId ідентифікатор торгової точки партнера параметр валідний протягом 90 днів. Один і той же AppID може використовуватись для декількох платежів)
PageId ідентифікатор сесії параметр валідний протягом 20 хв. Для кожного запиту CreateOrder потрібно використовувати унікальний PageID


Тестові параметри


Для тестових запитів використовуються такі параметри:
PartnerKey = easypay-test
ServiceKey = MERCHANT-TEST
SecretKey = test

На даний момент відсутня можливість тестування з використанням фейкових оплат / тестових карток. Платежі тільки реальні, їх можна відмінити в день оплати методом cancelOrder (Скасування платежу)

Тестове середовище

Перед початком використання тестового середовища необхідно надати ір з яких будуть надходити запити, для відкриття доступу. На тестовому середовищі використовуються методи аналогічні Merchant Api.

Тестові дані:

  • PartnerKey:credit-test
  • SecretKey: credit-test
  • serviceKey:TEST-CREDIT-PAYMENT - погашення
  • serviceKey:TEST-CREDIT-PAYMENT - погашення
  • serviceKey:TEST-CREDIT-TO-CARD - виплата
  • Надсилання колбеків з Iр: 195.230.131.50


Тестові картки для верифікації/виплат:

Код підтвердження для 2дс при верифікації картки: 123456

Pan Card.Expire/CVV Статус виплати
5167803258208169 0525/111 Успішна виплата
4235751329985326 0525/111 Неуспішна виплата
4111111111111111 0525/111 Неуспішна без створення транзакції
4999999999990011 0525/111 Успішна виплата з затримкою статусу 5 хв
4217198608967728 0525/111 Неуспішна виплата з затримкою статусу 5 хв


Тестові картки для оплати:
Pan Card.Expire/CVV Статус виплати
5168752081922117 0128/111 Успішна оплата з 3ДС/ або не успішна оплата з 3ДС
4909150002132451 0129/111 Успішна 2ДС оплата
4300380058021820 0130/111 Не успішна з 3ДС + помилка PAYMENT_ALFABANK_116
55672173492206690130/111Успішна оплата з 3ДС/ або не успішна оплата з 3ДС


У разі отримання помилки APPID_NOT_FOUND у відповідь на будь-який метод, необхідно повторити запит createApp до отримання точки ІД.


Основні запити/відповіді



Реєстрація точки та створення сесії

Цей метод слід викликати, коли користувач вперше звертається до платіжної сторінки. Якщо браузер або пристрій змінюються, метод знову з'являється

POST /api/system/createApp

Request
headers:

"PartnerKey": "partnerName",
"locale": "ua"
Response
body: 

{
  "logoPath": "https://cdn.easypay.ua/logo/",
  "hintImagesPath": "https://cdn.easypay.ua/hint_images/",
  "apiVersion": "1.0",
  "appId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1",
  "pageId": "f3f2b678-a3c4-45ba-a865-a136fe4a62bd",
  "error": null
}
Характеристика параметрівПараметри
Параметр Характеристика Коментарій
AppId ідентифікатор торгової точки партнера за замовчуванням, якщо не було активності за запитами,

час життя AppId - 3 місяці. З кожним запитом життя AppId автоматично продовжується.

PageId ідентифікатор сесії параметр валідний протягом 20 хв. Для кожного запиту CreateOrder потрібно використовувати унікальний PageID


Створення сесії


Даний метод створює новий екземпляр сеансу для користувача , PageId.

POST /api/system/createPage

Request
headers

"PartnerKey":  "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
Response
body:

{
    "logoPath": "https://cdn.easypay.ua/logo/",
    "hintImagesPath": null,
    "apiVersion": "1.0",
    "appId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1",
    "pageId": "29bd7237-6b8d-4048-b028-6efc23d05988",
    "requestedSessionId": "fa3595d3-52de-4744-9fc6-ec2d3507d5a5",
    "error": null
}
Характеристика параметрів
Параметр Характеристика Коментарій
AppId ідентифікатор торгової точки партнера за замовчуванням, якщо не було активності за запитами,

час життя AppId - 3 місяці. З кожним запитом життя AppId автоматично продовжується.

PageId ідентифікатор сесії За замовчуванням, якщо не було активності за запитами, час життя PageId - 20 хвилин. З кожним запитом життя PageId автоматично продовжується.


Створення замовлення


Перед викликом цього методу потрібно викликати один із методів:


⚠️ Важливо! Для кожного нового запиту CreateOrder потрібно використовувати унікальний PageID.

POST /api/merchant/createOrder

headers

'Content-Type': 'application/json'
'PartnerKey': 'partnerName'
'locale': 'ua'
'AppId': 'a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId': '2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'Sign': 'e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='

<br>
{
   "userInfo": {
       "phone": "string"
    },
Обов'язкові параметри:

     "order": {
       "serviceKey": "string",
       "orderId": "string",
       "description": "string",
       "amount":1.01, (decimal)

Необов'язкові параметри:
       "paymentOperation":"PaymentTokenization",
       "additionalItems": {},
       "expire": "2019-04-15T07:49:20",
       "isOneTimePay": true,
       "fields": [
          {
           "fieldName": "string",
           "fieldValue": "string",
           "fieldKey": "string",
          }
        ]
     },
  "urls": {
    "success": "string",
    "failed": "string",
    "back": "string",
  },
  "bankingDetailsId": "string",
 "bankingDetails": {
    "payee": {
      "id": "string",
      "name": "string",
      "bank": {
        "name": "string",
        "mfo": "string",
        "account": "string"
      }
    },
    "payer": {
      "name": "string",
      "id": "string"
    },
    "narrative": {
      "name": "string"
    }
  },

  "reccurent": {
    "cronRule": "string",
    "dateExpire": "2019-01-21T08:24:38.741Z",
    "dateRun": "2019-01-20T08:24:38.741Z",
    "properties":
       {
         "failedCount":0,
         "failedRule":"string",
         "amount":1.0,
         "UrlNotify":"http://notify.url"
       }
  },
 "splitting": {
    "items": [
      {
     "serviceKey": "string",
     "orderId": "string”  
     "bankingDetailsId": "string",
     "bankingDetails": {
                      "payee": {
                                     "id": "string",
                                     "name": "string",
                                      "bank": {
                                                    "name": "string",
                                                     "mfo": "string",
                                                     "account": "string"
                                                  }
                                     },
                       "payer": {
                                      "name": "string"
                                     },
                       "narrative": {
                                      "name": "string"
                                     }
                                   },
        "unit": "Amount|Percent",
        "value": 0,
        "withCommission": false|true
      }
    ]
  },
  "userPaymentInstrument": {
      "instrumentType": "Card",
      "cardGuid": "guid",
     "pan": "string",
      "expire": "MM/YY",
      "cvv": "string",
  },
 "partnerInfo": {
      "id": "string",
      "name": "string",
      "account": "string"
}
}
Опис параметрів
Параметр Характеристика Коментарій
serviceKey ідентифікатор послуги мерчанта (видає EasyPay) передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.
orderId унікальний ідентифікатор номера замовлення у системі партнера магазину чи послуги

передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.

description опис замовлення (до 120 символів) відомий лише торговцю та EasyPay

передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.

amount сума замовлення, роздільник - точка параметр валідний протягом 90 днів. Один і той же AppID може використовуватись для декількох платежів)
paymentOperation тип платіжного процесу Можливі значення:
  • PaymentTokenization - використовується для токенізації картки, якою буде сплачено це замовлення.
  • Працює лише для інструмента “карта”. Повинен бути заповнений ідентифікатор клієнта "userInfo": { "phone": "string"}
  • Якщо передано URL для колбеку, то після успішної оплати відправляється колбек про платіж та колбек про токенізацію (приклади колбеків про оплату - в Повідомлення про платіж, про токенізацію.
userInfo/phone номер телефону (або ідентифікатор) клієнта Номер телефону необхідний:
  • для отримання списку токенізованих карток (інформація буде в масиві StoredCards)
  • при оплаті із зазначенням токена картки
  • для токенізації картки після успішної оплати разом із параметром
expire час життя замовлення Після закінчення заданого часу замовлення сплатити неможливо. Час життя сторінки може відображатися на платіжній сторінці у вигляді таймера (за замовчуванням таймер вимкнено). Значення має бути більшим за поточний час на 6 хвилин. Значення за замовчуванням - 3 дні
sOneTimePay включає можливість успішно оплатити замовлення лише 1 раз за конкретним forwardUrl Значення:
  • True - за замовчуванням;
  • False - оплатити замовлення по тому самому forwardUrl можна буде кілька разів;
urls
  • back - URL для повернення на вказану сторінку з фінальної сторінки успіху EasyPay.
  • success - URL сторінки успіху, для редиректу клієнта у разі успішної оплати.
  • failed - URL сторінки помилки для редиректу клієнта у разі неуспішної оплати
  • back - На фінальній сторінці EasyPay вгорі зліва з'явиться кнопка “Повернутись назад” з посиланням на вказану URL-адресу. Параметр не може бути порожнім і повинен відповідати формату URL.
  • success - у разі, якщо не було передано urls{success,failed} для редиректу після оплати. Після оплати клієнт може не дочекатися редиректу на цей url, тому редирект не можна використовувати як індикатор успішної оплати, отримання оповіщення про успішний платіж - див. Повідомлення про платіж
  • faild - приклад get-параметрів, які приходять на url.failed та url.succes (те ж, але без errorCode):

?serviceKey=merchanttest-5310&orderId=re9r9er94jr&amount=1.20&description=

Тестове+описання+замовлення&transactionId=722443797&date=2019-06-11T14:49:07&recurrentId=&errorCode=PAYMENT_ALFABANK_-2006&sign=

eYkFYixpB3wnKoZDzkAiqWgdMkeHETDWmDsFMCaPO44=


Необов'язкові додаткові поля

additionalItems необов'язкові додаткові параметри, наприклад:

"additionalItems":{
  "PayerEmail":"[email protected]",
  "PayerPhone":"380930007603",
  "Merchant.UrlNotify":"https://notify.url",
  "Merchant.Param1":"CustomValue",
  "CurrencyAmountLabel":"123.56$"
},
Опис параметрів
Параметр Характеристика Коментарій
PayerEmail емейл клієнта для оповіщення його у разі неоплаченого замовлення та для автоматичного заповнення поля “Надіслати квитанцію на email” на сторінці оплати. Якщо параметр передається – він не може бути порожнім і має відповідати формату email.
PayerPhone телефон клієнта, на який протягом 15-20 хв після виклику CreateOrder відправиться нагадування про неоплачене замовлення (смс або вайбер). Якщо параметр передається, він не може бути порожнім і повинен відповідати формату телефону.
Merchant.UrlNotify URL для надсилання нотифікації за успішним платежем (callback), див. Повідомлення про платіж. Параметр не може бути порожнім і має відповідати формату URL.
Merchant.Param1 індивідуальний параметр партнера Param1 узгоджується з EasyPay


reccurentPayment - інформація для створення рекурентного платежу на основі поточного. Рекурентний платіж буде створений за розкладом, якщо основний платіж виконаний за допомогою інструментів card, Rcard, Vcard, LifeMoney


"reccurent": {
    "cronRule": "string",
    "dateExpire": "2019-01-21T08:24:38.741Z",
    "dateRun": "2019-01-20T08:24:38.741Z",
    "properties":
       {
         "failedCount":0,
         "failedRule":"string",
         "amount":1.0,
         "UrlNotify":"http://notify.url"
       }
Опис параметрів
Параметр Характеристика Коментарій
cronRule правило у cron-форматі, з якою періодичністю повторювати рекурентний платіж, наприклад 10 20 15 * * (кожного 15 числа місяця о 20:10). Якщо ця властивість порожня, значить рекурентний платіж виконуватиметься на вимогу продавця. Плануйте перше виконання рекуренту щонайменше 20 хвилин від дати успішного платежу.
dateExpire дата, після якої не проводити рекурентний платіж. магазину чи послуги

передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.

dateRun дата першого запуску рекурентного платежу (опціонально). Якщо не заданий, перший запуск розраховується за recurrent/cronRule
properties додаткові параметри (опціонально)
  • reccurent/properties/amount - сума кожного рекурентного платежу, наступного після основної оплати (опціонально)
  • reccurent/properties/failedCount - ккількість поспіль неуспішних викликів рекурентних оплат, після чого рекурентний платіж видаляється (опціонально). За замовчуванням - 4 спроби: при неуспіху - повторюється спроба кожні 20-30 хвилин, 4 неуспішних спроби поспіль по одному recurrentId - і рекурент відключається. Якщо після 3 неуспішних спроб була 1 успішна, то лічильник неуспішних для цього рекурента скидається.
  • reccurent/properties/failedRule - cron-правило (період) повтору при неуспішному виклику рекурента (опціонально)
  • reccurent/properties/UrlNotify - URL для надсилання нотифікації за успішним рекурентним платежем (callback), див. Повідомлення про платіж


bankingDetails - передача банківських реквізитів для перерахування коштів у випадку, якщо банківські реквізити можуть змінюватися щодо різних платежів одного сервісу продавця. На стороні EasyPay має бути увімкнено режим "Отримувати реквізити із запиту".

{
  "bankingDetails": {
    "payee": {
      "id": "123664578",
      "name": "департамент патрульної поліції",
      "bank": {
        "name": "пат пумб",
        "mfo": "330556",
        "account": "123654778889"
      }
    },
    "payer": { "name": "Иванова Мария" },
    "narrative": { "name": "Переказ коштів згідно договору з ФК № 111/11-П від 11.11.1111 р. за виключенням винагороди за їх переказ згідно реєстру від [work_date]р." }
  }
}
Опис параметрів
Параметр Характеристика Коментарій
payee/ID код одержувача ЄДРПОУ або ІПН
payee/Name одержувач до 38 символів
Payee/Bank/Name банк отримувача до 38 символів
Payee/Bank/Mfo МФО банку може не заповнюватися, якщо Payee/Bank/Account містить IBAN
Payee/Bank/Account р/р одержувача або IBAN
Payer/Name платник
Narrative/Name призначення платежу до 157 символів
bankingDetailsId повну структуру bankingDetails можна не передавати, для цього достатньо передати
bankingDetailsId


ідентифікатор банківських реквізитів із довідника, який узгоджений із конкретним партнером та перебуває в системі EasyPay.



Splitting - інформація щодо сплітування (розщеплення) платежу.

Частина загальної суми з order/amount розподіляється відповідно до інформації в splitting/items/value, а залишок - йде на основні реквізити з bankingDetails (або bankingDetailsId). На стороні EasyPay має бути увімкнено режим “Отримувати реквізити із запиту

Структура items це масив. Основний платіж буде розщеплений стільки платежів, скільки міститься у цьому масиві плюс залишок. Кожен розщеплений платіж буде надіслано на відповідні банківські реквізити items/bankingDetails. Залишок коштів буде надіслано на реквізити основного платежу з BankingDetails або bankingDetailsId, які потрібно обов'язково вказувати під час сплітування.

  },
 "splitting": {
    "items": [
      {
     "serviceKey": "string",
     "orderId": "string" 
     "bankingDetailsId": "string",
     "bankingDetails": {
                      "payee": {
                                     "id": "string",
                                     "name": "string",
                                      "bank": {
                                                    "name": "string",
                                                     "mfo": "string",
                                                     "account": "string"
                                                  }
                                     },
                       "payer": {
                                      "name": "string"
                                     },
                       "narrative": {
                                      "name": "string"
                                     }
                                   },
        "unit": "Amount|Percent",
        "value": 0,
        "withCommission": false|true
Параметр Характеристика Коментарій
items/serviceKey необов'язковий параметр. Ідентифікатор послуги, за якою ініціюється зарахування спліту (частини) платежу. Якщо параметр відсутній, використовується значення ServiceKey з тіла запиту CreateOrder.
items/orderId необов'язковий параметр. Ідентифікатор внутрішнього замовлення Мерчант для маркування конкретного спліту (частини) платежу. Якщо параметр відсутній, використовується значення OrderId, передане в тілі запиту CreateOrder.
items/bankingDetails банківські реквізити кожного розщепленого платежу.
items/unit може бути Amount (сума розщепленого платежу в грн.) або Percent (сума розщепленого платежу вважається відсотком від загального).
items/value значення у цифрах.
items/withCommission - true/false Вказує з якого з одержувачів слід утримати внутрішню комісію. Сума комісії розраховується із загальної суми платежу, а утримується - з першого одержувача зі splitting, у якого withCommission=true. Якщо ні в кого з splitting не зазначено withCommission=true, то комісія втікає з “основного” одержувача, вказаного в bankingDetails.

Якщо у всіх значення withCommission=false (або не передали), то комісія утримається з "основного одержувача", вказаного в параметрі bankingDetails

Якщо всі значення withCommission=true, то комісія утримається з першого одержувача, зазначеного в splitting. Залишок буде надіслано на реквізити основного платежу з bankingDetails або bankingDetailsId.

При встановленому сервісом Типі розрахунків “За актами", одержувачам перераховується повна сума, без відрахування комісії, незалежно від значення WithComission.


Після виконання сплітування під кожен спліт (частини) платежу на стороні EasyPay створюється фінансова   транзакція з унікальним transactionID.

  • Якщо списання грошей з картки пройшло успішно і всі реквізити для спліту вказані корректно (доступні) - всі транзакції набувають успішного статусу і по кожній транзакції відправляється колбек.
  • Якщо списання грошей з картки пройшло неуспішно – запит відхиляється з кодом фінансової помилки;
  • Якщо списання грошей з картки пройшло успішно, але хоча б один із реквізитів зазначено неправильно – всі транзакції спліту (частини) платежу – будуть відхилені.


Після проведення успішного списання та сплітування по кожній фінансовій транзакції в рамках спліту направляється колбек (нотифікація) про успішний платіж. Приклад коллбека (нотифікації) вказаний у повідомлення про платіж.

Якщо параметр userPaymentInstrument не є порожнім, створення платежу буде відбуватися автоматично.


Для різних інструментів передаються такі параметри:

userPaymentInstrument – інструмент оплати.

*Картка (PCI DSS)
 "userPaymentInstrument": {
      "instrumentType": "Card",
      "pan": "5168123456780123",
      "expire": "MM/YY",
      "cvv": "string" }
*Токенізована Карта
{"userInfo":{"phone":"380935207603"}, /Phone,під яким токенізована карта/

"userPaymentInstrument": {
      "instrumentType": "Card",
      "cardGuid": "guid", /токен картки/
 }
}
Kyivstar Money/Life Money /VodafoneMoney
"userPaymentInstrument": {
      "instrumentType": "KSMoney / LifeMoney / VodafoneMoney",
      "phone": "380xxYYYYYYY" }
ApplePay/GooglePay
"userPaymentInstrument": {
      "instrumentType": "ApplePay / GooglePay",
      "token": “string”/Токен, отриманий від Apple | Google /
 }
  • partnerInfo – інформація про партнера
  • partnerInfo.name – найменування партнера
  • partnerInfo.id – ВД (ЄДРПОУ) партнера
  • partnerInfo.account – рахунок партнера (особовий рахунок/IBAN…)


Створення замовлення для холдованих платежів

Перед використанням методу потрібне додаткове налаштування терміналів зі сторони техпідтримкиEasyPay.

Перед викликом цього методу потрібно викликати один із методів:

- CreateApp

- CreatePage

POST /api/merchant/createOrder

REQUEST HEADERS
  PartnerKey: partnerName
  locale: ua
  AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1
  PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d
  Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4=
REQUEST BODY
{
  "order": {
    "serviceKey": "string",
    "orderId": "string",
    "description": "string",
    "amount": 1.01,
    "paymentOperation": "Hold",
    "expire": "2019-04-15T07:49:20.009Z",
    "isOneTimePay": true,
    "additionalItems": {}
  },
  "urls": {
    "success": "string",
    "failed": "string"
  }
}
Опис параметрів
Параметр Характеристика
serviceKey ідентифікатор послуги
orderId унікальний ідентифікатор замовлення в системі партнера
description опис замовлення
amount сума замовлення
paymentOperation = Hold параметр, що вказує, що подальший платіж буде холдовано(зарезервовано) з можливістю підтвердження або скасування.


Необов'язкові параметри

Параметр Характеристика Коментарій
expire час життя замовлення. Після закінчення вказаного часу замовлення оплатити неможливо. При ненульовому значенні на платіжній сторінці відображатиметься таймер. Значення повинне перевищувати поточний час щонайменше на 5 хвилин. Типове значення — 3 дні.
isOneTimePay вказує, чи можна оплатити одне замовлення кілька разів. Типове значення — True.
additionalItems додаткові параметри наприклад:

"additionalItems": { "PayerEmail" : "[email protected]", "PayerPhone" : "380930007603" },

  • де PayerEmail — емейл клієнта для сповіщення у разі неоплаченого замовлення та автоматичної підстановки на платіжній сторінці.
  • PayerPhone — номер телефону для надсилання повідомлення (SMS або Viber) про неоплачене замовлення (через 15–20 хвилин після виклику CreateOrder).
URLs URL сторінки успішної оплати для редиректу клієнта. failed — URL сторінки помилки для редиректу клієнта.

приклад параметрів, що передаються на url.success (без errorCode) і

url.failed: ?serviceKey=merchanttest-5310&orderId=re9r9er94jr&amount=1.20&description=Тестове+описання+

замовлення&transactionId=722443797&date=2019-06-11T14:49:07&recurrentId=&errorCode=PAYMENT_ALFABANK_-2006&sign=

eYkFYixpB3wnKoZDzkAiqWgdMkeHETDWmDsFMCaPO44=


RESPONSE
HEADERS 
-------
BODY
{
  "accountInfo": null,
  "bankingDetails": null,
  "amount": 1,
  "amountMax": 4999,
  "amountMin": 0.01,
  "paymentInstrumentsTypes": [
    {
      "instrumentType": "EMoney",
      "commission": 0,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": []
    },
    {
      "instrumentType": "RCard",
      "commission": 2,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": []
    },
    {
      "storedCards": [],
      "instrumentType": "Card",
      "commission": 2,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": [
        {
          "instrumentId": 4211698,
          "instrumentType": "Card",
          "instrumentValue": null,
          "alias": null,
          "commission": 2,
          "loyaltyCommission": null,
          "actionsKeys": null,
          "priorityIndex": 0,
          "additionalParams": {}
        }
      ]
    },
    {
      "walletStatus": "NotRegistered",
      "instrumentType": "MasterPass",
      "commission": 2,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": []
    },
    {
      "instrumentType": "LifeMoney",
      "commission": 0.03,
      "amountMin": 0.01,
      "amountMax": 4999,
      "userPaymentInstruments": [
        {
          "instrumentId": 5098216,
          "instrumentType": "LifeMoney",
          "instrumentValue": null,
          "alias": null,
          "commission": 0.03,
          "loyaltyCommission": null,
          "actionsKeys": null,
          "priorityIndex": 0,
          "additionalParams": {}
        }
      ]
    }
  ],
  "forwardUrl": "https://easypay.ua/whitepage/81b14a73-730c-40d4-8064-ce1c10e0c53b",
  "error": null
}


Параметр Характеристика Коментарій
accountInfo додаткова інформація про послугу
amount сума замовлення
amountMax максимальна сума платежу за послугою
amountMin мінімальна сума за послугою
forwardUrl URL сторінки оплати, для партнерів, у яких немає сертифікатів PCI DSS для обробки карткових даних. Або якщо у партнера немає власної платіжної сторінки.
paymentInstrumentsTypes список інструментів оплати. Інструмент RCard надається лише користувачам, які авторизовані в системі EasyPay. Можливі значення instrumentType

Можливі значення instrumentType:

  • Card – платіжна картка
  • RCard – платіжна картка, підв'язана в системі EasyPay


Холдування платежу можна здійснити, оплативши замовлення на сторінці оплати (перейти за forwardUrl), або вказавши в запиті createOrder інструмент оплати у userPaymentInstrument (див. Створення замовлення).

Клієнту відобразиться сторінка успішного платежу EasyPay, або сторінка, вказана в “urls”:{}.


Після спроби холдування платежу партнеру буде відправлено сповіщення, згідно з варіантом, вказаним в налаштуваннях сервісу Повідомлення про платіж.


Статус платежу необхідно перевірити методом orderState


Після успішного холдування необхідно викликати або unHoldOrder , або orderCancel

Якщо протягом повних 10 днів після холдування жоден з цих методів не буде викликаний, на 11-й день близько 05:00 платіж може бути відхилений емітентом, і кошти стануть доступні клієнту.


У транзакцію додається коментар: Автоматично відхилено через 10 днів. (SYSTEM ACCOUNT [dateTime])

Сповіщення партнеру при цьому не надсилається.

Розхолдування платежу

Якщо цей метод не буде викликано протягом 10 днів, кошти повертаються клієнту, а платіж у системі відхиляється.

Перед викликом цього методу необхідно здійснити холдування транзакції

POST /api/merchant/unHoldOrder

REQUEST HEADERS
'PartnerKey: easypay-test' 
'locale: ua'
'AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='
REQUEST BODY
{
  "transactionId":955537573,
  "orderId":"hold_4",
  "serviceKey":"MERCHANT-TEST",
   "amount": 1.2
}

RESPONSE
{
 "paymentState": "accepted",
 "error": null
}
Опис параметрів запиту
Параметр Характеристика Коментарій
transactionId унікальний номер платежу в системі EasyPay
orderId унікальний ідентифікатор замовлення в системі партнера
amount необов’язковий параметр, торгова сума, яку слід списати з картки. Різниця повернеться клієнту на картку протягом 1–2 днів, залежно від регламенту банку


Опис параметрів відповіді

Параметр Характеристика Коментарій
paymentState статус платежу Можливі paymentState:

accepted - платіж успішний (кінцевий статус)

pending - платіж в обробці (некінцевий статус)

declined - платіж відхилений (кінцевий статус)

none - платіж не знайдено


Для платежів з 2DS переадресація на сторінку банку-емітента не відбувається, і користувач відразу отримує статус платежу.

Після спроби розхолдування платежу партнеру буде надіслано сповіщення згідно з варіантом, вказаним в налаштуваннях сервісу Повідомлення про платіж

Статус платежу необхідно перевіряти методом orderState

Параметри BrowseInfo при 3DS оплаті

У зв'язку з переходом банків - екваєрів на модель роботи 3D Secure 2.x, при створенні замовлення з одночасною передачею інструменту оплати в запиті (карта, токен карти, токен Apple / Google Pay), необхідно передавати додаткові параметри пристрою (браузера) клієнта в заголовках і в тілі запиту createOrder, у прикладі вони виділені:

POST /api/merchant/createOrder

HEADERS
 "appId: b15c4b64-8964-4c80-852e-df59a0e0d9b6",
"pageId: 607514b8-1da5-490a-bdf3-0c6883131625",
"partnerKey: easypay-test",
"sign: XJ3roGhTLwAZXigBp/iVRdsXlZYdTSen3xSM+29GaRg=",
"Content-Type:application/json",
"AcceptHeader:*/*",
"User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"

BODY

 "order":{
   "serviceKey":"MERCHANT-TEST",
   "orderId":"test_3ds2x",
   "additionalItems":{
     "Merchant.UrlNotify":"http://url.noti.fy"
   },
   "description":"Easy test payment",
   "amount":"1"
 },
 "userPaymentInstrument":{
   "instrumentType":"Card",
   "pan":"4444444444444444",
   "expire":"0599",
   "cvv":"123"
 },
 
 "browserInfo":{
   "colorDepth":"24",
   "screenHeight":"824",
   "screenWidth":"1536",
   "language":"uk-UA",
   "javaEnabled":"false",
   "javascriptEnabled": "true",
   "timeZone":"-180"
 }
 




Параметри
Параметр Характеристика
AcceptHeader:*/* передавайте без змін
User-Agent передавайте клієнтський User-Agent


Приклад, як збирати дані на JS:
getBrowserInfo() {
    let browserInfoModel = {};
    browserInfoModel.colorDepth = window.screen.colorDepth.toString();
    browserInfoModel.screenHeight = window.screen.height.toString();
    browserInfoModel.screenWidth = window.screen.width.toString();
    browserInfoModel.language = window.navigator.language;
    browserInfoModel.javaEnabled = window.navigator.javaEnabled();
    browserInfoModel.timeZone = (new Date()).getTimezoneOffset().toString();
    return browserInfoModel;
  }
Якщо все передано правильно, то отримайте відповідь як нижче у прикладі "Якщо передано userPaymentInstrument (для випадку з 3DSecure)", або помилку оплати з картки, наприклад, "Недостатньо коштів". У випадку, якщо додаткові параметри передані неправильно, отримайте помилку платіжного сервісу, наприклад:
"errorCode":"PAYMENT_PUMB_SERVICE_FAILURE",
    "errorMessage":"Технічна помилка екваєра. Зверніться до служби підтримки EasyPay, або спробуйте пізніше"
Відповідь (RESPONSE):
header:
відсутній

body:
{
    "accountInfo": null,
    "bankingDetails": null,
    "amount": 1,
    "amountMax": 4999,
    "amountMin": 0.01,
    "paymentInstrumentsTypes": [
        {
            "instrumentType": "EMoney",
            "commission": 0,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": []
        },
        {
            "instrumentType": "RCard",
            "commission": 2,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": []
        },
        {
            "storedCards": [],
            "instrumentType": "Card",
            "commission": 2,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": [
                {
                    "instrumentId": 4211698,
                    "instrumentType": "Card",
                    "instrumentValue": null,
                    "alias": null,
                    "commission": 2,
                    "loyaltyCommission": null,
                    "actionsKeys": null,
                    "priorityIndex": 0,
                    "additionalParams": {}
                }
            ]
        },

        {
            "walletStatus": "NotRegistered",
            "instrumentType": "MasterPass",
            "commission": 2,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": []
        },
        {
            "instrumentType": "LifeMoney",
            "commission": 0.03,
            "amountMin": 0.01,
            "amountMax": 4999,
            "userPaymentInstruments": [
                {
 "instrumentId": 5098216,
                    "instrumentType": "LifeMoney",
                    "instrumentValue": null,
                    "alias": null,
                    "commission": 0.03,
                    "loyaltyCommission": null,
                    "actionsKeys": null,
                    "priorityIndex": 0,
                    "additionalParams": {}
                }
            ]
        }
    ],
    "forwardUrl": https://easypay.ua/whitepage/81b14a73-730c-40d4-8064-ce1c10e0c53b,
  "error": null,
}

Якщо передано userPaymentInstrument (для випадку з 3DSecure):
{
  "paymentState":"WaitVerify",
  "action":"https://merchantapi.easypay.ua/api/payment/redirect/4df828bf-379b-4e88-8868-f667f12d74a9",
  "actionContent":"<html><head></head><body><form action='https://acs.monobank.com.ua/PaReqVISA.jsp' method='post' id='submitForm'><input type='hidden' name='PaReq'  value='eJxVUsluwjAQ/RWUY6VgO2RFg1FoqJpDUgThwNF1XAglS7NUpF9fm4alt3nzxvNm3hjm5/w0+hZ1k5XFTCNjrI1Ewcs0K/YzbZu86K42p5AcaiGCjeBdLShEomnYXoyydKY5mGNuWh966mKmm6lH9HcHY91zLeZMmGkT19EorPy1+KIwCFGpMzYAXaHsWPMDK1oKjH8twpiaBBumBWiAkIs6DCgh9oQ4rmsRW2pgQH9pKFgu6NLf7Fb+7ikIN8k6XGyT8C0GdKGAl13R1j21zQmgK4CuPtFD21bNFCHBmr5i/bhjCJAiAN2HWnUqamSjc5bS+Mj7+Pg5iY5LIwp8HCe7nyjZ4igJZ4BUBaSsFdTABsYecUfEmxIyteQ6lzywXE1AidpgiKFSEv4D8ZgA6Xstz9JTz5XUDYE4V2UhZIU08xYDus/7/Kos5a0yz7Kx6dgWNpStl5R6n0knDBNblwYKAFKP0HAxNBxbRv8+wS+7NLXc' /><input type='hidden' name='TermUrl' value='https://merchantapi.easypay.ua/api/payment/confirm/185ff3c7-8daa-4715-af1a-23f7554d19bb,0e101596-2a6a-4a0e-92e2-dac1e7a5c69d,-1' /><input type='hidden' name='MD' value='ee6eda7e-6252-41af-a696-825e85b34878' /></form><script>document.getElementById('submitForm').submit();</script> </body></html>",
  "actionType":"FormRedirect",
  "status":"Need3Ds", "alternativeRedirectUrl":"https://merchantapi.easypay.ua/api/payment/altredirect/00f9befe-a200-4e4d-ae27-0a4bdbc443fc",
  "transactionId":860094566,
  "retrievalReferenceNo":null,
  "responseItems":{
    "SessionId":"a9692063-2db5-4d25-8a66-e62b4476d1e4",
    "MerchantOpertion":"CheckPaymentOperationOrder",
    "Operation":"CheckPayment",
    "BankingDetails":""
  },
  "error":null
}

Якщо передано userPaymentInstrument (для випадку без 3DSecure):
{
  "redirectUrl":null,
  "action":null,
  "paymentState":"Confirmed",
  "status":"Done",
  "actionType":"UrlRedirect",
  "transactionId":847870521,
"retrievalReferenceNo":null,
  "responseItems": null,
  "error":null
}
Опис параметрів
Параметр Характеристика Коментарій
accountInfo додаткова інформація про послугу Якщо параметр відсутній, використовується значення ServiceKey з тіла запиту CreateOrder.
amount сума замовлення Якщо параметр відсутній, використовується значення OrderId, передане в тілі запиту CreateOrder.
amountMax максимальна сума платежу за послугою
amountMin мінімальна сума за послугою
forwardUrl URL сторінки оплати, для партнерів які не мають сертифікатів PCI DSS для обробки карткових даних. Або якщо партнер не має платіжної сторінки. на сторінці оплати можемо відключати елементи інтерфейсу:

- логотип EasyPay можемо приховувати

- лічильник часу, що залишився до оплати, може бути відображений/прихований

- поле "Призначення" (можемо вимкнути, або за замовчуванням зробити відкритим/закритим)

- рядок з логотипом партнера та назвою можемо приховати

- поле введення імейл сховати / відобразити

- рядок з "Номер замовлення" приховати/показати

paymentInstrumentsTypes список інструментів оплати. Інструменти Emoney, vcard та RCard видаємо тільки для користувачів, які авторизовані в системі EasyPay.

Можливі значення instrumentType

  • Emoney – гаманець EasyPay
  • Card – платіжна картка
  • RCard – платіжна картка, підв'язана в системі EasyPay
  • ApplePay – оплата через  ApplePay
  • GooglePay – оплата через GooglePay
  • LifeMoney – мобільні гроші Лайф.
  • KsMoney –  мобільні гроші Київстар
  • VodafoneMoney – мобільні гроші Водафон
  • картки лояльності Fishka


3DSecure / mobile payments case:
Якщо передано userPaymentInstrument (для випадку з 3DSecure):

{
  "paymentState":"WaitVerify",
  "action":"https://merchantapi.easypay.ua/api/payment/redirect/4df828bf-379b-4e88-8868-f667f12d74a9",
  "actionContent":"<html><head></head><body><form" action="https://acs.monobank.com.ua/PaReqVISA.jsp' method='post' id='submitForm'><input type="hidden" name="PaReq" value='eJxVUsluwjAQ/RWUY6VgO2RFg1FoqJpDUgThwNF1XAglS7NUpF9fm4alt3nzxvNm3hjm5/w0+hZ1k5XFTCNjrI1Ewcs0K/YzbZu86K42p5AcaiGCjeBdLShEomnYXoyydKY5mGNuWh966mKmm6lH9HcHY91zLeZMmGkT19EorPy1+KIwCFGpMzYAXaHsWPMDK1oKjH8twpiaBBumBWiAkIs6DCgh9oQ4rmsRW2pgQH9pKFgu6NLf7Fb+7ikIN8k6XGyT8C0GdKGAl13R1j21zQmgK4CuPtFD21bNFCHBmr5i/bhjCJAiAN2HWnUqamSjc5bS+Mj7+Pg5iY5LIwp8HCe7nyjZ4igJZ4BUBaSsFdTABsYecUfEmxIyteQ6lzywXE1AidpgiKFSEv4D8ZgA6Xstz9JTz5XUDYE4V2UhZIU08xYDus/7/Kos5a0yz7Kx6dgWNpStl5R6n0knDBNblwYKAFKP0HAxNBxbRv8+wS+7NLXc' /><input type='hidden' name='TermUrl' value='https://merchantapi.easypay.ua/api/payment/confirm/185ff3c7-8daa-4715-af1a-23f7554d19bb,0e101596-2a6a-4a0e-92e2-dac1e7a5c69d,-1' /><input type='hidden' name='MD' value='ee6eda7e-6252-41af-a696-825e85b34878' /></form><script>document.getElementById('submitForm').submit();</script> </body></html>",
  "actionType":"FormRedirect",
  "status":"Need3Ds", "alternativeRedirectUrl":"https://merchantapi.easypay.ua/api/payment/altredirect/00f9befe-a200-4e4d-ae27-0a4bdbc443fc",
  "transactionId":"860094566",
  "retrievalReferenceNo":"null",
  "responseItems":{
    "SessionId":"a9692063-2db5-4d25-8a66-e62b4476d1e4",
    "MerchantOpertion":"CheckPaymentOperationOrder",
    "Operation":"CheckPayment",
    "BankingDetails":""
  },
  "error":null
}

Якщо передано userPaymentInstrument (для випадку без 3DSecure):
{
  "redirectUrl":null,
  "action":null,
  "paymentState":"Confirmed",
  "status":"Done",
  "actionType":"UrlRedirect",
  "transactionId":847870521,
"retrievalReferenceNo":null,
  "responseItems": null,
  "error":null
}

Опис параметрів
Параметр Характеристика
paymentState
  • Confirmed - платіж підтверджений (кінцевий статус, якщо "status": "done")
  • WaitConfirm - платіж у статусі "обробляється", необхідно додатково запросити фінальний статус платежу
  • WaitVerify - від клієнта очікується підтвердження (наприклад, якщо "status": "Need3Ds" - необхідно пройти перевірку 3D Secure)
status
actionType тип наступної дії:
  • "FormRedirect" -  необхідно створити сторінку (форму) з html-коду, який передано у параметрі "actionContent" :"<html>...</html>", відкрити її клієнту, наприклад, для проходження ним 3D-secure перевірки. Альтернативним варіантом є переадресація клієнта за посиланням параметра "alternativeRedirectUrl".
  • Після проходження перевірки клієнт буде передресовано на фінальну сторінку EasyPay або на

"urls": {

"success": "string",

"failed": "string"

}

"None" - можливий при використанні інструменту гаманець ("instrumentType": "EMoney"), кошти успішно списані з гаманця, партнеру надсилається повідомлення про списання.
actionContent "<html>...</html>" - html форма сторінки банку для введення коду 3DS. Сформувати сторінку з коду та відкрити її клієнту. Після підтвердження платежу відбудеться 302-й редирект на ваші "urls" із запиту createOrder, або на фінальну сторінку EasyPay
transactionId номер транзакції в EasyPay

2DSecure case:
Параметр Характеристика
paymentState "Confirmed" та "status": "Done" - платіж пройшов успішно. При інших значеннях необхідно перевірити статус платежу (Перевірка статусу платежу)
status "Done" -платіж завершено, додаткові дії не потрібні. При "paymentState":
  • "Confirmed" - означає, що транзакція на стороні EasyPay прийнята (http - оповіщення успішно доставлено партнеру)
transactionId номер транзакції до EasyPay


Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки


У випадку "actionType": "ConfirmCode", клієнту прийде код підтвердження, який потрібно передати до EasyPay

POST /api/payment/confirmCodeVerification

Request
headers

"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
  "code": "string"
}
Response
headers 
відсутній

body
{  }
Якщо "status":"Need3Ds", то клієнту потрібно пройти 3DS перевірку в залежності від значення "actionType".


Опис параметрів:
Параметр Характеристика
FormRedirect необхідно СТВОРИТИ  сторінку (форму) з html-коду, який передано у параметрі
actionContent "<html>...</html>", відкрити її клієнту для проходження ним 3D-secure перевірки. Альтернативним варіантом є переадресація клієнта за посиланням параметра "alternativeRedirectUrl"
UrlRedirect необхідно переадресувати клієнта на посилання з "action" або переадресувати клієнта за посиланням з "alternativeRedirectUrl". Відобразиться форма банку емітента картки для перевірки 3D Secure. Після введення коду клієнта переадресує на сторінку успіху чи помилки. Адреси сторінок передаються на етапі створення замовлення.

"urls": {

   "success": "string",

   "failed": "string"

}


Перевірка статусу платежу


POST /api/merchant/orderState

Request
headers:
"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
   "serviceKey":"MERCHANT-TEST",
   "orderId":"test_20240524-0015",
   "transactionId":"1413668587"
}


Response
headers:
відсутній 

body:
"merchantKey":"easypay-test",
  "transactionId":1413668587,
  "orderId":"test_20240524-0015",
  "amount":3.000000,
  "paymentState":"declined",
  "refundTransactionId":1413673292,
  "":
  "paymentsList":[
    
  ],
  "refunds":[
    {
      "refundTransactionId":1413669380,
      "paymentState":"accepted",
      "refundAmount":1.10,
      "dateAccepted":"2024-05-24T16:14:45+03:00",
      "dateDeclined":null,
      "datePost":"2024-05-24T16:14:39+03:00"
    },
    {
      "refundTransactionId":1413673292,
      "paymentState":"accepted",
      "refundAmount":1.90,
      "dateAccepted":"2024-05-24T16:19:40+03:00",
      "dateDeclined":null,
 "datePost":"2024-05-24T16:19:33+03:00"
    }
  ],
  "error":null
}


Опис параметрів

Фінальний статус? Значення/ подальші дії
accepted так платіж прийнято
declined так платіж відхилений
pending ні платіж знаходиться в обробці, необхідно повторити запит статусу пізніше
none - статус платежу не визначено, необхідно повторити запит статусу до отримання кінцевого статусу


Нетипові відповіді запит статусу:

  • Якщо платіж не знайдено, прийде відповідь:
{
"error":{
"errorCode":"MERCHANT_ORDERID_NOT_FOUND",
"title":null,
"description":null,
"errorMessage":"MERCHANT_ORDERID_NOT_FOUND",
"fieldErrors":[   ]
}
  • Якщо платіж (сторінка, замовлення) не були відкриті клієнтом або не було спроби оплати, прийде відповідь:
{
"merchantKey": "easypay-test",
"transactionId": 0,
"orderId": "Some orderId2",
"amount": 0,
"paymentState": "pending",
"refundTransactionId": null,
"paymentsList": [],
"error": null
}
  • Якщо отримано помилку на замовлення на етапі визначення реквізитів:
{
  "merchantKey": "easypay-test",
  "transactionId": 0,
  "orderId": "Some orderId",
  "amount": 0,
  "paymentState": "declined",
  "refundTransactionId": null,
  "paymentsList": [],
  "error": {
    "errorCode": "PROVIDER_ACCOUNT_INVALID", (ерор код може (має) відрізнятися від того, що в прикладі)
    "title": "Помилка системи",
    "description": "Акаунт не знайдено",
    "errorMessage": "string"
  }
}


При виконанні запиту статусу на замовлення, у яких є спліт (платіжна опція) - повертається наступна модель:

Request:
headers:

"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
   "serviceKey":"easypay-test",
   "orderId":"full_split_11",
   "transactionId":""
}
Response
headers
відсутній

body
{
    "merchantKey": "easypay-test",
    "transactionId": 991379504,
    "orderId": "full_split_11",
    "amount": 3.150000,
    "paymentState": "accepted",
    "refundTransactionId": null,
    "paymentsList": [
        {
            "merchantKey": "easypay-test",
            "transactionId": 991379509,
            "orderId": "full_split_11",
            "amount": 1.030000,
            "paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        },
        {
            "merchantKey": "easypay-test",
            "transactionId": 991379508,
            "orderId": "full_split_11",
            "amount": 0.050000,
            "paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        },
        {
            "merchantKey": "easypay-test",
            "transactionId": 991379507,
            "orderId": "full_split_11",
            "amount": 1.020000,
 "paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        },
        {
            "merchantKey": "easypay-test",
            "transactionId": 991379506,
            "orderId": "full_split_11ID",
            "amount": 1.050000,
            "paymentState": "accepted",
            "refundTransactionId": null,
            "date": "2021-09-15T14:07:38+03:00",
            "error": null
        }
    ],
    "error": null
}
Опис параметрів
Параметр Характеристика
paymentsList список платежів у структурі спліту з деталізацією.


У випадку зі сплітованими платежами, в основному тілі відповіді OrderState - параметру transactionId присвоюється внутрішній технічний номер (нефінансової) операції.
"urls": {
   "success": "string",
   "failed": "string"
}

Скасування платежу


Метод викликається лише для платежів у статусі "accepted". Для успішного скасування має бути достатньо суми прийнятих платежів у день скасування. Можна скасовувати платежі, які не старші 30 днів. Успішне повернення після цього терміну – не гарантується, залежить від умов банків-еквайєрів.

Повернення суми на картку відбувається в строк 0-3 робочих дні, в окремих випадках – до 30 робочих днів. Це залежить від умов банку-еквайєра, через який пройшов основний платіж, а також банку-емітента.

Скасування звичайного платежу

POST /api/merchant/cancelOrder

Request
headers
"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
  "serviceKey": "MERCHANT-TEST",
  "orderId": "test_20210217-121843",
  "transactionId": "913141164",
  "amount":"1"
}
Response
headers
body
{
  "merchantKey":"easypay-test",
  "transactionId":913141164,
  "refundTransactionId":913141464,
  "orderId":"test_20210217-121843",
  "amount":1.000000,
  "paymentState":"accepted",
  "error":null
}


Опис параметрів

Параметр Характеристика Коментарій
amount скасована сума для часткового скасування - передається із сумою, яку потрібно скасувати.

для скасування повної суми - параметр amount не передається

transactionId оригінальна транзакція магазину чи послуги

передається партнеру після реєстрації у системі EasyPay відповідальним менеджером.

refundTransactionId транзакція рефанду (скасування) транзакція рефанду (скасування)
paymentState статус транзакції рефанду (скасування). Можливі значення: Можливі значення:
  • accepted - скасування успішне. Створено транзакцію рефанду з негативною сумою
  • declined - скасування пройшло неуспішно
  • pending або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.

Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен повертати "paymentState":"declined", а запит статусу транзакції скасування - "paymentState": "accepted"

При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація (Повідомлення про платіж), на Merchant.UrlNotify буде одноразово надіслано POST - запит із параметром "action": "refund" та сумою (amount), яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.

Скасування платежу (замовлення зі Splitting параметрами)

Скасування платежу (Замовлення) можна робити:
  • на всю суму платежу (замовлення)
  • на суму одного спліту (Часткова скасування платежу (замовлення))
  • на суму меншу від суми спліту (Часткова скасування спліту)


Скасування повної суми платежу (замовлення зі Splitting параметрами)

  • Для скасування повної суми Splitting транзакції необхідно виконати запит статусу транзакції згідно з розділом "Перевірка статусу платежу" використовуючи основний OrderID
  • Отриманий у відповіді кореневий transactionID використовувати у запиті cancelOrder
  • У відповідь на запит cancelOrder буде отримано відповідь зі статусом скасування, а також буде отримано коллбек по кожній транзакції, яка входила до Splitting транзакції.
  • Коллбек на загальну суму Splitting транзакції не надходить.


POST /api/merchant/cancelOrder

Request
headers
"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
  "serviceKey": "easypay-test",
  "orderId": "full_split_11",
  "transactionId": 991379504,
}
Response
headers
відсутній 

body
{
  "merchantKey":"easypay-test",
  "transactionId": 991379504,
  "refundTransactionId":913141464,
  "orderId":"full_split_11",
  "amount":1.000000,
  "paymentState":"accepted",
  "error":null
}
Опис параметрів
Параметр Характеристика Коментарій
transactionId номер транзакції, що скасовується, приходить при отриманні коллбека за оплаченим замовленням (параметр payment_id)
amount сума, що скасовується:

для часткового скасування - передається із сумою, яку потрібно скасувати.

transactionId оригінальна транзакція, яка була відправлена ​​у запиті cancelOrder
refundTransactionId транзакція рефанду (скасування)
amount сума, яка була скасована
paymentState статус транзакції рефанду (скасування) Можливі значення:
  • accepted - скасування успішне. Створено транзакцію рефанду з негативною сумою
  • declined - скасування пройшло неуспішно
  • Pending або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.
Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен тепер повертати "paymentState":"declined" як для основної так і для окремих транзакцій, а запит статусу транзакції скасування - "paymentState":"accepted".


При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація (див. Повідомлення про платіж), на Merchant.UrlNotify буде одноразово надіслано POST - запит із параметром "action": "refund" та сумою (amount), яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.

Часткове скасування (повернення) платежу (замовлення зі Splitting параметрами)

Для часткового скасування платежу необхідно виконати запит cancelCurder використовуючи transactionID який був отриманий в коллбеку (параметр payment_id), а також вказавши суму скасування (вона має бути меншою або дорівнює сумі транзакції, що скасовується).

  • У відповідь на запит cancelOrder буде отримано відповідь зі статусом скасування, а також буде отримано коллбек про успішне скасування цієї транзакції.


POST /api/merchant/cancelOrder

Request
headers

"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
  "serviceKey": "easypay-test",
  "orderId": "full_split_11",
  "transactionId": 991379509,
  "amount":1.00
}
Опис параметрів
Параметр Характеристика Коментарій
transactionId номер транзакції, що скасовується, приходить при отриманні коллбека за оплаченим замовленням (параметр payment_id)
amount сума, що скасовується:

для часткового скасування - передається із сумою, яку потрібно скасувати.

Response
headers
відсутній

body
{
  "merchantKey":"easypay-test",
  "transactionId":"991379509",
  "refundTransactionId":"913141464",
  "orderId":"full_split_11",
  "amount":"1.000000",
  "paymentState":"accepted",
  "error":"null"
}
Опис параметрів
Параметр Характеристика Коментарій
transactionId оригінальна транзакція, яка була відправлена ​​у запиті cancelOrder
refundTransactionId транзакція рефанду (скасування)
amount сума, яка була скасована
paymentState транзакція рефанду (скасування)
  • accepted - скасування успішне. Створено транзакцію рефанду з негативною сумою
  • declined - скасування пройшло неуспішно
  • pending або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.


Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен тепер повертати "paymentState":"declined", а запит статусу транзакції скасування - "paymentState":"accepted" При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація (див. Повідомлення про платіж), на Merchant.UrlNotify буде одноразово надіслано POST - запит із параметром "action": "refund" та сумою (amount), яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.

Повідомлення про платіж


  1. Партнер обов'язково вибирає 1 або кілька способів сповіщення та повідомляє його в EasyPay. Партнер зазначає платіж успішним на своїй стороні лише після отримання цього повідомлення
  2. Ми надсилаємо HTTP - колек з IP 93.183.196.26 методом POST з інформацією про платіж.
  3. Запит надсилає EasyPay партнеру після того, як транзакція набула фінального статусу (Accepted, Declined).
  4. URL для повідомлень (UrlNotify) партнер направляє у запиті createOrder у параметрі:


"order":{
"additionalItems":{
"Merchant.UrlNotify":"https://notify.url"
}
}


"Merchant.UrlNotify" Параметр не може бути порожнім і має відповідати формату URL.

⚠️ Важливо! Якщо у відповіді не отримано HTTP StatusCode 200, запит нотифікації буде надіслано повторно протягом 1-10 хвилин. Повторення може продовжуватися визначену кількість разів (за замовчуванням – 50 разів), поки не буде отримано статусу "200 ОК".

Request
headers

"Sign": "Bq2d0oaqVGMRWpX5wsGpOlpqLg42pBdDO7TfTPYVmnU="
body
{
  "OperationType": "Payment",
  "PartnerKey": "groshi-com", 
  "ServiceKey": "GROSHI-COM-GOOGLEPAY",
  "TransactionStatus": "Accepted",
  "MerchantOrderId": "3127194_28_450866",
  "DateTime": "2023-12-09T14:00:48",
  "Amount": 2059.08,
  "Commission": 28.83,
  "TransactionId": 1336448544,
  "AdditionalItems": {
    "Merchant.Inn": "3178404189",
    "Merchant.Details": ";0;0;;4;",
    "Merchant.UrlNotify": "https://testpartner.ua/callback",
    "Merchant.ClientFullName": "Іванов Дмитро"
    "Acquirer.MerchantId":"12345678"
    "Acquirer.TerminalId":"E1234567"
    "Card.BrandType":"Visa"
    "AuthCode":"012345"
   }
}
Опис параметрів
Параметр Характеристика Коментарій
OperationType тип оповіщення Можливі значення:

payment - про успішний платіж (повторюється, якщо у відповідь не отримано статусу 200)

refund - про успішне скасування платежу (відправляється разово)

PartnerKey ІД партнера у системі EasyPay
ServiceKey ІД сервісу партнера у системі EasyPay
TransactionStatus статус платежу
MerchantOrderId номер замовлення партнера із запиту createOrder
Acquirer.MerchantId ідентифікатор торговця
Acquirer.TerminalId ідентифікатор платіжного пристрою
Card.BrandType найменування платіжної системи, платіжний інструмент якої використовується
AuthCode Код авторизації
DateTime час надання платежу статусу на стороні EasyPay якщо партнер не відповість статусом 200 на запит з action:payment, то в наступному запиті час буде новим
TransactionId ID транзакції на стороні EasyPay


Необхідно перевіряти підпис у нашому HTTP notify, налаштувати прийом лише для наших IP 93.183.196.26. Для правильного обчислення підпису, тіло з нотифай потрібно брати як є, без перетворень та форматувань. У випадку, якщо підпис notify не перевірено, всі фінансові ризики перекладаються на партнера.

Отримання інформації про рекурентний платіж


GET /api/merchant/reccurent/info

Request
headers

"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
queryParams
"serviceKey": "string"
 "orderId": "string"
 "reccurentId":  "0"
 "dateFrom": 2025-03-10
 "dateTo": 2025-03-17
 "isEnabled": true|false
 "pageNumber": 1
 "countPerPage": 3
Response
headers

body
{
  "merchantReccurentPaymentDetails":[
    {
      "recurrentId":14433854,
      "orderDescription":"Easy payment",
      "serviceName":"Мерчант Тест UA",
      "serviceKey":"MERCHANT-TEST",
      "orderId":"test_20250312-153601+url",
      "amount":1.000000,
      "croneRule":"* 17 * * *",
      "dateCreate":"2025-03-12T16:38:02+02:00",
      "dateRun":"2025-03-13T17:00:00+02:00",
      "dateLastPayment":"2025-03-12T19:47:05+02:00",
      "isEnabled":true,
      "dateExpire":"2025-03-12T21:37:42+02:00",
      "properties":{
        "failedCount":"1",
"urlNotify":"http://109.251.205.8:9987/merch/notifysigncheckexample.php"
      }
    },
    {
      "recurrentId":14433852,
      "orderDescription":"Easy payment",
      "serviceName":"Мерчант Тест UA",
      "serviceKey":"MERCHANT-TEST",
      "orderId":"test_20250312-153601",
      "amount":1.000000,
      "croneRule":"* 17 * * *",
      "dateCreate":"2025-03-12T16:37:25+02:00",
      "dateRun":"2025-03-13T17:00:00+02:00",
      "dateLastPayment":"2025-03-12T19:47:05+02:00",
      "isEnabled":true,
      "dateExpire":"2025-03-12T21:37:03+02:00",
      "properties":{
        "failedCount":"1"
      }
    }
  ],
  "totalCount":2,
  "totalFilteredCount":2,
  "pageFilteredCount":2,
  "currentPageNumber":1,
  "numberOfPages":1,
  "error":null
}
Параметр Характеристика
serviceKey ІД сервісу партнера у системі EasyPay
orderId номер замовлення партнера із запиту createOrder
reccurentId номер рекурента
dateFrom дата створення рекурента з..
dateTo дата створення рекурента по..
isEnabled відобразити лише активні / або неактивні рекуренти
pageNumber відобразити сторінку номер..
countPerPage кількість записів на сторінці
templateId номер рекуренту (reccurentId)

Виклик рекурентного платежу


POST /api/merchant/reccurent/payment

Request
headers

"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
  "reccurentId": 0,
  "amount": 0
}
Response
headers

body
{
  "reccurentId": 0,
  "transactionId": 0,
  "transactionStatus": "None",
  "error": {
    "errorCode": "string",
    "title": "string",
    "description": "string",
    "errorMessage": "string",
    "fieldErrors": [
      {
        "fieldName": "string",
        "errorCode": "string",
        "errorMessage": "string"
      }
    ]
  }
}
Також буде надіслано нотифікацію у разі успішного платежу. Створення рекурентного платежу на операцію, у структурі якої є спліт – не підтримується.


Видалення рекурентного платежу


DELETE /api/merchant/reccurent/delete/{id}

Request
headers

"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
відсутній
Response
headers

- 

body

-

Робота з токенізованими картами


Токенізація карти

Метод призначений для токенізації (збереження) картки для ідентифікатора користувача під конкретним торговцем.

Токенізація з передачею даних картки у запиті (заборонено без PCI:DSS сертифікації мерчанта)

Перед викликом цього методу. Потрібно викликати один із методів:

- CreateApp

- CreatePage

POST /api/merchant/tokenCard


Request
headers

"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
  "phone": "380501002030ws",
  "pan": "4874120123567889",
  "expire": "1222",
  "cvv": "012",
  "vсode": "123654"
}
Response
headers
відсутній

body
{
  "activateCodeType": "code|amount",
  "cardGuid: "55F5118B-B695-43BA-8555-AF8B698C4D2C",
  "pan: "48741201****1234",
  "expire”: "1222" 
  "error": "null"
}
Токенізація картки - процес двоетапний.

На першому етапі у запиті йдуть параметри картки та номер телефону користувача. У відповіді, залежно від activateCodeType, може бути активація за кодом підтвердження з виписки або SMS або за сумою списання.

З другого краю етапі до всіх параметрів додається ще vcode – код верифікації. При успішному відповіді прийдуть параметри токенізованої карти чи помилка.

Токенізація за допомогою введення даних картки користувачем на сторінці (сертифікація PCI:DSS не потрібна)

Перед викликом цього методу, потрібно викликати один із методів:

- CreateApp;

- CreatePage;

POST api/merchant/tokenCard/create

Request
headers 
"Content-Type: application/json"
"PartnerKey: partnerName"
"locale: ua"
"AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
  "phone": "8888",
  "expire": "2020-12-06T12:54:32.043Z",
  "urls": {
    "success": "https://test.ua",
    "failed": "https://test1.ua",
    "notify": "https://test2.ua",
    "back": "https://test3.ua"
  },
  "description": "testtts",
  "checkExistingToken": false
  "operationType":"SingleToken | createToken | ExistingToken"
}


Response
headers

body
{
"forwardUrl": "https://easypay.ua/ua/tokencard/cae16afc-be56-4a39-8ce1-5de4f4142e76",
"error": null
}
Параметр Характеристика Коментарій
description опис, який відобразиться на сторінці токенізації
expire час життя сторінки токенізації (по дефолту - 15 хвилин)
phone ідентифікатор клієнта, під яким збережеться картка (будь-які літери, цифри, GUID. Не повинен містити символ ‘+’
urls містить інформацію про:
  • сторінці успіху партнера (success) для переадресації клієнта після успішної токенізації, потрібно обов'язково передавати
  • сторінці помилки (failed) для переадресації клієнта у разі помилки
  • адреса для відправки callback-запиту з деталями при успішній токенізації (notify)
  • адресу для повернення назад зі сторінки токенізації (back)
forwardUrl сторінка для додавання картки (токенізації)
checkExistingToken перевірка наявності токена по карті, що вводиться у даного партнера. Параметр може набувати значення:
  • true - проводити валідацію на наявність раніше створеного токена по цій карті;
  • false - валідація відсутня;
  • null - валідація відсутня;


Якщо параметру checkExistingToken присвоєно значення true, слід очікувати наступних сценаріїв поведінки:

  • “checkExistingToken” : true, і в системі немає раніше створених токенів під зазначену карту під даним партнером (partnerKey) - формується запит на верифікацію введених даних картки (надсилання коду верифікації). За результатом успішної верифікації – створюється токен. При неуспішній верифікації – токен не створюється. У callback пишуться дані щодо створеного токену;
  • “checkExistingToken” : true, і в системі є раніше створені токени під зазначену карту під даним партнером (partnerKey) - користувачу відкривається сторінка успіху, додаткова верифікація (надсилання коду верифікації не відбувається), токен не створюється, а в callback вказується масив раніше створених токенів;
  • “checkExistingToken” : false / null, ​​і в системі немає раніше створених токенів під зазначену карту під даним партнером (partnerKey) - формується запит на верифікацію введених даних картки (надсилання коду верифікації). За результатом успішної верифікації – створюється токен. При неуспішній верифікації – токен не створюється. У callback пишуться дані щодо створеного токену;
  • “checkExistingToken” : false / null, ​​і в системі є раніше створені токени під зазначену карту під даним партнером (partnerKey) – формується запит на верифікацію введених даних картки (надсилання коду верифікації). За результатом успішної верифікації – створюється токен. При неуспішній верифікації – токен не створюється. У callback пишуться дані щодо створеного токену.
operationType (Новий параметр) задає тип операції токенізації
  • SingleToken - для однієї карти завжди повертається той самий токен. Логіка така:
  • перевіряємо чи є токен для цієї картки під partnerKey із запиту
  • якщо є 1 або більше токенів - беремо останній з них, створюємо новий запис з цим токеном для переданого ідентифікатора клієнта (phone), відправляємо цей токен в callback у кореневому параметрі cardGuid
  • якщо токенів немає - створюємо новий для цього phone і відправляємо його в callback в кореневому параметрі cardGuid (один і той же cardGuid може бути прив'язаний до різних phone)
  • createToken - значення за замовчуванням, звичайне створення токена (можна не передавати)
  • ExistingToken - поведінка аналогічна checkExistingToken:true

На сторінці токенізації можемо керувати інтерфейсом (на стороні EasyPay):

  • відображати/сховати логотип EasyPay
  • відображати/приховати логотип та назву партнера
  • відображати/приховати опис з деталями токенізації
  • відображати опис у згорнутому/розгорнутому вигляді

Приклад callback - запит з IP адреси 93.183.196.26 після успішної токенізації:

Request
headers

Sign : AStbusXxzYdr48vssdr4/VXZCITrad8vr1A/tWhCBP8=

body
{ 
   "partnerKey":"partnerName",
   "phone":"test989",
   "cardGuid":"2ad57b2e-eb5b-4a99-ad05-788cf589b8af",
   "pan":"44411122****3558",
   "expire":"0524",
   "datePost":"2021-02-24T17:32:07.447",
   "codeType":"Mpi3Ds"
}
Параметр Характеристика
phone ідентифікатор клієнта, під яким збережено картку
cardGuid токен збереженої карти
pan маскований номер картки
expire термін дії карти
datePost час додавання картки
codeType ознака типу верифікації картки. Mpi3Ds – з використанням 3ds.


Приклад callback - запит з IP адреси 93.183.196.26 з параметром ExistingToken:

Request
headers
Sign : AStbusXxzYdr48vssdr4/VXZCITrad8vr1A/tWhCBP8=

body
{
   "partnerKey":"easypay-test",
   "phone":"380509899549",
   "cardGuid":null,
   "pan":"44411122****3558",
   "expire":"0524",
   "datePost":"2021-05-18T18:41:53.152",
   "codeType":"Code",
   "existingTokens":[
      {
         "partnerKey":"easypay-test",
         "phone":"380509899549",
         "cardGuid":"bac4f855-xxxx-xxxx-bece-14cdf23c6c52",
         "pan":"44411122****3558",
         "expire":"0524",
         "datePost":"2021-05-18T18:28:23.840",
         "codeType":"Mpi3Ds"
      },
      {
         "partnerKey":"easypay-test",
         "phone":"380509899549",
         "cardGuid":"6338e8b4-xxxx-xxxx-a3e5-f46ad0cb0efa",
         "pan":"44411123****3558",
         "expire":"0524",
         "datePost":"2021-05-18T18:34:25.733",
         "codeType":"Mpi3Ds"
  },
      {
         "partnerKey":"easypay-test",
         "phone":"380509899549",
         "cardGuid":"18e3c35e-xxxx-xxxx-ba59-9506154394c0",
         "pan":"44411123****3558",
         "expire":"0524",
         "datePost":"2021-05-18T18:39:42.010",
         "codeType":"Mpi3Ds"
      }
   ]
}
Параметр Характеристика
existingTokens масив з даними раніше створених токенів по цій карті під даного партнера (partnerKey)


Отримання списку токенізованих карт

Метод призначений для отримання списку токенізованих карток за номером телефону (ознакою) користувача.


GET /api/merchant/tokenCards/get

Request
headers 

'PartnerKey: partnerName' 
'locale: ua'
'AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'TimeStamp: 1554360173'
'Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='

queryparams
phone = string 
cardGuid= Guid
Response
headers 
відсутній

body
{
  "tokenCards": [
  {
     "cardGuid": "55F5118B-B695-43BA-8555-AF8B698C4D2C",
     "pan": "48741234****1234",
     "expire”: "1222"
   }],
  "error": "null"
}
Якщо передати тільки ідентифікатор клієнта (параметр phone) - у відповіді будуть всі карти поточного клієнта. Якщо передати phone та cardGuid - у відповіді буде одна карта поточного клієнта.


Видалення токенізованих карт

Метод призначений для видалення токенізованих карток за номером телефону. Якщо у клієнта під одним номером кілька карток, всі картки будуть видалені.

DELETE /api/merchant/tokenCards/delete/phone

DELETE /api/merchant/tokenCards/delete/phone?CardGuid=Guid

Request
headers

'PartnerKey: partnerName' 
'locale: ua'
'AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'TimeStamp: 1554360173'
'Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='

queryparams

cardGuid= Guid
Response
headers 
відсутній 

body 
відсутній
Видача кредиту (переказ на картку користувача)

Метод призначений для переказу на картку користувача суми кредиту.

POST /api/merchant/createOrder

Перед викликом цього методу потрібно викликати один із методів:


Request:
headers

"Content-Type": "application/json"
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="

body
{
   "order":{
  	"serviceKey":"CARD-FILL",
  	"description":"test top up card",
  	"amount":1.12, (decimal)
  	"orderId":"test",
  	"fields":[
     	{
        	"fieldName":"Pan",
        	"fieldValue":"4102321200001111",
        	"fieldKey":"b95d541a-c11f-49bc-9042-295dbf74ccn6"
     	},
     	{
        	"fieldName":"Phone",
        	"fieldValue":"38093520000"
     	}
  	],
     	"additionalItems": {
	      "Merchant.ClientFullName": "Иванов Петр Сергеевич",
                     "Merchant.Address": "04080, Київ, вул.Межигірська 82а корп.Б, кв.32",
                    "Merchant.Inn": "3334445823"
        }
   },
   "userPaymentInstrument":{
  	"instrumentType":"Vcash"
   }
}
Response
headers
відсутній 

body 
{
	"redirectUrl": null,
	"action": null,
	"paymentState": "Confirmed",
	"status": "Done",
	"actionType": "UrlRedirect",
	"transactionId": "766934634",
	"retrievalReferenceNo": "null",
	"responseItems": "null",
	"error": "null"
}
Опис параметрів
Параметр Характеристика Коментарій
paymentState
  • Confirmed оплата пройшла успішно
  • WaitConfirm  очікується підтвердження платежу
  • Rejected і Refunded платіж відхинело
transactionId ідентифікатор платежу в системі Easypay У об'єкти поля передається інформація для поповнення карти. Номер картки можна вказувати:
  • для випадку з PCI DSS сертифікацією: у відкритому вигляді

"fieldName":"Pan",

"fieldValue":"4102321200001111",

  • для випадку без PCI DSS сертифікації: у вигляді токена (як отримати токен картки - див. Токенізація карти):

"fieldName":"Pan",

"fieldKey":"b95d541a-c11f-49bc-9042-295dbf74ccn6"

Також потрібно вказати:

- номер телефону клієнта:

"fieldName":"Phone",

"fieldValue":"38093520000"

- ПІБ та адреса клієнта АБО ПІБ та ІПН клієнта:

"additionalItems": {

      "Merchant.ClientFullName": "Іванов Петро Сергійович"

                  "Merchant.Address": "04080, Київ, вул.Межигірська 82а корп.Б, кв.32"

      "Merchant.Inn": "3334445862"

        }


Статус видачі кредиту:

  • Якщо у відповіді отримано кінцевий статус (paymentState = Confirmed / Rejected / Refunded) - необхідно присвоїти його платежу.
  • Якщо кінцевий статус у відповіді не отримано (paymentState = WaitConfirm), у тому числі при серверних, мережевих та будь-яких інших відповідях та помилках - необхідно запросити статус платежу методом orderState (Перевірка статусу платежу) до отримання кінцевого статусу.


Важливо врахувати, що нотифікація про оплату не надсилається (якщо партнер/мерчант не повідомив про необхідність такого налаштування).

Скасування транзакції не передбачено.



Response (Приклади відповідей при помилках: status code = 400)
{
    "error": {
        "errorCode": "MERCHANT_CREATEORDER_VALIDATION_EXCEPTION",
        "title": null,
        "description": null,
        "errorMessage": "MERCHANT_CREATEORDER_VALIDATION_EXCEPTION",
        "fieldErrors": [
            {
                "fieldName": "Order.Fields[0]",
                "errorCode": "SERVICE_FIELDS_VALIDATION_EXCEPTION",
                "errorMessage": "Вказана умова не була виконана для значення поля."
            }
        ]
    }
}


{
    "error": {
        "errorCode": "PAYMENT_ALFABANK_CASH2CARD_C2Pv2",
        "title": "Платіжна помилка",
        "description": "Платіжна помилка",
        "errorMessage": "Обслуговуються тільки карти емітовані українськими банками",
        "fieldErrors": []
    }
}


{
    "error": {
        "errorCode": "PAYMENT_ALFABANK_CASH2CARD_C2Pa8",
        "title": "Платіжна помилка",
        "description": "Платіжна помилка",
        "errorMessage": "Необхідно уточнити реквізити картки одержувача у банку емітента",
        "fieldErrors": []
    }
}
Нотифікації (колбеки) щодо операцій поповнення карток

Дані колбеки є опціональним (додатковим) способом отримання інформації від EasyPay про результат виконання запиту на поповнення картки.

Для активації отримання колбеків мерчант (партнер) повинен повідомити EasyPay про таку необхідність, після чого EasyPay включає цю опцію.

Спосіб відправки колбека - HTTP - з IP 93.183.196.26 буде надіслано POST запит з інформацією про платіж на вказаний urlNotify.

urlNotify прописується на стороні EasyPay і використовується за замовчуванням, якщо партнер не передав його у своєму запиті.

URL для повідомлень (UrlNotify) повідомляє партнер (мерчант).

Партнер може передавати UrlNotify у запиті createOrder у параметрі:

"order":{

"additionalItems":{

"Merchant.UrlNotify":"https://notify.url"

}

}

"Merchant.UrlNotify" параметр не може бути порожнім і повинен відповідати формату URL.

Якщо у відповідь не отримано HTTP StatusCode 200 - запит нотифі буде надіслано повторно, доки не отримано статусу “200 ОК”.

Коли нотифікацію (колбек) успішно доставлено (отримано статус 200 ОК), повторне відправлення колбеків припиняється.

Відправлення колбеків можливе за двома сценаріями:

1) лише за успішними операціями (транзакціями);

2) за операціями (транзакціями) у фінальному статусі (успішні та відхилені).

Надання фінального статусу операції (транзакції) асинхронно з процесом відправки колбека (фінансова транзакція набуває фінального статусу незалежно від статусу прийняття колбека партнером).

Request
headers 

"Sign: "Bq2d0oaqVGMRWpX5wsGpOlpqLg42pBdDO7TfTPYVmnU="
"User-Agent": "EasyPay.MerchantNotifyService"

body

{
  "action": "payment",
  "merchant_id": 5347,
  "order_id": "5",
  "date": "2019-06-19T15:38:10.7802613+03:00",
  "details": {
    "amount": 1.00,
    "desc": "Wooden tables x 10",
    "payment_id": 724502946,
    "recurrent_id": null
  },
  "additionalitems": {
    "BankName": "CB PRIVATBANK",
    "Card.Pan": "414962******1234",
  }
}
Опис параметрів
Параметр Характеристика Коментарій
action тип оповіщення payment - про успішний платіж (повторюється, якщо у відповідь не отримано статусу 200)
merchant_id номер сервісу партнера на стороні EasyPay;
order_id номер замовлення партнера із запиту createOrder;
date час надання платежу статусу на стороні EasyPay; необов'язковий параметр (потрібно вказати, якщо потрібно замінити картку Одержувача)
details детальна інформація про платіжну операцію (транзакцію)
  • payment_id - ID детальна інформація про платіжну операцію (транзакцію):
  • amount - сума фінансової операції;
  • desc - опис замовлення, отриманий під час запиту CreateOrder;
  • recurrent_id - ознака реккурентного платежу (завжди за замовчуванням на операціях поповнення картки – null);
additionalitems блок додаткових параметрів, до якого можуть включатися додаткові айтеми, отримані в запиті CreateOrder:
  • BankName - назва банку власника картки;
  • Card.Pan - номер картки у маскованому вигляді.


Необхідно перевіряти підпис у нашому HTTP notify, налаштувати прийом лише для наших IP 93.183.196.26.


⚠️ Важливо! У випадку, якщо підпис notify не перевірено, всі фінансові ризики перекладаються на партнера.

Інтеграція з ApplePay


Вимоги
  1. Ваш сайт повинен працювати за схемою HTTPS та підтримувати протокол TLS 1.2.
  2. Потрібно погодитись з умовами надання послуг Apple Pay.
  3. Необхідно укласти договір із Easypay.ua.


Apple Pay надає простий та безпечний спосіб проведення платежів у додатках iOS, watchOS та сайтах Safari. Використовуючи Face ID, Touch ID або двічі клацнувши Apple Watch, користувачі можуть швидко та безпечно передавати свої платіжні дані для оплати.

Оплата з платіжної сторінки Easypay


При такому способі підключення немає потреби у додаткових інтеграціях. Кнопка Apple Pay буде відображена на сторінці оплати EasyPay

Оплата ApplePay з додатку


Вимоги:
  1. Необхідно мати акаунт у Apple Developer, в який потрібно зареєструвати індивідуальний Merchant ID.
  2. Необхідно дотримуватися вимоги до брендування.


Реєстрація та перевірка в системі Apple Pay

  1. Зареєструйте MerchantID та надішліть до EasyPay:
    1. Увійдіть до свого облікового запису Apple Developer Account.
    2. Перейдіть до розділу «Certificates, Identifiers & Profiles».
    3. У розділі "Identifiers" виберіть "Merchant IDs".
    4. Додайте новий Merchant ID, натиснувши на "+" у верхньому правому куті екрана.
    5. Заповніть поля * і натисніть «Continue».
    6. Натисніть Register, щоб підтвердити введені дані.
    7. Повідомте EasyPay ваш MerchantID.

Примітка: * - Description – опис; Identifier – домен вашого сайту у зворотному порядку, з додаванням «merchant» на початку (наприклад, сайт shop.ua, Identifier – merchant.ua.shop).

  1. Отримайте від EasyPay сформований CSR-файл, який буде необхідний для подальших кроків.
  2. Сформуйте Apple Pay Payment Processing Certificate та надішліть до EasyPay:
    1. Увійдіть до свого облікового запису Apple Developer Account.
    2. Перейдіть до розділу «Certificates, Identifiers & Profiles».
    3. У розділі "Identifiers" виберіть "Merchant IDs".
    4. Виберіть створений вами Merchant ID та натисніть «Edit».
    5. У розділі Apple Pay Payment Processing Certificate, натисніть "Create Certificate".
    6. На наступному екрані натисніть Continue.
    7. Візьміть отриманий від EasyPay CSR-файл і завантажте його на сайт, натиснувши Choose File, а потім Continue.
    8. Завантажте згенерований сертифікат.
    9. Надішліть сертифікат (файл apple_pay.cer) до EasyPay

Технічна інтеграція з ApplePay

  1. Щоб інтегрувати Apple Pay у мобільний додаток, дотримуйтесь інструкцій за посиланням: https://developer.apple.com/documentation/passkit/apple_pay.


Приклад відповіді ApplePay
{
 "paymentData":
  {
    "version":"EC_v1",    "data":"FDXK/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ/dGK9UZDP/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp/clv4",    "signature":"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=",
    "header":
    {      "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==",
      "publicKeyHash":"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=",
      "transactionId":"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4"
    }
  },
  "paymentMethod":
  {
    "displayName":"MasterCard 5179",
    "network":"MasterCard",
    "type":"debit"
  },  "transactionIdentifier":"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4"
}
2. Надішліть paymentData в поле userPaymentInstrument / token в Easypay (Створення замовлення). Приклад запиту createOrder:
{
  "order":{
    "serviceKey":"MERCHANT-TEST",
    "orderId":"test_20210309-171148",
    "description":"Test payment",
    "amount":"1"
  },
  "userPaymentInstrument":{
    "instrumentType":"ApplePay",
    "token":"{\"paymentData\": {\"version\":\"EC_v1\",  \"data\":\"FDXK\/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8\/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV\/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ\/dGK9UZDP\/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp\/clv4\",  \"signature\":\"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB\/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=\",\"header\":{  \"ephemeralPublicKey\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo\/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==\", \"publicKeyHash\":\"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=\",\"transactionId\":\"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4\"}  },  \"paymentMethod\":  {   \"displayName\":\"MasterCard 5179\",\"network\":\"MasterCard\",\"type\":\"debit\"  },  \"transactionIdentifier\":\"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4\"}",
    "gatewayMerchantId":"{ApplePayMerchantId}"
  }
}

Оплата із сайту


Вимоги:
  1. Необхідно мати акаунт у Apple Developer, до якого потрібно зареєструвати індивідуальний Merchant ID.
  2. Необхідно дотримуватися вимог до брендування.

Реєстрація та перевірка в системі Apple Pay

  1. Зареєструйте MerchantID та надішліть до EasyPay:
    1. Увійдіть до свого облікового запису Apple Developer Account.
    2. Перейдіть до розділу «Certificates, Identifiers & Profiles».
    3. У розділі "Identifiers" виберіть "Merchant IDs".
    4. Додайте новий Merchant ID, натиснувши на "+" у верхньому правому куті екрана.
    5. Заповніть поля * і натисніть «Continue».
    6. Натисніть Register, щоб підтвердити введені дані.
    7. Повідомте EasyPay ваш MerchantID.


Примітка: * - Description – опис; Identifier – домен вашого сайту у зворотному порядку, з додаванням «merchant» на початку (наприклад, сайт shop.ua, Identifier – merchant.ua.shop).


  1. Отримайте від EasyPay сформований CSR-файл, який буде необхідний для подальших кроків.
  2. Сформуйте Apple Pay Payment Processing Certificate та надішліть до EasyPay:
    1. Увійдіть до свого облікового запису Apple Developer Account.
    2. Перейдіть до розділу «Certificates, Identifiers & Profiles».
    3. У розділі "Identifiers" виберіть "Merchant IDs".
    4. Виберіть створений вами Merchant ID та натисніть «Edit».
    5. У розділі Apple Pay Payment Processing Certificate, натисніть "Create Certificate".
    6. На наступному екрані натисніть Continue.
    7. Візьміть отриманий від EasyPay CSR-файл і завантажте його на сайт, натиснувши Choose File, а потім Continue.
    8. Завантажте згенерований сертифікат.
    9. Надішліть сертифікат (файл apple_pay.cer) до EasyPay
  3. Зареєструйте та підтвердіть свій домен:
    1. Увійдіть до свого облікового запису Apple Developer Account.
    2. Перейдіть до розділу «Certificates, Identifiers & Profiles».
    3. У розділі "Identifiers" виберіть "Merchant IDs".
    4. Виберіть створений вами Merchant ID та натисніть «Edit».
    5. У розділі "Merchant Domains" натисніть "Add Domain".
    6. Введіть ім'я домену та натисніть "Continue" *.
    7. Завантажте файл apple-developer-merchantid-domain-association.txt.
    8. Збережіть файл на сервері від Apple.
    9. Натисніть Verify.


Примітка: * - домен повинен підтримувати HTTPS.


  1. Створіть Apple Pay Merchant Identity Certificate:
    1. Увійдіть до свого облікового запису Apple Developer Account.
    2. Перейдіть до розділу «Certificates, Identifiers & Profiles».
    3. У розділі "Identifiers" виберіть "Merchant IDs".
    4. Виберіть створений вами Merchant ID та натисніть «Edit».
    5. У розділі Apple Pay Merchant Identity Certificate натисніть Create Certificate.
    6. Виконайте дії, описані на сайті Apple, а потім натисніть «Continue».
    7. Скопіюйте згенерований CSR-файл, вибравши Choose File, а потім Continue.
    8. Завантажте згенерований сертифікат (merchant_id.cer) і відкрийте його у програмі Keychain Access на комп'ютері Mac.
    9. У Keychain Access виберіть сертифікат, що імпортується, та експортувати його у формат .p12 (Personal Information Exchange).
    10. Виконайте команду: openssl pkcs12 -in merchant_id.p12 -out merchant_id.pem -nodes -clcerts
    11. Скопіюйте створений сертифікат у форматі PEM на сервер. Це буде потрібно для створення Apple Pay Payment Session в процесі перевірки магазину.


Технічна інтеграція з ApplePay

Для створення сертифікату (-ів) від Партнера потрібні:

  1. Country Name (2 letter code) [AU]: ?
  2. State or Province Name (full name) [Some-State]: ?
  3. Locality Name (eg, city) []: ?
  4. Organization Name (eg, company) [Internet Widgits Pty Ltd]: ?
  5. Organizational Unit Name (eg, section) []: ?
  6. Common Name (e.g. server FQDN or YOUR name) []:?
  7. Email Address []: ?

Повідомте, чи буде оплата тільки в додатку, або також і на WEB.

Щоб інтегрувати Apple Pay на сайт, дотримуйтесь інструкцій за посиланням

  1. Перевірте можливість оплати з Apple Pay. Виконується перевірка, підтримує або браузер оплату з Apple Pay, а також є у Wallet картку, якою можна оплачувати.
if (window.ApplePaySession) {
    var promise = ApplePaySession.canMakePaymentsWithActiveCard({YOUR_MERCHANT_ID});
    promise.then(function(canMakePayments) {
        if (canMakePayments)
    });
} else {
}
2. Сформуйте структуру платежу для сесії
document.getElementById("apple-pay-button").onclick = function(event) {
    var paymentRequest = {
        currencyCode: 'UAH',
        countryCode: 'UA',
        total: {
            label: {PRODUCT_NAME},
            amount: {PAYMENT_AMOUNT}
        },
        merchantCapabilities: ['supports3DS'],
        supportedNetworks: ['masterCard', 'visa']
    };

var session = new ApplePaySession(3, paymentRequest)

3. Відкрити платіжну сесію з Apple, отримати від них paymentData:

POST /api/applePay/validateSession

headers 

--header "Content-Type: application/json"
--header "AppId: cd7fde18-15db-4d94-a91b-7cf8edd81209" 
--header "PageId: 3e7bf353-417a-410c-a22e-df8bdcccb760"
--header "PartnerKey: easypay-test"
--header "locale: ua"

body
{
  "url": "https://apple-pay-gateway.apple.com/paymentservices/startSession",
  "merchantIdentifier": "string", /ідентифікатор мерчанту в Apple/
  "displayName": "test", /ідентифікатор магазина/послуги/товару (латиниці) ; буде відображатися в toolBar/
  "initiative": "web", /Канал оплати/
  "initiativeContext": "string" /Доменне ім’я, Доменное имя, пов'язане із сертифікатом Apple Identity/
}

*response з цього методу передається в сесію Apple, після чого при успішній авторизації платежу, повернеться до необхідний для завершення платежу.

4. Приклад відповіді ApplePay
{
 "paymentData":
  {
    "version":"EC_v1",    "data":"FDXK/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ/dGK9UZDP/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp/clv4",    "signature":"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=",
    "header":
    {      "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==",
      "publicKeyHash":"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=",
      "transactionId":"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4"
    }
  },
  "paymentMethod":
  {
    "displayName":"MasterCard 5179",
    "network":"MasterCard",
    "type":"debit"
  },  "transactionIdentifier":"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4"
}
5. Надішліть paymentData в поле userPaymentInstrument / token в Easypay (Створення замовлення). Перед цим потрібно викликати метод EasyPayApi CreateApp. Приклад запиту  createOrder:
{
  "order":{
    "serviceKey":"MERCHANT-TEST",
    "orderId":"test_20210309-171148",
    "description":"Test payment",
    "amount":"1"
  },
  "userPaymentInstrument":{
    "instrumentType":"ApplePay",
    "token":"{\"paymentData\": {\"version\":\"EC_v1\",  \"data\":\"FDXK\/fkIXGh07D5QU5eUK3ZK8BxKk6syu+Hf0DH6DBZ8\/loNHFWHULxsmfIAyaKzvkUjm2dHaR36pS4x8UXuQ3JhzeB7AfDmZsP8JcL16OOyZKZP3JjOwdkUVvzUyPWtjtlrtXDaBmJ5jPcT8bgnLZV\/7RcC9HpRkdmUqVyJ042wAvPNxF7SVt57PcMyMeccVL6yWUk6N2oV7ESFoGVbAeJdpn5zZT8lebigrnhZRhvwoJ5ZJ\/dGK9UZDP\/swhH8nMLjK620Wu9rvidhsSheJCwM2sCH27fKpeEO2x+vWaLlL9ukwDms9ciOGvSyb+tDvRD9MheecGri1XCC6DxQT5JkHDH7mi1vev0QFjjVY6bmh26iNC0lIB4FKVznNv03yjkKNJhEMbp\/clv4\",  \"signature\":\"UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuYXBwbGUuY29tL2FwcGxlcm9vdGNhZzMuY3JsMA4GA1UdDwEB\/wQEAwIBBjAQBgoqhkJvjg3qQ0QAAAAAAAA=\",\"header\":{  \"ephemeralPublicKey\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXaMJN7PRXhkoMa1n1wOnut4KIkIX0WuyXenzRukdDUzo\/GZ+TRqTSPjZDOPoZkisqifaroXUJZP9xCUlJQ3iqQ==\", \"publicKeyHash\":\"48145ri0BI4zYNGguvfW+7qJc3kQlcGdil64a4cg+Ag=\",\"transactionId\":\"cd80b9fc31c9a850c14c697bd4c258aa51e63bf72bba46394eebbc3fae1b58e4\"}  },  \"paymentMethod\":  {   \"displayName\":\"MasterCard 5179\",\"network\":\"MasterCard\",\"type\":\"debit\"  },  \"transactionIdentifier\":\"CD80B9FC31C9A850C14C697BD4C258AA51E63BF72BBA46394EEBBC3FAE1B58E4\"}",
    "gatewayMerchantId":"{YOUR_MERCHANT_ID}"
  }
}

Інтеграція з GooglePay


Вимоги
  1. Ваш сайт повинен працювати за схемою HTTPS та підтримувати протокол TLS 1.2.
  2. Потрібно погодитися з умовами надання  послуг GooglePay.
  3. Необхідно укласти договір із Easypay.ua.

Google Pay™  - це миттєвий спосіб оплати від Google, який дозволяє просто та швидко сплатити карткою, без необхідності вводити дані для кожного платежу. Ці картки надійно зберігаються в Google. Даний метод доступний для оплати в мобільних програмах на будь-яких пристроях Android і при здійсненні платежу в браузері Chrome.

Документація

  1. Для додатків
  2. Для веб-сайтів

Вимоги щодо брендування

  1. Для додатків
  2. Для веб-сайтів


Оплата з платіжної сторінки Easypay


При такому способі підключення немає потреби у додаткових інтеграціях. Кнопка GooglePay відображається на сторінці оплати EasyPay.

Отримання токена GooglePay для оплати


*Використовуйте бойове середовище GooglePay для отримання PaymentData

Для отримання PaymentData. Як параметри скрипта вкажіть:

  1. Доступні методи платежу: var allowedPaymentMethods = ['CARD', 'TOKENIZED_CARD'];
  2. Тип токенізації- PAYMENT_GATEWAY: tokenizationType: 'PAYMENT_GATEWAY';
  3. Параметр gateway: easypay;
  4. Параметр gatewayMerchantId: Ваш бойовий merchantAccount от Google, який повідомляє в EasyPay.

Якщо з вашого боку інтеграція виконана правильно, Ви на своєму сайті/додатку отримаєте кнопку

Після натискання кнопки на пристрої з підключеним Google Pay з'явиться спливаюче вікно або форма вибору прив'язаної картки.

Приклад відповіді від GooglePay Api
{
    "apiVersionMinor":0,
    "apiVersion":2,
    "paymentMethodData":{
        "description":"Mastercard  •••• 1164",
        "tokenizationData":{
            "type":"PAYMENT_GATEWAY",
"token":"{"signature":"MEUCeretMPEQPUMnvMOnDAgZsOLVnFnfjmo5ALe/1D6o7hdzAiEA94L1GfNWW84kbUdHHn+l6B6n18VgIA3sdkPqKL36tqk\u003d","intermediateSigningKey":{"signedKey":"{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEem3biYxltOBuMV+Dd9g+ZhV3VEzP2vAlFXvb9tJoYGLtetxDYWTUqnXPvKGDeAnSNrkPo8hu5kLtxN0QXCYkqQ\\u003d\\u003d\",\"keyExpiration\":\"1551385212256\"}","signatures":["MEYCIQD/TWKunZJhG/u3iL2H5P3i9r0rCbpw1/+z9dr/yGytvwIhAPfV2zF5cqP/L+42W+JKv6fgQKBEc67HTtfderefdghJ"]},"protocolVersion":"ECv2","signedMessage":"{\"encryptedMessage\":\"OidSptk8w+I3FnR1VFmiVswXaZ7ADnmMP1MQelp6GSg0/3aVpAXeLRH/fT1wN7gpxNPy7tFITeQenrJm3QG19tAPuVhcAVM26DMU6LAmZPyPXALktpnYrUj6etCjvWWM/1LkhjDBSjtkmpWRiHIyqj5aud/j8rxFEk06GhwqPWbnJwdCgNf32LJP7bSpUWvHOioaZIV1vdeV6d7iQ6EDWWAS/z9pXWkqpW//M/TVTrcKFXh4C2TI2O+qyBD9VzK3TqU6wS5VsYL69W9/4xzV5L5irpp/wzNfPHkJd8QIwcsIPuNWBtGm3v+JCaqIA3oK9Sw/5o/gZp/pnOhUdax0VjGEvmbGXs2+ufBChCkh+/BpobbpzVS9T/DZSlUO2FLANMjSaEQzh74ymtDgP4x9O64RAdySW+V7lVZMa7FVZ3PFnTfa8W89pzIgo6ocSGHQPBFnExTmSbDpUU0L12wzHkAcZSyngPAljqg\\u003d\",\"ephemeralPublicKey\":\"BBKgbSbykNy1111QYRmGJEhnCorkt+VoDYlYbAlg0a5WO2uV/M50XqOSG0uxWAvUqrZolQuEX6yZ+dvvufLEZtI\\u003d\",\"tag\":\"p9ItvOfsQVTzhTPHq6ycYjKX1TtozP/yym4QWWVRVCk\\u003d\"}"}"
        },
        "type":"CARD",
        "info":{
            "cardNetwork":"MASTERCARD",
            "cardDetails":"1164",
            "billingAddress":{
                "phoneNumber":"+380 93 000 00 11",
                "address3":"",
                "sortingCode":"",
                "address2":"",
                "countryCode":"UA",
                "address1":"ул. ",
                "postalCode":"49107",
                "name":"Super 1",
                "locality":"Київ",
                "administrativeArea":"Київська область"
            }
        }
    },
    "email":"test@easypay.ua"
}

Передача токена для оплати

Надішліть дані з поля token з відповіді від GooglePay Api у поле userPaymentInstrument/token у Easypay (розділ Створення замовлення)

Перед цим потрібно викликати метод EasyPayApi createApp.

Приклад запиту

POST /api/merchant/createOrder

{
  "order":{
    "serviceKey":"MERCHANT-TEST",
    "orderId":"test_20210000-171148",
    "description":"Test payment",
    "amount":"1"
  },
  "userPaymentInstrument":{
    "instrumentType":"GooglePay",
"token":"{\"signature\":\"MEQCIFTFadYw15Cqfk7+YiM9pp5zEvyTI7oWVZCNFKr1cMthAiAFMv+nt0PWOEhj6LmmMNTByP9E4OhGrSoE7rDvzLDIZw\\u003d\\u003d\",\"intermediateSigningKey\":{\"signedKey\":\"{\\\"keyValue\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsrkMsOBN8N0xL8AsTVUIETODhCva5PpGFxvPm56pWmI5MG2HKKHXjsdhdvcP6N3d40x90E0rZzDrxBC2ywERXg\\\\u003d\\\\u003d\\\",\\\"keyExpiration\\\":\\\"1618591579000\\\"}\",\"signatures\":[\"MEUCIHX0SawuKctPUEjdFu2sDiE81aSSdf8i0KNvdg1dlsWoAiEAye8TEWpPk4sp7EjTovN7DichK6YxY1DajYN9/ArHDYI\\u003d\"]},\"protocolVersion\":\"ECv2\",\"signedMessage\":\"{\\\"encryptedMessage\\\":\\\"vlLmhIBndM4a/GWFsvbFZrZOygjAwUao/NlvlJlhAQ3kdprI3gubAcQxAau8L74dkzGJh8w7AD2E77XOHycdwG91NUvsJ0xiXuMCXHJ9NPMhp7k49OUIJjOpJG+RqUM9/SPBgx69eDD7skhG+axZYr/m36LFjIlk5WhmumQgIrfojm02uRm0nOcZ2wbvrwQKZyL1IeTv/txqcYMuQqYWzs/FPkIEbiQ80z6dRhVszrEXcHLKcfBmNmcn/Vk90ArXCotOD52V0JS/Q+Mf9mCoe9G2bABo9R9PAYT/FrKIEOQEhzLCI7m4/vyIlCMf69d6PjigP3AOGxykbS0Kvsxqoh+HYRFCSLCd+8O2Us2wCYD09/OBqcQi78/fs2vwyg4nrWQQJ6ZGwTKHHxVRY8VGAUUnMFr18HPsN1BQNuz08M4t6Qx6X0nEZ3hseSIcUMVcBm+NyvL2T/XSWqTh2poDuQ4B+UJ59gMrsPapzouxk2iC/+vS1Bs/2sSf77Nsqr7BhE7SMgnZ/a2LF+Shx2aOKSIGflMz+MjVSzpMg2AUh43pbcsi8g\\\\u003d\\\\u003d\\\",\\\"ephemeralPublicKey\\\":\\\"BDJpYzoN9XPVKrHIxwNes83HbR0/AOUPpQgAwi3fTzR+TIB8/VAc9CdI9guWX8Pjvii/T+WxwcByuo9pzJC7518\\\\u003d\\\",\\\"tag\\\":\\\"LFOOTwd5Crtn60KnT0J6MHuFlGE0+EYL3D7IrWrPsRA\\\\u003d\\\"}\"}",
  }
}

Створення підпису


Формування підпису Sign (основний варіант для POST – запитів)
Sign = base64(sha256(secretKey + requestBody))
Де:
  • secretKey – секретний ключ.
  • requestBody – тіло запиту у форматі JSON (ідентичне формату EasyPay).


Приклади коду


C#

Convert.ToBase64String(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(data)))

PHP

base64_encode(hash('sha256', ($secretKey.$requestbody), true))


Можливі варіанти інструментів оплати


Оплата VISA MasterCarD
"paymentInstrumentsTypes": [
       {
           "storedCards": [],
           "instrumentType": "Card",
           "commission": 2.00,
           "amountMin": 0.01,
           "amountMax": 14000.00,
           "userPaymentInstruments": [
               {
                   "instrumentId": 4211698,
                   "instrumentType": "Card",
                   "instrumentValue": null,
                   "alias": null,
                   "commission": 2.00,
                   "loyaltyCommission": null,
                   "actionsKeys": null,
                   "priorityIndex": 200,
                   "additionalParams": {}
               }
           ]
  ]
       },
       {
           "instrumentType": "RCard",
           "commission": 2.00,
           "amountMin": 0.01,
           "amountMax": 14000.00,
           "userPaymentInstruments": []
       },
Мобільні гроші  КиївстарLifecellVodafone
 {
           "instrumentType": "KSMoney",
           "commission": 0.0,
           "amountMin": 0.01,
           "amountMax": 14000.00,
           "userPaymentInstruments": [
               {
                   "instrumentId": 4958975,
                   "instrumentType": "KSMoney",
                   "instrumentValue": null,
                   "alias": null,
                   "commission": 0.0,
                   "loyaltyCommission": null,
                   "actionsKeys": null,
                   "priorityIndex": 1,
                   "additionalParams": {}
               }
           ]
       },
       {
           "instrumentType": "LifeMoney",
           "commission": 0.03,
           "amountMin": 0.01,
           "amountMax": 6000.00,
           "userPaymentInstruments": [
               {
                   "instrumentId": 5098216,
                   "instrumentType": "LifeMoney",
                   "instrumentValue": null,
                   "alias": null,
                   "commission": 0.03,
                   "loyaltyCommission": null,
                   "actionsKeys": null,
                   "priorityIndex": 0,
                   "additionalParams": {}
               }
           ]
Картки лояльності Fishka
 ]
       },
       {
           "instrumentType": "FishkaB2B",
           "commission": 2.00,
           "amountMin": 0.01,
           "amountMax": 1000.00,
           "userPaymentInstruments": []
       },
       {
           "instrumentType": "FishkaB2C",
           "commission": 2.00,
           "amountMin": 0.01,
           "amountMax": 1000.00,
           "userPaymentInstruments": []
       },
Оплата ApplePay GPAY
 {
           "instrumentType": "ApplePay",
           "commission": 2.00,
           "amountMin": 0.01,
           "amountMax": 9999.00,
           "userPaymentInstruments": [
               {
                   "instrumentId": 10958126,
                   "instrumentType": "ApplePay",
                   "instrumentValue": null,
                   "alias": null,
                   "commission": 2.00,
                   "loyaltyCommission": null,
                   "actionsKeys": null,
                   "priorityIndex": 0,
                   "additionalParams": {}
               }
           ]
       },
       {
           "instrumentType": "GooglePay",
           "commission": 2.00,
           "amountMin": 0.01,
           "amountMax": 9999.00,
           "userPaymentInstruments": [
               {
                   "instrumentId": 10958137,
                   "instrumentType": "GooglePay",
                   "instrumentValue": null,
                   "alias": null,
                   "commission": 2.00,
                   "loyaltyCommission": null,
                   "actionsKeys": null,
                   "priorityIndex": 0,
                   "additionalParams": 
                    {
                       "PublicKey": "BKdzipvJvJzcbTMm3dO0LEh1AXFr8qfSiPjwrI7vv9F6hqhDJB1M="
                    }
               }
           ]
       }
   ]

Управління інструментами оплати


Управління інструментами оплати на сторінці оплати EasyPay здійснюється при створенні замовлення. Параметр allowedInstruments визначає, які інструменти оплати будуть відображатися на сторінці платіжного шлюзу.


 "userInfo": { 
      "phone": "string"
   },

Обов'язкові параметри:
    "order": {
      "serviceKey": "string",
      "orderId": "string",
      "description": "string",
      "amount":1.01, (decimal)
"allowedInstruments": [ "string" ]
Опис параметрів
Параметр Характеристика Коментарій
allowedInstruments параметр в якому передаються інструменти оплати, які будуть відображені на сторінці Можливі значення:
  • RCard
  • Card
  • EBank
  • FishkaB2C
  • ApplePay
  • GooglePay


Поведінка системи

  1. Якщо параметр allowedInstruments не передано або він порожній: На сторінці оплати будуть відображені всі доступні інструменти, які підключені для партнера.
  2. Якщо з переданих інструментів немає доступних для оплати: Повертається помилка: PAYMENTINSTRUMENT_NOT_FOUND
  3. Приклад помилки: У разі, якщо у партнера активні ApplePay і Card, а в запиті передається GooglePay, повертається помилка PAYMENTINSTRUMENT_NOT_FOUND.
  4. Якщо передані доступні інструменти оплати: У разі, якщо партнер передає, наприклад, GooglePay та Card, але GooglePay не активний для цього партнера, система поверне посилання з активним інструментом Card.


Технічна підтримка


За потреби консультацій з питань реалізації API можна написати запит на [email protected]