owned this note
owned this note
Published
Linked with GitHub
УКР | [ENG](https://hackmd.io/kESHEJwhRxGaq22CaHwrwg)
![](https://i.imgur.com/ULmPUgP.jpg)
:arrow_left: [На Головну](/Mj2ZqCVpSq6A6Jzm6ladlw)
# Інтеграція Checkout за структурованим посиланням
:::info
[TOC]
:::
*Що таке Checkout, типи платежів та методи інтеграції див. у розділі ["Checkout"](https://hackmd.io/0mVv8NSpR1SBlFDoUtK5GQ).*
## Як працює Checkout за структурованим посиланням
1. Клієнт оформлює замовлення на сайті Партнера та натискає кнопку оплати (див. схему нижче).
2. Партнер створює структуроване посилання на сторінку оплати (URI1) у вигляді:
:::info
enviroment.url/uk/frame/widget/banner-payment?<параметри платежу>
:::
3. Відбувається редірект клієнта на дану форму оплати, де відображаються усі необхідні атрибути платежу.
4. Клієнт обирає платіжний метод (або заповнює реквізити картки) та підтверджує оплату.
5. В завершення - клієнту відображається сторінка з результатом оплати, а Партнер отримує відповідь від Оператора про статус операції (CallBackURL). Див. деталі у розділі "[[pay/error/refund] Статус операції (CallBackURL)](https://hackmd.io/2x_MsqZIT6epfiqcQimFwQ)".
## Схема роботи Checkout за структурованим посиланням
![](https://i.imgur.com/QqMEyjE.png)
## Формування короткого посилання
Для отримання короткого посилання на оплату (наприклад, для надсилання в СМС/Viber/Telegram/та ін.) здійснюється запит методом “GET” на адресу:
:::info
enviroment.url/uk/frame/widget/banner-link?<параметри платежу>
:::
Результатом є відповідь Оператора у вигляді JSON структури:
:::info
{"shorturl": "коротке посилання на сторінку оплати"}
:::
## Білдер структурованого посилання
Для ручного формування структурованого посилання можна скористатись інструментом за адресою:
**Тестове середовище**
```
https://stage-mapi.xpaydirect.com/en/sl/builder
```
**Продуктове середовище**
```
https://mapi.xpaydirect.com/en/sl/builder
```
:::success
<details>
<summary>Приклад формування структурованого посилання через білдер</summary>
<br>
https://stage-mapi.xpaydirect.com/uk/sl/builder?pid=7380bc60-f656-4e51-8d4f-a354a9b68f21&acc=12345&sum=111&data={"Phone":"380671234567", "ClientIP":"8.8.8.8", "FirstName":"Олексій", "LastName":"Бондар", "RegistryAttr":[{"Caption":"acc_id", "Value":1234}], "PaymentInfo":[{"Caption":"Адреса", "Value":"Бульвар Морський, 54"}, { "Caption":"P/Р", "Value":1234}],"Callback": {"PaySuccess": {"URL": "http://google.com/"}}}
</details>
:::
## Формування параметрів
:::warning
*Особливості:*
* Усі назви параметрів: регістрозалежні.
* Сума передається: у копійках (1 грн. відповідає значенню "100").
* Телефон передається: у міжнародному форматі без знака “+”.
* Роздільник між параметрами: символ "&".
:::
| Параметр | Обов’яз-ковість | Тип | Опис | Приклад |
|:-:|:-:|:-:|-|:-:|
| `pid` | Так | Рядок | Додатковий токен Партнера (не плутати з Partner Token), що надається Оператором додатково для ідентифікації Партнера при кожному запиті. |`7380bc60-f656-4e51-8d4f-a354a9b68f21` |
| `acc` | Ні | Рядок | Ідентифікатор клієнта у системі Партнера: телефон, email або інше кастомне значення (ID). Параметр передається для відображення у платіжній формі клієнта. | `380638754213` </br> або `12345`|
| `sum` | Ні |Ціле|Сума оплати у копійках. Параметр передається для відображення суми у формі оплати. Параметр не може бути зміненим клієнтом, але при необхідності може бути надана така можливість. | 1 грн.=>`100` |
| `data`^1^ | Ні |Структура | Структура даних, що передає додаткову інформацію для проведення операції та відображення на сторінці оплати. | `JHGHJGJS32KDKLJALKJ` |
:::warning
^1^ *Вміст “data” - JSON структура, стиснута у GZIP формат та закодована у base64.
Набір параметрів структури даних “data” формується аналогічно до структури даних “Data” запиту [[10005] Отримання посилання на платіжну сторінку](https://hackmd.io/1okrbJtPTVCsl6b_lyt9bg)*.
:::
## Приклади формування структурованого посилання
:::success
<details>
<summary>Приклад формування структурованого посилання</summary>
<br>
**enviroment.url/uk/frame/widget/banner-payment?pid=7380bc60-f656-4e51-8d4f-a354a9b68f21&acc=12345&sum=5000&data=JHGHJGJS32KDKLJALKJ**
де:
pid=7380bc60-f656-4e51-8d4f-a354a9b68f21,
acc=12345,
sum=5000,
data=JHGHJGJS32KDKLJALKJ - *JSON структура, стиснута у GZIP формат та закодована у base64.*
</details>
:::
:::success
<details>
<summary>Приклад формування псевдокоду</summary>
<br>
~~~md
data = urlencode( base64( gzip( json_encode( {"atrr1": "abc", "atrr2": 123} ) ) ) )
~~~
*[Псевдокод - це >>](https://uk.wikipedia.org/wiki/%D0%9F%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D0%BA%D0%BE%D0%B4)*
</details>
:::
:::success
<details>
<summary>Приклад формування структурованого посилання на PHP</summary>
<br>
~~~md
$json = '{"Phone":"380671234567", "ClientIP":"8.8.8.8", "FirstName":"Олексій", "LastName":"Бондар", "RegistryAttr":[{"Caption":"acc_id", "Value":1234}], "PaymentInfo":[{"Caption":"Адреса", "Value":"Бульвар Морський, 54"}, { "Caption":"P/Р", "Value":1234}]}';
$gzdata = gzencode($json);
$data = urlencode(base64_encode($gzdata));
$url = 'enviroment.url/uk/frame/widget/banner-payment?pid=7380bc60-f656-4e51-8d4f-a354a9b68f21&acc=1234&data=' . $data;
~~~
</details>
:::
## Протокол двостадійної взаємодії
Коли платіжна сторінка Партнера передбачає авторизацію клієнта (введення телефону/email), та у ході обробки даних на стороні Оператора виникає необхідність перевірки реквізитів оплати та/або уточнення суми оплати - застосовується протокол двостадійної взаємодії.
Див. деталі у розділі "[Протокол двостадійної взаємодії. Запит "check](https://hackmd.io/kk2x9Wx8QSe_vV11tA-KFA)".
## Запити "pay/error/refund" (CallBackURL)
Завершальним етапом у виконанні операції є надсилання нотифікацій Партнеру про статус операції у вигляді одного з запитів:
* **"pay"** (оплата завершена),
* **"error"** (помилка оплати),
* **"refund"** (здійснено повернення).
Див. деталі у розділі "[Запити "pay/error/refund" (CallBackURL)](https://hackmd.io/2x_MsqZIT6epfiqcQimFwQ)".
## Тестові дані
![](https://i.imgur.com/gtxKB22.png)
:::info
Для тестування будь-яких операцій та ознайомлення з сервісами системи XPAY заведено **Тестового Партнера**, для якого надано всі необхідні дозволи. Параметри необхідні для тестування Checkout за структурованим посиланням: **URI**, **"pid"** та **"public key XPAY"**.
**URI** тестового середовища:
~~~
https://stage-mapi.xpaydirect.com/uk/frame/widget/banner-payment?<параметри платежу>
~~~
Унікальний ідентифікатор Тестового Партнера **"pid"**:
~~~
pid=7380bc60-f656-4e51-8d4f-a354a9b68f21
~~~
Публічний ключ Оператора **"public key XPAY"** для тестового середовища:
~~~
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0IH2V0Ot1ej4FdOihujG
ON37sqql62vFFR/4IK+w4xqHRvD+SEwwkLL9EO72e42bV9VaKOqKbX81A+0hbBXi
W7axjHU2Sc97EXTHjpwX++HduUXbXhRteyzcHDLZCGKT8WzoNgQeXcieLUYUp2bb
gjElGecKprcprkMeHmffmelwlzcv61auGU0o10CTyyCqhOKofdqJq6A2KOBCLL49
5z1700oCRo9qL4loe95r4wGh6AmHZNvAnAwLgzwzyLvWCz479CVIWEaMY/+uczfL
0yRjN+8uqNK3A09wOD+wO1I+YfU9YXcQ75L8ibxzWcNgMHrhJQ9ZtnoVltiTWEEB
9QIDAQAB
-----END PUBLIC KEY-----
~~~
:::
![](https://i.imgur.com/17gAyWb.png)
:arrow_left: [На Головну](/Mj2ZqCVpSq6A6Jzm6ladlw)
:arrow_left: [Checkout](https://hackmd.io/0mVv8NSpR1SBlFDoUtK5GQ)
<details>
<summary>Служба підтримки XPAY</summary>
</br>
Телефон: +38 093 891 92 00
Email: info@xpay.com.ua
Telegram: @xpaysupportbot
</details>