|
|
Рядок 53: |
Рядок 53: |
| <br> | | <br> |
|
| |
|
| == Створення сесії ==
| |
| ==== Створення сесії ==== | | ==== Створення сесії ==== |
| ----Даний метод створює новий екземпляр сеансу для користувача , <code>PageId</code>. | | ----Даний метод створює новий екземпляр сеансу для користувача , <code>PageId</code>. |
Рядок 103: |
Рядок 102: |
| </tr> | | </tr> |
| </table> | | </table> |
| <br> | | <br><!-- Перший рядок - заголовок --><!-- Другий рядок --><!-- Третій рядок --><!-- Четвертий рядок --><!-- П'ятий рядок --> |
| | |
| == Створення замовлення ==
| |
| ==== Створення замовлення для холдованих платежів ====
| |
| Перед використанням методу потрібне додаткове налаштування терміналів зі сторони техпідтримкиEasyPay.
| |
| | |
| Перед викликом цього методу потрібно викликати один із методів:
| |
| | |
| '''[[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="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/createOrder</span>
| |
| </p>'''REQUEST HEADERS'''<syntaxhighlight lang="http">
| |
| PartnerKey: partnerName
| |
| locale: ua
| |
| AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1
| |
| PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d
| |
| Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4=
| |
| </syntaxhighlight>'''REQUEST BODY'''<syntaxhighlight lang="json">
| |
| {
| |
| "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"
| |
| }
| |
| }
| |
| | |
| </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>serviceKey</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>orderId</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>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>
| |
| | |
| | |
| '''Необов'язкові параметри'''
| |
| <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>expire</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;">Після закінчення вказаного часу замовлення оплатити неможливо. При ненульовому значенні на платіжній сторінці відображатиметься таймер. Значення повинне перевищувати поточний час щонайменше на 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>"PayerPhone" : "380930007603"</code>
| |
| <code>},</code>
| |
| | |
| * де PayerEmail — емейл клієнта для сповіщення у разі неоплаченого замовлення та автоматичної підстановки на платіжній сторінці.
| |
| | |
| * PayerPhone — номер телефону для надсилання повідомлення (SMS або Viber) про неоплачене замовлення (через 15–20 хвилин після виклику CreateOrder).</td><tr>
| |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">URLs </td>
| |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">URL сторінки успішної оплати для редиректу клієнта. </td>
| |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">failed — URL сторінки помилки для редиректу клієнта.
| |
| приклад параметрів, що передаються на url.success (без errorCode) і
| |
| | |
| <code>url.failed: ?serviceKey=merchanttest-5310&orderId=re9r9er94jr&amount=1.20&description=Тестове+описання+</code>
| |
| | |
| <code>замовлення&transactionId=722443797&date=2019-06-11T14:49:07&recurrentId=&errorCode=PAYMENT_ALFABANK_-2006&sign=</code>
| |
| | |
| <code>eYkFYixpB3wnKoZDzkAiqWgdMkeHETDWmDsFMCaPO44=</code>
| |
| </td>
| |
| </tr></table>
| |
| | |
| | |
| '''RESPONSE''' <syntaxhighlight lang="json">
| |
| 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
| |
| }
| |
| | |
| </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>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; 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>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>
| |
| <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; text-align: left;"></td>
| |
| | |
| </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;">список інструментів оплати. Інструмент '''RCard''' надається лише користувачам, які авторизовані в системі EasyPay.
| |
| Можливі значення '''instrumentType''' </td>
| |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
| |
| Можливі значення '''instrumentType:'''
| |
| * Card – платіжна картка
| |
| * RCard – платіжна картка, підв'язана в системі EasyPay
| |
| </td>
| |
| </tr></table>
| |
| | |
| | |
| Холдування платежу можна здійснити, оплативши замовлення на сторінці оплати (перейти за '''forwardUrl'''), або вказавши в запиті '''createOrder''' інструмент оплати у '''userPaymentInstrument''' (див. [[MerchantAPI#Створення замовлення|Створення замовлення]]).
| |
| | |
| Клієнту відобразиться сторінка успішного платежу EasyPay, або сторінка, вказана в “urls”:{}.
| |
| | |
| | |
| Після '''спроби холдування платежу''' партнеру буде відправлено '''сповіщення''', згідно з варіантом, вказаним в налаштуваннях сервісу [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]].
| |
| | |
| | |
| Статус платежу необхідно перевірити методом '''[[MerchantAPI#Перевірка статусу платежу|orderState]]'''
| |
|
| |
| | |
| | |
| Після успішного холдування необхідно викликати або '''[[MerchantAPI#Розхолдування платежу|unHoldOrder]]''' , або '''[[MerchantAPI#Скасування платежу|orderCancel]]'''
| |
| | |
| Якщо протягом '''повних 10 днів''' після холдування жоден з цих методів не буде викликаний, на '''11-й день близько 05:00''' платіж може бути '''відхилений емітентом''', і кошти стануть доступні клієнту.
| |
| | |
| | |
| | |
| У транзакцію додається коментар: ''Автоматично відхилено через 10 днів. (SYSTEM ACCOUNT [dateTime])''
| |
| | |
| Сповіщення партнеру при цьому '''не надсилається'''.
| |
| | |
| == Створення замовлення для холдованих платежів ==
| |
| ==== Створення замовлення для холдованих платежів ====
| |
| Перед використанням методу потрібне додаткове налаштування терміналів зі сторони техпідтримкиEasyPay.
| |
| | |
| Перед викликом цього методу потрібно викликати один із методів:
| |
| | |
| '''[[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="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/merchant/createOrder</span>
| |
| </p>'''REQUEST HEADERS'''<syntaxhighlight lang="http">
| |
| PartnerKey: partnerName
| |
| locale: ua
| |
| AppId: a5806a5f-dbb8-496a-a23f-aab6d2fcbce1
| |
| PageId: 2ce7dba6-4600-456e-b9c8-f13cacf1c85d
| |
| Sign: e0v1vIOMyNt2qSmrG5+sjAq8wOhvgDDUEyfVP21mRU4=
| |
| </syntaxhighlight>'''REQUEST BODY'''<syntaxhighlight lang="json">
| |
| {
| |
| "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"
| |
| }
| |
| }
| |
| | |
| </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>serviceKey</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>orderId</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>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>
| |
| | |
| | |
| '''Необов'язкові параметри'''
| |
| <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>expire</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;">Після закінчення вказаного часу замовлення оплатити неможливо. При ненульовому значенні на платіжній сторінці відображатиметься таймер. Значення повинне перевищувати поточний час щонайменше на 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>"PayerPhone" : "380930007603"</code>
| |
| <code>},</code>
| |
| | |
| * де PayerEmail — емейл клієнта для сповіщення у разі неоплаченого замовлення та автоматичної підстановки на платіжній сторінці.
| |
| | |
| * PayerPhone — номер телефону для надсилання повідомлення (SMS або Viber) про неоплачене замовлення (через 15–20 хвилин після виклику CreateOrder).</td><tr>
| |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">URLs </td>
| |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; padding-right: 10px; text-align: left;">URL сторінки успішної оплати для редиректу клієнта. </td>
| |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">failed — URL сторінки помилки для редиректу клієнта.
| |
| приклад параметрів, що передаються на url.success (без errorCode) і
| |
| | |
| <code>url.failed: ?serviceKey=merchanttest-5310&orderId=re9r9er94jr&amount=1.20&description=Тестове+описання+</code>
| |
| | |
| <code>замовлення&transactionId=722443797&date=2019-06-11T14:49:07&recurrentId=&errorCode=PAYMENT_ALFABANK_-2006&sign=</code>
| |
| | |
| <code>eYkFYixpB3wnKoZDzkAiqWgdMkeHETDWmDsFMCaPO44=</code>
| |
| </td>
| |
| </tr></table>
| |
| | |
| | |
| '''RESPONSE''' <syntaxhighlight lang="json">
| |
| 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
| |
| }
| |
| | |
| </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>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; 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>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>
| |
| <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; text-align: left;"></td>
| |
| | |
| </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;">список інструментів оплати. Інструмент '''RCard''' надається лише користувачам, які авторизовані в системі EasyPay.
| |
| Можливі значення '''instrumentType''' </td>
| |
| <td style="border: none; border-bottom: 1px solid #d3d3d3; text-align: left;">
| |
| Можливі значення '''instrumentType:'''
| |
| * Card – платіжна картка
| |
| * RCard – платіжна картка, підв'язана в системі EasyPay
| |
| </td>
| |
| </tr></table>
| |
| | |
| | |
| Холдування платежу можна здійснити, оплативши замовлення на сторінці оплати (перейти за '''forwardUrl'''), або вказавши в запиті '''createOrder''' інструмент оплати у '''userPaymentInstrument''' (див. [[MerchantAPI#Створення замовлення|Створення замовлення]]).
| |
| | |
| Клієнту відобразиться сторінка успішного платежу EasyPay, або сторінка, вказана в “urls”:{}.
| |
| | |
| | |
| Після '''спроби холдування платежу''' партнеру буде відправлено '''сповіщення''', згідно з варіантом, вказаним в налаштуваннях сервісу [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]].
| |
| | |
| | |
| Статус платежу необхідно перевірити методом '''[[MerchantAPI#Перевірка статусу платежу|orderState]]'''
| |
|
| |
| | |
| | |
| Після успішного холдування необхідно викликати або '''[[MerchantAPI#Розхолдування платежу|unHoldOrder]]''' , або '''[[MerchantAPI#Скасування платежу|orderCancel]]'''
| |
| | |
| Якщо протягом '''повних 10 днів''' після холдування жоден з цих методів не буде викликаний, на '''11-й день близько 05:00''' платіж може бути '''відхилений емітентом''', і кошти стануть доступні клієнту.
| |
| | |
| | |
| | |
| У транзакцію додається коментар: ''Автоматично відхилено через 10 днів. (SYSTEM ACCOUNT [dateTime])''
| |
| | |
| Сповіщення партнеру при цьому '''не надсилається'''.
| |
| | |
| == Розхолдування платежу ==
| |
| ==== Розхолдування платежу ====
| |
| Якщо цей метод не буде викликано протягом 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>
| |
| | |
| '''REQUEST''' '''HEADERS''' <syntaxhighlight lang="http">
| |
| '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">
| |
| {
| |
| "transactionId":955537573,
| |
| "orderId":"hold_4",
| |
| "serviceKey":"MERCHANT-TEST",
| |
| "amount": 1.2
| |
| }
| |
| </syntaxhighlight>
| |
| '''<br />RESPONSE''' <syntaxhighlight lang="json">
| |
| {
| |
| "paymentState": "accepted",
| |
| "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>
| |
| <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>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>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;">Різниця повернеться клієнту на картку протягом '''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 -''' платіж успішний (кінцевий статус)
| |
| | |
| • '''pending -''' платіж в обробці (некінцевий статус)
| |
| | |
| • '''declined -''' платіж відхилений (кінцевий статус)
| |
| | |
| • '''none -''' платіж не знайдено
| |
| </td>
| |
| </tr></table>
| |
| | |
| | |
| | |
| Для платежів з 2DS переадресація на сторінку банку-емітента не відбувається, і користувач відразу отримує статус платежу.
| |
| | |
| Після '''спроби розхолдування платежу''' партнеру буде надіслано '''сповіщення''' згідно з варіантом, вказаним в налаштуваннях сервісу [[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]
| |
| | |
| Статус платежу необхідно перевіряти методом '''[[MerchantAPI#Перевірка статусу платежу|orderState]]'''
| |
| | |
| == Параметри BrowseInfo при 3DS оплаті ==
| |
| ==== Параметри BrowseInfo при 3DS оплаті ====
| |
| У зв'язку з переходом банків - екваєрів на модель роботи 3D Secure 2.x, при створенні замовлення з одночасною передачею інструменту оплати в запиті (карта, токен карти, токен Apple / Google Pay), необхідно передавати додаткові параметри пристрою (браузера) клієнта в заголовках і в тілі запиту createOrder, у прикладі вони виділені:
| |
| <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/createOrder</span>
| |
| </p>'''HEADERS'''
| |
| "appId: b15c4b64-8964-4c80-852e-df59a0e0d9b6",<br>
| |
| "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;">
| |
| | |
| "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"
| |
| },
| |
| <span style="color: green;">
| |
| "browserInfo":{
| |
| "colorDepth":"24",
| |
| "screenHeight":"824",
| |
| "screenWidth":"1536",
| |
| "language":"uk-UA",
| |
| "javaEnabled":"false",
| |
| "javascriptEnabled": "true",
| |
| "timeZone":"-180"
| |
| }
| |
| </span>
| |
| | |
| </div>
| |
| | |
| | |
| | |
| | |
| <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><tr>
| |
| <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;">передавайте без змін</td></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;">передавайте клієнтський User-Agent </td></tr></table>
| |
| | |
| | |
| '''Приклад, як збирати дані на 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;
| |
| }
| |
| | |
| </syntaxhighlight>Якщо все передано правильно, то отримайте відповідь як нижче у прикладі '''"Якщо передано userPaymentInstrument (для випадку з 3DSecure)",''' або помилку оплати з картки, наприклад, "Недостатньо коштів".
| |
| | |
| У випадку, якщо додаткові параметри передані неправильно, отримайте помилку платіжного сервісу, наприклад:<syntaxhighlight lang="markdown">
| |
| "errorCode":"PAYMENT_PUMB_SERVICE_FAILURE",
| |
| "errorMessage":"Технічна помилка екваєра. Зверніться до служби підтримки EasyPay, або спробуйте пізніше"
| |
| | |
| </syntaxhighlight>'''Відповідь (RESPONSE)''':<syntaxhighlight lang="json" line="1">
| |
| 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
| |
| }
| |
| | |
| | |
| </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>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; text-align: left;">Якщо параметр відсутній, використовується значення ServiceKey з тіла запиту CreateOrder'''.'''
| |
| | |
| </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>
| |
| <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; text-align: left;">на сторінці оплати можемо відключати елементи інтерфейсу:
| |
| - логотип EasyPay можемо приховувати
| |
| | |
| - лічильник часу, що залишився до оплати, може бути відображений/прихований
| |
| | |
| - поле "Призначення" (можемо вимкнути, або за замовчуванням зробити відкритим/закритим)
| |
| | |
| - рядок з логотипом партнера та назвою можемо приховати
| |
| | |
| - поле введення імейл сховати / відобразити
| |
| | |
| - рядок з "Номер замовлення" приховати/показати
| |
| </td>
| |
| | |
| </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>
| |
| | |
| | |
| | |
| '''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
| |
| }
| |
| | |
| Якщо передано userPaymentInstrument (для випадку без 3DSecure):
| |
| {
| |
| "redirectUrl":null,
| |
| "action":null,
| |
| "paymentState":"Confirmed",
| |
| "status":"Done",
| |
| "actionType":"UrlRedirect",
| |
| "transactionId":847870521,
| |
| "retrievalReferenceNo":null,
| |
| "responseItems": null,
| |
| "error":null
| |
| }
| |
| | |
| </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></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")
| |
| * '''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>
| |
| | |
| <code>}</code>
| |
| | |
| * '''"UrlRedirect"''' - переадресувати клієнта на посилання з "action" або переадресувати клієнта за посиланням з '''"alternativeRedirectUrl".'''
| |
| * '''"ConfirmCode"''' -необхідно надіслати код перевірки з смс методом '''confirmCodeVerification''' ([[MerchantAPI#Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки|Підтвердження платежу клієнтом. Введення смс. Проходження 3DS перевірки]])
| |
| | |
| '''"None"''' - можливий при використанні інструменту гаманець '''("instrumentType": "EMoney"),''' кошти успішно списані з гаманця, партнеру надсилається повідомлення про списання. </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>"''' - 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;">
| |
| <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>
| |
| <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>
| |
| | |
| == Підтвердження платежу клієнтом. Введення смс. Проходження 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="margin-left: 5px; font-weight: bold; font-size: 16px;">/api/payment/confirmCodeVerification</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
| |
| {
| |
| "code": "string"
| |
| }
| |
| | |
| | |
| | |
| </syntaxhighlight>
| |
| '''Response'''<syntaxhighlight lang="json" line="1">
| |
| headers
| |
| відсутній
| |
| | |
| body
| |
| { }
| |
| </syntaxhighlight>Якщо "status":"Need3Ds", то клієнту потрібно пройти 3DS перевірку в залежності від значення '''"actionType".'''
| |
| <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></tr><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;">необхідно СТВОРИТИ сторінку (форму) з 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>
| |
| | |
| <code> "success": "string",</code>
| |
| | |
| <code> "failed": "string"</code>
| |
| | |
| <code>}</code> </td></tr></table>
| |
| | |
| <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;">
| |
| <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/orderState</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
| |
| {
| |
| "serviceKey":"MERCHANT-TEST",
| |
| "orderId":"test_20240524-0015",
| |
| "transactionId":"1413668587"
| |
| }
| |
| | |
| </syntaxhighlight>
| |
| | |
| | |
| '''Response'''<syntaxhighlight lang="json" line="1">
| |
| 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
| |
| }
| |
| | |
| </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>
| |
| <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>
| |
| | |
| | |
| '''Нетипові відповіді запит статусу:'''
| |
| | |
| * Якщо платіж не знайдено, прийде відповідь:
| |
| <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">
| |
| {
| |
| "merchantKey": "easypay-test",
| |
| "transactionId": 0,
| |
| "orderId": "Some orderId2",
| |
| "amount": 0,
| |
| "paymentState": "pending",
| |
| "refundTransactionId": null,
| |
| "paymentsList": [],
| |
| "error": null
| |
| }
| |
| | |
| </syntaxhighlight>
| |
| | |
| * Якщо отримано помилку на замовлення на етапі визначення реквізитів:
| |
| <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>
| |
| | |
| | |
| При виконанні запиту статусу на замовлення, у яких є спліт (платіжна опція) - повертається наступна модель:
| |
| | |
| '''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
| |
| {
| |
| "serviceKey":"easypay-test",
| |
| "orderId":"full_split_11",
| |
| "transactionId":""
| |
| }
| |
| | |
| | |
| </syntaxhighlight>'''Response'''<syntaxhighlight lang="json" line="1">
| |
| 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
| |
| }
| |
| | |
| </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>
| |
| | |
| == Скасування платежу ==
| |
| ----Метод викликається лише для платежів у статусі "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="margin-left: 5px; font-weight: bold; font-size: 16px;"> /api/merchant/cancelOrder</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
| |
| {
| |
| "serviceKey": "MERCHANT-TEST",
| |
| "orderId": "test_20210217-121843",
| |
| "transactionId": "913141164",
| |
| "amount":"1"
| |
| }
| |
| | |
| </syntaxhighlight>
| |
| '''Response'''<syntaxhighlight lang="json" line="1">
| |
| headers
| |
| body
| |
| {
| |
| "merchantKey":"easypay-test",
| |
| "transactionId":913141164,
| |
| "refundTransactionId":913141464,
| |
| "orderId":"test_20210217-121843",
| |
| "amount":1.000000,
| |
| "paymentState":"accepted",
| |
| "error":null
| |
| }
| |
| | |
| </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>
| |
| <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>
| |
| | |
| <!-- Четвертий рядок -->
| |
| <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>
| |
| | |
| <!-- П'ятий рядок -->
| |
| <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;">Можливі значення:
| |
| | |
| * a'''ccepted''' - скасування успішне. Створено транзакцію рефанду з негативною сумою
| |
| * '''declined''' - скасування пройшло неуспішно
| |
| * p'''ending''' або будь-який інший статус – вимагає перевірки статусу основної транзакції перед повторним запитом скасування.
| |
| </td>
| |
| </table>
| |
| | |
| Якщо скасування пройшло успішно, запит статусу оригінальної транзакції повинен повертати '''"'''<code>paymentState</code>'''":"'''<code>declined</code>'''",''' а запит статусу транзакції скасування - '''"'''<code>paymentState</code>'''": "'''<code>accepted</code>'''"'''
| |
| | |
| При успішному скасуванні платежу, якщо налаштована HTTP - нотифікація ([[MerchantAPI#Повідомлення про платіж|Повідомлення про платіж]]), на Merchant.UrlNotify буде '''одноразово''' надіслано POST - запит із параметром "<code>action</code>": "<code>refund</code>'''"''' та сумою (amount), яка була скасована. Нотифікація надсилається одноразово без повторних спроб, статус у відповідь код нами не перевіряється.
| |