УКР | [ENG](https://hackmd.io/r0If47QcT-qyFuNvGEN2Wg) ![](https://i.imgur.com/ULmPUgP.jpg) :arrow_left: [На Головну](/Mj2ZqCVpSq6A6Jzm6ladlw) # [pay/error/refund] Статус операції (CallBackURL) *Що таке Checkout, типи платежів та методи інтеграції див. у розділі ["Checkout"](https://hackmd.io/0mVv8NSpR1SBlFDoUtK5GQ).* ## Надсилання нотифікацій Партнеру Завершальним етапом у виконанні операції є надсилання нотифікацій Партнеру про **статус операції** у вигляді одного з запитів: * **"pay"** (оплата завершена), * **"error"** (помилка оплати), * **"refund"** (здійснено повернення). Загальний алгоритм проведення операції див. у розділі "[Схема роботи API Checkout](https://hackmd.io/DyX9oooaR6OLe5MkdwqllA#%D0%A1%D1%85%D0%B5%D0%BC%D0%B0-%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B8-API-Checkout)". ## Особливості формування запиту * Запит формується лише при здійсненні оплати через платіжну сторінку (Checkout) при будь-якому методі інтеграції (див. розділ "[Методи підключення Checkout](https://hackmd.io/0mVv8NSpR1SBlFDoUtK5GQ?both#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D0%B8-%D0%BF%D1%96%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%BD%D1%8F-Checkout)"). * Запит виконується на URL адресу (параметр `CallBackURL` структури `Data`), передану у запиті [[10005]](https://hackmd.io/1okrbJtPTVCsl6b_lyt9bg). * Запит надсилається тричі з інтервалом кожні 20 секунд до отримання відповіді Партнера. Якщо відповідь не надходить - нотифікація буде надсилатися кожні 10 хвилин до моменту отримання відповіді. * Запит здійснюється методом "GET" та передається у вигляді рядка. * Сума передається: у копійках (1 грн. відповідає значенню "100"). * Телефон передається: у міжнародному форматі без знака “+”. * Роздільник між параметрами: символ "&". ## Запит "pay/error" У запиті передаються наступні параметри: | Параметр | Обов’яз-ковість | Тип | Опис |Приклад | |:-:|:-:|:-:|-|:-:| | `command` | Так | Рядок | Статус проведеної операції: </br> - "pay" - оплата завершена, </br> - "error" - помилка оплати. | `pay` або `error` | | `txn_id` | Так | Рядок | Унікальний ідентифікатор транзакції у системі Оператора. При отриманні запиту "pay" з параметром `txn_id`, який раніше вже передавався - запит слід вважати повторним, при цьому не повинна генеруватись нова транзакція. | `321455` | | `uuid` | Так | Рядок | Унікальний ідентифікатор, що зв'язує запити "check" та "pay/error/refund". | `f3cd72b6-e1ea-06f-9b44-a9b93b401b7f` | | `account` | Так | Рядок | Унікальний ідентифікатор клієнта у системі Партнера: телефон або email. | `380638754213` | | `sum` |Так |Ціле|Сума операції у копійках.|1 грн.=>`100` | | `pay_type` | Так | Рядок | Тип платіжного методу. Див. [перелік типів](https://hackmd.io/aBE7H5cfQ-iqaN3SnwaQ-w#%D0%A2%D0%B8%D0%BF%D0%B8-%D0%BF%D0%BB%D0%B0%D1%82%D1%96%D0%B6%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%83-%E2%80%9CPayType%E2%80%9D). | `1` | | `txn_date` |Так|Рядок| Дата та час проведення операції. Формат: YYYYMMDDHHMMSS.| `20190301180233` | | `card_token` |Ні|Рядок| Токен картки. Параметр передається, якщо у Партнера ввімкнена опція токенізації карт (використовується лише для запиту "pay").| `c0bbb6318f7c442- 2b9d787bc9724145-2c0d9250cdd2a1d` | |`txn_id_own`|Ні|Рядок| Унікальний ідентифікатор транзакції у системі Партнера: `TransactionID`, надісланий в запиті [[10005]](https://hackmd.io/1okrbJtPTVCsl6b_lyt9bg). |`5c6e2be`| | `locale` | Так | Рядок | Локаль (мова) платіжної сторінки (відповідає переданій локалі за запитом [[10005](https://hackmd.io/1okrbJtPTVCsl6b_lyt9bg)]). | `uk` | | `sign` |Ні|Рядок| Підпис сформований за допомогою приватного ключа з [конкатенації](https://uk.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%BA%D0%B0%D1%82%D0%B5%D0%BD%D0%B0%D1%86%D1%96%D1%8F) рядків даних: </br> `txn_id`+`uuid`+`txn_date`+`sum`. </br> Алгоритм формування підпису див. у розділі ["Загальна інформація по підключенню (API)"](https://hackmd.io/g3cItPVFStez0ql3Xj-2TA). |`uDzPcuDjEFlC2FG-2Mjr566GKGIArfK-kcIA3LYTcXmavB3-9QBGmlVyU2yXG64-TM4qDq2kMBxXOQR-ueBMDcYgYkycyTd-Y8Q%3D%3D`| :::success <details> <summary>Приклад формування рядка для підпису "sign"</summary> <br> Дані запиту: ~~~md txn_id=321456 uuid=f3cd72b6-e1ea-406f-9b44-a9b93b401b7f txn_date=20190301180233 sum=100 ~~~ Рядок для підпису: ~~~md 321456f3cd72b6-e1ea-406f-9b44-a9b93b401b7f20190301_180233100 ~~~ </details> ::: :::success <details> <summary>Приклад запиту “pay”</summary> <br> ~~~md https://partner.host/protocol?command=pay&txn_id=321456&uuid=f3cd72b6-e1ea-406f-9b44-a9b93b401b7f&account=380638754213&sum=100&pay_type=1&txn_date=20190301180233&locale=uk&sign=uDzPcuDjEFlC2FG2Mjr566GKGIArfKkcIA3LYTcXmavB39QBGmlVyU2yXG64TM4qDq2kMBxXOQRueBMDcYgYkycyTdY8Q%3D%3D ~~~ </details> ::: ## Запит "refund" У запиті передаються наступні параметри: | Параметр | Обов’яз-ковість | Тип | Опис | Приклад | |:-:|:-:|:-:|-|:-:| | `command` | Так|Рядок|Статус проведеної операції: "refund" - здійснено повернення.|`refund`| | `txn_id` | Так | Рядок | Унікальний ідентифікатор транзакції у системі Оператора. | `321455` | | `sum` | Так |Ціле|Сума операції у копійках. |1 грн.=>`100` | | `operation_id` | Так | Рядок | Унікальний ідентифікатор операції у системі Оператора. | `11` | | `partner_txn_id` | Так | Рядок | Унікальний ідентифікатор транзакції у системі Партнера. | `321455` | | `partner_terminal_id` | Так | Рядок | Унікальний ідентифікатор терміналу у системі Партнера. | `1` | | `txn_date` |Так|Рядок| Дата та час проведення операції у форматі: YYYYMMDDHHMMSS.| `20190301180233` | | `sign` |Ні|Рядок| Підпис сформований за допомогою приватного ключа з конкатенації рядків даних: </br> `sum`+`txn_id`+`partner_txn_id`+ `partner_terminal_id`. </br> Алгоритм формування підпису описаний у розділі ["Загальна інформація по підключенню (API)"](https://hackmd.io/g3cItPVFStez0ql3Xj-2TA). |`uDzPcuDjEFlC2FG-2Mjr566GKGIArfK-kcIA3LYTcXmavB3-9QBGmlVyU2yXG64-TM4qDq2kMBxXOQR-ueBMDcYgYkycyTd-Y8Q%3D%3D` | ## Відповідь на запит "pay/error/refund" На запит "pay/error/refund" Партнер надсилає відповідь у вигляді JSON структури, що формується з наступних параметрів: | Параметр | Обов’яз-ковість | Тип | Опис | Приклад | |:-:|:-:|:-:|-|:-:| | `txn_id` | Так | Рядок | Унікальний ідентифікатор транзакції, переданий у запиті "pay/error/refund". | `321455` | | `result` | Так | Рядок | Статус обробки операції, згідно таблиці “[Статус обробки операції](https://hackmd.io/aBE7H5cfQ-iqaN3SnwaQ-w#%D0%A1%D1%82%D0%B0%D1%82%D1%83%D1%81-%D0%BE%D0%B1%D1%80%D0%BE%D0%B1%D0%BA%D0%B8-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D1%96%D1%97-%E2%80%9COperationStatus%E2%80%9D)”. | `10` | | `message` | Ні | Рядок | Текстове повідомлення з описом результату. | `Ок` | | `txn_date` |Так|Рядок| Дата та час проведення операції у системі Партнера. Формат: YYYYMMDDHHMMSS.| `20190301180233` | :::success <details> <summary>Приклад структури відповіді</summary> <br> ~~~md { "txn_id": "321456", "result": "10", "message": "Done", "txn_date": "20190301180833" } ~~~ </details> ::: ## Отримання статусу операції Для отримання поточного статусу обробки операції “pay” у будь-який момент може застосовуватись запит: [[20003] "Отримання статусу операції"](https://hackmd.io/fvd8btZLQXywluia6w5uxg). ## Довідкові матеріали Опис загальних параметрів системи XPAY див. у розділі ["Довідкові матеріали"](https://hackmd.io/aBE7H5cfQ-iqaN3SnwaQ-w): коди типів операцій, типи платіжних методів, коди статусів обробки операцій, відомості та помилки, що повертаються у відповіді та ін. ![](https://i.imgur.com/17gAyWb.png) :arrow_left: [На Головну](/Mj2ZqCVpSq6A6Jzm6ladlw) :arrow_left: [Загальна інформація по підключенню (API)](https://hackmd.io/g3cItPVFStez0ql3Xj-2TA) :arrow_left: [[10005] "Отримання посилання на платіжну сторінку"](https://hackmd.io/1okrbJtPTVCsl6b_lyt9bg) <details> <summary>Служба підтримки XPAY</summary> </br> Телефон: +38 093 891 92 00 Email: info@xpay.com.ua Telegram: @xpaysupportbot </details>