Swagger API Документація

Для зручної роботи з API ми надали інтерактивну Swagger документацію, яка дозволяє переглядати всі доступні API endpoints, бачити параметри запитів та приклади відповідей, тестувати API прямо в браузері та імпортувати специфікацію в Postman та інші інструменти.

Swagger документація:

https://aifo.pro/docs/swagger

Swagger документація містить всю інформацію про API endpoints, які описані нижче, але в більш зручному та інтерактивному форматі. Рекомендуємо використовувати Swagger для розробки та тестування інтеграцій.

JSON специфікація доступна за адресою: https://aifo.pro/docs/swagger/spec

Основний API створення рахунку

Для web-каси і Telegram-каси використовуйте єдиний endpoint створення рахунку. У відповіді система поверне системний invoice_id і готове посилання payment_url.

Endpoint:

POST https://aifo.pro/api/v2/invoices/create
Параметр Примітка Тип
shop_idID каси з кабінету мерчанта.Обов'язковий.
amountСумма строкой: 100.50. Можно заменить на amount_minor.Обов'язковий.
amount_minorСумма в минимальных единицах: 10050 для 100.50. Приоритетнее amount.Необов'язковий.
external_idВаш ID заказа строкой: ORDER-123, UUID или число. Хранится как invoice_uid.Обов'язковий.
X-AIFO-Signature, X-AIFO-Timestamp, X-AIFO-NonceHMAC SHA-256 авторизация нового API.Обов'язковий.
descriptionКоментар до платежу.Необов'язковий.
lifetime_minutesЧас життя рахунку у хвилинах, від 0 до 43200. Необов'язково.Необов'язковий.

HMAC canonical string: METHOD\nPATH\nTIMESTAMP\nNONCE\nSORTED_PARAMS. Старый sign=hash(shop_id:amount:secret_key:id) работает только в legacy API v1 и прямом checkout.

{
  "status": "success",
  "message": "Invoice created",
  "data": {
    "api_version": "v2",
    "invoice_id": 456,
    "external_id": "ORDER-123",
    "amount": "100.50",
    "amount_minor": 10050,
    "currency": "UAH",
    "merchant_type": "domain",
    "checkout_endpoint": "/pay",
    "status_text": "pending",
    "payment_url": "https://aifo.pro/pay?shop_id=123&pay_id=456&amount=100.50&sign=..."
  }
}

API перевірки статусу рахунку

Статус рахунку доступний тільки з shop_id і підписом. Це захищає платежі від перегляду лише за одним ID.

GET https://aifo.pro/api/v2/invoices/status?invoice_id=456&shop_id=123
Параметр Примітка Тип
invoice_idСистемный invoice_id из ответа API v2. Вместо него можно передать external_id.Обов'язковий.
shop_idID каси з кабінету мерчанта.Обов'язковий.
X-AIFO-Signature, X-AIFO-Timestamp, X-AIFO-NonceHMAC SHA-256 авторизация.Обов'язковий.

Прямий checkout URL

Для ініціалізації платежу через єдину форму оплати достатньо направити користувача за спеціальною URL-адресою, а також передати ряд обов'язкових параметрів.

URL форми оплати:

https://aifo.pro/pay/?shop_id=ID&pay_id=ORDER_ID&amount=AMOUNT&sign=SIGN

Форма оплати містить усі необхідні дані для проведення платежу. Передається методом GET/POST на адресу.

Параметр Примітка Тип
shop_id ID каси, можна отримати в налаштуваннях проєкту. Обов'язковий.
amount Сума платежу. Обов'язковий.
pay_id Номер рахунку. Може бути ваш ID замовлення (виджет або пряме посилання) або системний invoice_id (посилання з API). Система спочатку шукає інвойс за вашим id (invoice_uid), потім за invoice_id. Обов'язковий.
sign Підпис платежу. Обов'язковий.
desc Коментар до платежу. Необов'язковий.

Підпис для створення платежу формується шляхом обчислення SHA256 || SHA1 || SHA512 || SHA384 || RIPEMD160-хешу. Рекомендується SHA256.

Увага: MD5 застарілий і небезпечний. Використовуйте SHA256 або інші безпечні алгоритми.

Важливо: Для генерації підпису використовуйте секретний ключ (kassa_secretkey), а не публічний ключ. Секретний ключ доступний тільки вам і не повинен публікуватися.

Приклад коду на PHP (підпис):

PHP

$sign = hash('sha256', "SHOP_ID:AMOUNT:SECRET_KEY:ORDER_ID");


$sign = hash('sha1', "SHOP_ID:AMOUNT:SECRET_KEY:ORDER_ID");


                        

Перевірка IP

Рекомендуємо перевіряти IP сервера, що надсилає інформацію. Наші IP — 77.83.102.155

Приклад коду на PHP:

PHP
function getIP() {
    if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
        $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
    }
    return $_SERVER['REMOTE_ADDR'];
}
$allowed = array('77.83.102.155');
if (!in_array(getIP(), $allowed)) die("hacking attempt!");

Сповіщення про платіж

Після ініціалізації оплати користувач переходить на сторінку чеку, де відбувається відстеження статусу платежу. При отриманні успішного або помилкового статусу користувач перенаправляється на сайт партнера (поля Fail URL / Success URL у налаштуваннях кабінету) з POST-параметрами:

Параметр Примітка
sum Сума платежу.
invoice Номер рахунку.
http_auth_signature Підпис, згенерований у MD5 || SHA1 || SHA256 || SHA512 || SHA384 || RIPEMD160 із секретним ключем.

Приклад обробника платежу

Рекомендується також перевіряти суму платежу та те, що запит ще не був оплачений.

Приклад обробника на PHP:

PHP
function getIP() {
    if (isset($_SERVER['HTTP_X_REAL_IP'])) return $_SERVER['HTTP_X_REAL_IP'];
    if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) return $_SERVER['HTTP_CF_CONNECTING_IP'];
    return $_SERVER['REMOTE_ADDR'];
}
$allowed = array('77.83.102.155');
if (!in_array(getIP(), $allowed)) die("hacking attempt!");

$sign = hash('sha256', "SHOP_ID:AMOUNT:SECRET_KEY:ORDER_ID");
if ($sign !== $_POST['http_auth_signature']) die('Error signature');