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

Матеріал з apidocs
Перейти до: навігація, пошук
Немає опису редагування
 
(Не показані 3 проміжні версії цього користувача)
Рядок 1: Рядок 1:
{{APINav}}
=== Повідомлення про платіж ===
----
# Партнер обов'язково вибирає 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 не перевірено, всі фінансові ризики перекладаються на партнера.




Рядок 150: Рядок 318:
</syntaxhighlight>Також буде надіслано нотифікацію у разі успішного платежу. Створення рекурентного платежу на операцію, у структурі якої є спліт – не підтримується.
</syntaxhighlight>Також буде надіслано нотифікацію у разі успішного платежу. Створення рекурентного платежу на операцію, у структурі якої є спліт – не підтримується.


==== Видалення рекурентного платежу ====
----
<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
"PartnerKey": "partnerName"
"locale": "ua"
"AppId": "a5806a5f-dbb8-496a-a23f-aab6d2fcbce1"
"PageId": "2ce7dba6-4600-456e-b9c8-f13cacf1c85d"
"Sign": "e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4="
body
відсутній
</syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
headers
-
body
-
</syntaxhighlight>
<br>
<br>



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

Merchant API

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

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

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


  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

-