Процес оплати

Готель сам визначає в панелі, які типи оплати він приймає для онлайн-бронювань. Модуль бронювання показує цей список і для кожного типу діє по-своєму. У цьому посібнику описано чотири типи оплати й те, що потрібно робити для кожного з них.

Отримайте список типів оплати#

Термінал
curl "https://test.hms.gen.tr/external/online/payment/type?hotelID=1000" \
  -H "Authorization: Bearer $HMS_TOKEN"
Відповідь · 200
{
    "success": true,
    "count": 3,
    "items": [
        {
            "title": "Pay at Hotel",
            "title_translate": "odeme.otelde_odeme",
            "typeID": 1
        },
        {
            "title": "Bank Transfer",
            "title_translate": "odeme.havale",
            "typeID": 3
        },
        {
            "title": "Online Card Payment",
            "title_translate": "odeme.online_odeme",
            "typeID": 10
        }
    ]
}
typeIDТипЩо відбувається
1Оплата в готеліКошти не списуються; бронювання передається одразу.
3Банківський переказГостеві показують банківські рахунки готелю; бронювання передається зі статусом «очікує оплати».
9Кредитна картка (гарантія)Дані картки надсилаються в HMS разом із бронюванням у PaymentCard; кошти з картки списує готель.
10Онлайн-оплата (віртуальний POS-термінал)HMS запускає платіжний сеанс; гість переходить на платіжну сторінку провайдера й повертається на ваш returnUrl.

Тип 1 · Оплата в готелі#

Додаткових кроків немає. За бажанням можна викликати ендпоінт, щоб отримати підтвердження:

POST …/payment/type/1 → 200
{
    "success": true,
    "message": "payment_at_the_hotel"
}

Тип 3 · Банківський переказ#

Отримайте банківські рахунки, які готель увімкнув для онлайн-продажу, і покажіть їх гостеві:

Термінал
curl -X POST "https://test.hms.gen.tr/external/online/payment/type/3" \
  -H "Authorization: Bearer $HMS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"hotelID": 1000}'
Відповідь · 200
{
    "success": true,
    "message": "payment_by_bank_transfer",
    "banks": [
        {
            "companyName": "Ziraat Bank",
            "holder": "Demo Turizm A.Ş.",
            "branchName": "Denizli",
            "branchNumber": "0123",
            "bankAccountNumber": "12345678-5001",
            "iban": "TR00 0001 0001 2345 6789 5001 01"
        }
    ]
}

Якщо жодного рахунку не налаштовано, повертається bank_info_is_not_found; у такому разі приховайте цей тип зі списку.

Тип 9 · Кредитна картка#

Ендпоінт лише повідомляє, що потрібно зібрати дані картки:

POST …/payment/type/9 → 200
{
    "success": true,
    "message": "credit_card_info_should_be_requested"
}

Зберіть дані картки у власній формі й передайте їх у полі PaymentCard кожного елемента RoomStays під час передавання бронювання:

RoomStays[].PaymentCard
{
    "PaymentCard": {
        "CardHolder": {
            "fullname": "Ayşe Demir",
            "address": "Kumsal Cad. No: 12",
            "country": "Türkiye",
            "city": "Antalya"
        },
        "cardNumber": "5571135571135575",
        "expireDate": "0329",
        "cardCode": "MasterCard",
        "seriesCode": "000"
    }
}

Тип 10 · Онлайн-оплата#

Запустіть платіжний сеанс із даними гостя й кошика. Усі поля обов’язкові; про відсутнє поле повідомляють required_input_info_not_submitted і errors[].

Запит
curl -X POST "https://test.hms.gen.tr/external/online/payment/type/10" \
  -H "Authorization: Bearer $HMS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "hotelID": 1000,
    "totalPrice": 2330.00,
    "orderID": "4811174883",
    "returnUrl": "https://booking.example.com/payment/result",
    "name": "Ayşe", "surname": "Demir",
    "email": "[email protected]", "phone": "05551112233",
    "city": "Denizli", "address": "Kumsal Cad. No: 12", "countryID": 1,
    "baskets": [
      { "id": 2,  "name": "Standard Room · Bed & Breakfast", "piece": 1, "price": 1930.00 },
      { "id": 12, "name": "Dinner", "piece": 1, "price": 400.00 }
    ]
  }'
Відповідь · 200
{
    "success": true,
    "message": "payment_order_code",
    "code": "<form method=\"post\" action=\"https://vpos.provider.example/3d\"><input type=\"hidden\" name=\"orderId\" value=\"4811174883\"> … </form><script>document.forms[0].submit()</script>"
}

Повернений code — це HTML-фрагмент: залежно від провайдера віртуального POS-термінала готелю це форма 3D Secure з автоматичним надсиланням, скрипт переспрямування window.location або вбудована платіжна форма (наприклад, iyzico). Виведіть фрагмент без змін на своїй сторінці оплати й не намагайтеся його розбирати. Гість завершує оплату на боці провайдера й повертається на ваш returnUrl; результат передається в доданих до нього параметрах запиту (sonuc=1 — успіх, sonuc=0 — невдача). Номер вашого замовлення (orderID) зберігається разом із записом про платіж; після повернення зіставте його з власним записом і передавайте бронювання, лише якщо оплата пройшла успішно.

ПолеПримітка
totalPriceМає дорівнювати сумі кошика; саме ця сума передається провайдерові.
orderIDМає бути унікальним. Якщо використовувати ID бронювання, звірка буде простішою.
countryIDid зі списку країн.
baskets[]Один рядок на кожен номер або додаткову послугу. id — ідентифікатор типу номера / пакета, piece — кількість, price — ціна за одиницю.

Пряме використання даних віртуального POS-термінала#

Якщо ви хочете підключатися до провайдера з власного сервера замість платіжної сторінки HMS, ендпоінт даних віртуального POS-термінала повертає ідентифікатор мерчанта, ключі та код провайдера. Це секретні дані: використовуйте їх лише на сервері й попередньо погодьте такий підхід із HMS.

Після оплати#

  • Для типу 10 передавайте бронювання після підтвердження оплати; якщо оплата не пройшла, не передавайте його.
  • Для типу 3 передавайте бронювання одразу; готель позначить переказ у панелі, коли кошти надійдуть.
  • Під час передавання бронювання Total.amountAfterTaxes має дорівнювати сумі, яку вже отримано або буде отримано.
Останнє оновлення: 21 вересня 2026 р.Знайшли помилку? Повідомте нам