Робота з токенізованими картами: відмінності між версіями

Матеріал з apidocs
Перейти до: навігація, пошук
Створена сторінка: == Вступ ==
 
Немає опису редагування
 
(Не показано 9 проміжних версій цього користувача)
Рядок 1: Рядок 1:
== Вступ ==
{{APINav}}
=== Токенізація карти ===
----Метод призначений для токенізації (збереження) картки для ідентифікатора користувача під конкретним торговцем.
 
===== Токенізація з передачею даних картки у запиті (заборонено без PCI:DSS сертифікації мерчанта) =====
----Перед викликом цього методу. Потрібно викликати один із методів:
 
'''-''' [[MerchantAPI#Реєстрація точки та створення сесії|CreateApp]]
 
'''-''' [[MerchantAPI#Створення сесії|CreatePage]] <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/tokenCard</span></p>
<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
{
  "phone": "380501002030ws",
  "pan": "4874120123567889",
  "expire": "1222",
  "cvv": "012",
  "vсode": "123654"
}
 
 
</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
headers
відсутній
 
body
{
  "activateCodeType": "code|amount",
  "cardGuid: "55F5118B-B695-43BA-8555-AF8B698C4D2C",
  "pan”: "48741201****1234",
  "expire”: "1222"
  "error": "null"
}
 
 
</syntaxhighlight>Токенізація картки - процес двоетапний.
 
На першому етапі у запиті йдуть параметри картки та номер телефону користувача. У відповіді, залежно від '''activateCodeType''', може бути активація за кодом підтвердження з виписки або SMS або за сумою списання.
 
З другого краю етапі до всіх параметрів додається ще vcode – код верифікації. При успішному відповіді прийдуть параметри токенізованої карти чи помилка.
 
===== Токенізація за допомогою введення даних картки користувачем на сторінці (сертифікація PCI:DSS не потрібна) =====
----Перед викликом цього методу, потрібно викликати один із методів: 
 
'''-''' [[MerchantAPI#Реєстрація точки та створення сесії|CreateApp]];
 
'''-''' [[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;">
    <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></p>
'''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
{
  "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"
}
 
</syntaxhighlight>
 
 
'''Response'''<syntaxhighlight lang="json" line="1">
headers
 
body
{
"forwardUrl": "https://easypay.ua/ua/tokencard/cae16afc-be56-4a39-8ce1-5de4f4142e76",
"error": null
}
 
</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;" |Параметр
! 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;" |'''<code>description</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>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;" |Параметр може набувати значення:
 
* true - проводити валідацію на наявність раніше створеного токена по цій карті;
* false - валідація відсутня;
* null - валідація відсутня;
 
 
Якщо параметру '''checkExistingToken''' присвоєно значення true, слід очікувати наступних сценаріїв поведінки:
 
* “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''' із запиту
 
* якщо є 1 або більше токенів - беремо останній з них, створюємо новий запис з цим токеном для переданого ідентифікатора клієнта '''(phone)''', відправляємо цей токен в callback у кореневому параметрі '''cardGuid'''
* якщо токенів немає - створюємо новий для цього '''phone''' і відправляємо його в callback в кореневому параметрі '''cardGuid''' (один і той же '''cardGuid''' може бути прив'язаний до різних phone)
 
* '''createToken''' - значення за замовчуванням, звичайне створення токена (можна не передавати)
* '''ExistingToken''' - поведінка аналогічна '''checkExistingToken:true'''
|}
'''На сторінці токенізації можемо керувати інтерфейсом (на стороні EasyPay):'''
* відображати/сховати логотип EasyPay
* відображати/приховати логотип та назву партнера
* відображати/приховати опис з деталями токенізації
* відображати опис у згорнутому/розгорнутому вигляді
 
'''Приклад callback - запит з IP адреси 93.183.196.26 після успішної токенізації:'''
 
'''Request'''<syntaxhighlight lang="json" line="1">
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"
}
 
 
</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;" |Параметр
! 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>'''
| 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>cardGuid</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>pan</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>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:'''
 
'''Request'''<syntaxhighlight lang="json" line="1">
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"
      }
  ]
}
 
</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;" |Параметр
! 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>existingTokens</code>'''
| style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;" |масив з даними раніше створених токенів по цій карті під даного партнера '''(partnerKey)'''
|}
 
 
 
===== Отримання списку токенізованих карт =====
----Метод призначений для отримання списку токенізованих карток за номером телефону (ознакою) користувача.
<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
 
'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
</syntaxhighlight>'''Response''' <syntaxhighlight lang="json" line="1">
headers
відсутній
 
body
{
  "tokenCards": [
  {
    "cardGuid": "55F5118B-B695-43BA-8555-AF8B698C4D2C",
    "pan": "48741234****1234",
    "expire”: "1222"
  }],
  "error": "null"
}
 
</syntaxhighlight>Якщо передати тільки ідентифікатор клієнта (параметр phone) - у відповіді будуть всі карти поточного клієнта. Якщо передати <code>phone</code> та <code>cardGuid</code> - у відповіді буде одна карта поточного клієнта.
 
<br>
 
===== Видалення токенізованих карт =====
----Метод призначений для видалення токенізованих карток за номером телефону. Якщо у клієнта під одним номером кілька карток, всі картки будуть видалені.
<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>
 
 
<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
 
'PartnerKey: partnerName'
'locale: ua'
'AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1'
'PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d'
'TimeStamp: 1554360173'
'Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4='
 
queryparams
 
cardGuid= Guid
 
 
</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>Перед викликом цього методу потрібно викликати один із методів:
 
* [[MerchantAPI#Реєстрація точки та створення сесії|CreateAPP]]
* [[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
{
  "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"
  }
}
 
 
</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
headers
відсутній
 
body
{
"redirectUrl": null,
"action": null,
"paymentState": "Confirmed",
"status": "Done",
"actionType": "UrlRedirect",
"transactionId": "766934634",
"retrievalReferenceNo": "null",
"responseItems": "null",
"error": "null"
}
 
</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;" |Параметр
! 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;" |У об'єкти поля передається інформація для поповнення карти. Номер картки можна вказувати:
 
* для випадку з PCI DSS сертифікацією: у відкритому вигляді
 
'''<code>"fieldName":"Pan",</code>'''
 
'''<code>"fieldValue":"4102321200001111",</code>'''
 
* для випадку без PCI DSS сертифікації: у вигляді токена (як отримати токен картки - див. [[MerchantAPI#Токенізація карти|Токенізація карти]]):
 
'''<code>"fieldName":"Pan",</code>'''
 
'''<code>"fieldKey":"b95d541a-c11f-49bc-9042-295dbf74ccn6"</code>'''
 
Також потрібно вказати:
 
- номер телефону клієнта:
 
'''<code>"fieldName":"Phone",</code>'''
 
'''<code>"fieldValue":"38093520000"</code>'''
 
-  ПІБ та адреса клієнта АБО ПІБ та ІПН клієнта:
 
'''<code>"additionalItems": {</code>'''
 
'''<code>      "Merchant.ClientFullName": "Іванов Петро Сергійович"</code>'''
 
'''<code>                  "Merchant.Address": "04080, Київ, вул.Межигірська 82а корп.Б, кв.32"</code>'''
 
'''<code>      "Merchant.Inn": "3334445862"</code>'''
 
'''<code>        }</code>'''
|}
 
 
'''Статус видачі кредиту:'''
 
* Якщо у відповіді отримано кінцевий статус <code>(paymentState = Confirmed / Rejected / Refunded)</code> - необхідно присвоїти його платежу.
* Якщо кінцевий статус у відповіді не отримано <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>
 
 
Response (Приклади відповідей при помилках: status code = 400)<syntaxhighlight lang="json" line="1">
{
    "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": []
    }
}
 
</syntaxhighlight>
 
===== Нотифікації (колбеки) щодо операцій поповнення карток =====
Дані колбеки є опціональним (додатковим) способом отримання інформації від EasyPay про результат виконання запиту на поповнення картки.
 
Для активації отримання колбеків мерчант (партнер) повинен повідомити EasyPay про таку необхідність, після чого EasyPay включає цю опцію.
 
Спосіб відправки колбека - '''HTTP - з IP 93.183.196.26''' буде надіслано '''POST''' запит з інформацією про платіж на вказаний <code>urlNotify</code>.
 
<code>urlNotify</code> прописується на стороні EasyPay і використовується за замовчуванням, якщо партнер не передав його у своєму запиті.
 
URL для повідомлень ('''UrlNotify''') повідомляє партнер (мерчант).
 
Партнер може передавати '''UrlNotify''' у запиті '''createOrder''' у параметрі:
 
<code>"order":{</code>
 
<code>"additionalItems":{</code>
 
<code>"Merchant.UrlNotify":"<nowiki>https://notify.url</nowiki>"</code>
 
<code>}</code>
 
<code>}</code>
 
"Merchant.UrlNotify" параметр не може бути порожнім і повинен відповідати формату URL.
 
Якщо у відповідь не отримано HTTP StatusCode 200 - запит нотифі буде надіслано повторно, доки не отримано статусу “200 ОК”.
 
Коли нотифікацію (колбек) успішно доставлено (отримано статус 200 ОК), повторне відправлення колбеків припиняється.
 
Відправлення колбеків можливе за двома сценаріями:
 
1) лише за успішними операціями (транзакціями);
 
2) за операціями (транзакціями) у фінальному статусі (успішні та відхилені).
 
Надання фінального статусу операції (транзакції) асинхронно з процесом відправки колбека (фінансова транзакція набуває фінального статусу незалежно від статусу прийняття колбека партнером).
 
'''Request''' <syntaxhighlight lang="markdown" line="1">
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",
  }
}
 
</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>
 
 
Необхідно перевіряти підпис у нашому HTTP notify, налаштувати прийом лише для наших IP 93.183.196.26.
 
 
<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>Важливо!</strong> У випадку, якщо підпис <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #D63384;">notify</span> не перевірено, всі фінансові ризики перекладаються на партнера.
</p>
 
<div style="width: 100%; display: flex; justify-content: space-between; gap: 16px; box-sizing: border-box; padding: 8px 0;">
 
  <!-- Ліва кнопка -->
  <div style="
    position: relative;
    flex: 1;
    min-width: 150px;
    background: rgba(135, 206, 250, 0.1);
    padding: 8px 14px;
    border-radius: 8px;
    border: 1px solid #007BFF;
    color: #007BFF;
    font-weight: bold;
    font-size: 1em; /* пропорційний розмір */
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    cursor: pointer;
  ">
<!-- Текст у кутку --><span style="position: absolute; top: 6px; left: 8px;">← Назад</span>
    <!-- Основний текст -->
<br>
<span>[[Основні запити та відповіді]]</span>
 
</div>
 
  <!-- Права кнопка -->
  <div style="
    position: relative;
    flex: 1;
    min-width: 150px;
    background: rgba(135, 206, 250, 0.1);
    padding: 8px 14px;
    border-radius: 8px;
    border: 1px solid #007BFF;
    color: #007BFF;
    font-weight: bold;
    font-size: 1em; /* пропорційний розмір */
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    cursor: pointer;
  ">
 
 
<span style="position: absolute; top: 6px; right: 8px;">Далі →</span>
    <!-- Основний текст -->
[[Інтеграція з ApplePay та GooglePay]]
  </div>
 
</div>

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

Merchant API

Головна сторінка

(Токенізація з передачею даних картки у запиті

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


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

Токенізація з передачею даних картки у запиті (заборонено без 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 не перевірено, всі фінансові ризики перекладаються на партнера.