|
|
Рядок 1: |
Рядок 1: |
| == Вступ ==
| |
| ----
| |
| # Партнер обов'язково вибирає 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>
| |
| <br>
| |
| "Merchant.UrlNotify" Параметр не може бути порожнім і має відповідати формату URL.
| |
| <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;">
| |
| ⚠️ <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>.
| |
| Повторення може продовжуватися визначену кількість разів (за замовчуванням – <strong>50 разів</strong>), поки не буде отримано статусу <span style="background-color: #EDEDED; padding: 2px 5px; border-radius: 4px; font-family: monospace; color: #198754;">"200 ОК"</span>.
| |
| </p>
| |
| '''Request'''<syntaxhighlight lang="json" line="1">
| |
| 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"
| |
| }
| |
| }
| |
|
| |
| </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)
| |
|
| |
| '''refund -''' про успішне скасування платежу (відправляється разово)
| |
| </td>
| |
| </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;">ІД партнера у системі 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>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>
| |
|
| |
| <!-- П'ятий рядок -->
| |
| <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;">статус платежу </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>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>
| |
|
| |
| <!-- Cьомий рядок-->
| |
| <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>
| |
|
| |
| <!-- Восьмий рядок->
| |
| <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>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>
| |
| </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>
| |
|
| |
| <!-- П'ятий рядок -->
| |
| <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>
| |
|
| |
| <!-- П'ятий рядок -->
| |
| <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>
| |
|
| |
| <!-- П'ятий рядок -->
| |
| <tr>
| |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">'''<code>DateTime</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;">якщо партнер не відповість статусом 200 на запит з action:payment, то в наступному запиті час буде новим</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;">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 не перевірено, всі фінансові ризики перекладаються на партнера.<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/reccurent/payment</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
| |
| {
| |
| "reccurentId": 0,
| |
| "amount": 0
| |
| }
| |
|
| |
|
|
| |
|
|
| |
|
| </syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
| |
| headers
| |
|
| |
| body
| |
| {
| |
| "reccurentId": 0,
| |
| "transactionId": 0,
| |
| "transactionStatus": "None",
| |
| "error": {
| |
| "errorCode": "string",
| |
| "title": "string",
| |
| "description": "string",
| |
| "errorMessage": "string",
| |
| "fieldErrors": [
| |
| {
| |
| "fieldName": "string",
| |
| "errorCode": "string",
| |
| "errorMessage": "string"
| |
| }
| |
| ]
| |
| }
| |
| }
| |
|
| |
| </syntaxhighlight>Також буде надіслано нотифікацію у разі успішного платежу. Створення рекурентного платежу на операцію, у структурі якої є спліт – не підтримується.
| |
|
| |
|
| <br>
| |
| ==== Отримання інформації про рекурентний платіж ==== | | ==== Отримання інформації про рекурентний платіж ==== |
| ---- | | ---- |
Рядок 316: |
Рядок 102: |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер рекуренту (reccurentId) </td></tr></table><br> | | <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">номер рекуренту (reccurentId) </td></tr></table><br> |
|
| |
|
| <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;"> | | <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: 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="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; color: #333333;">/api/merchant/reccurent/delete/{id}</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" |
| "PartnerKey": "partnerName" | | "PartnerKey": "partnerName" |
| "locale": "ua" | | "locale": "ua" |
Рядок 333: |
Рядок 118: |
|
| |
|
| body | | body |
| відсутній
| | { |
| | "reccurentId": 0, |
| | "amount": 0 |
| | } |
| | |
| | |
| | |
| </syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1"> | | </syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1"> |
| headers | | headers |
|
| |
|
| -
| | body |
| | { |
| | "reccurentId": 0, |
| | "transactionId": 0, |
| | "transactionStatus": "None", |
| | "error": { |
| | "errorCode": "string", |
| | "title": "string", |
| | "description": "string", |
| | "errorMessage": "string", |
| | "fieldErrors": [ |
| | { |
| | "fieldName": "string", |
| | "errorCode": "string", |
| | "errorMessage": "string" |
| | } |
| | ] |
| | } |
| | } |
| | |
| | </syntaxhighlight>Також буде надіслано нотифікацію у разі успішного платежу. Створення рекурентного платежу на операцію, у структурі якої є спліт – не підтримується. |
| | |
| | <br> |
| | |
|
| |
|
| body
| |
|
| |
|
| -
| |
| </syntaxhighlight>
| |
| <div style="width: 100%; display: flex; justify-content: space-between; gap: 16px; box-sizing: border-box; padding: 8px 0;"> | | <div style="width: 100%; display: flex; justify-content: space-between; gap: 16px; box-sizing: border-box; padding: 8px 0;"> |
|
| |
|
Отримання інформації про рекурентний платіж
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"
}
]
}
}
Також буде надіслано нотифікацію у разі успішного платежу. Створення рекурентного платежу на операцію, у структурі якої є спліт – не підтримується.