Процес на плащане

Хотелът определя в панела кои типове плащане приема за онлайн резервации. Резервационната система показва този списък и следва различен път за всеки тип. Това ръководство описва четирите типа плащане и какво да направите при всеки от тях.

Изведете типовете плащане#

Терминал
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; резултатът се съобщава чрез query параметри, добавени към него (sonuc=1 успех, sonuc=0 неуспех). Вашият номер на поръчка (orderID) се съхранява със записа за плащането; при връщането го съпоставете със собствения си запис и изпратете резервацията само ако плащането е успешно.

ПолеБележка
totalPriceТрябва да е равно на сбора на кошницата; тази сума се изпраща към доставчика.
orderIDТрябва да е уникално. Използването на ID на резервацията улеснява равняването.
countryIDid от списъка с държави.
baskets[]По един ред за всяка стая или допълнителна услуга. id е ID на типа стая / пакета, piece — количеството, price — единичната цена.

Директно използване на данните за виртуалния POS#

Ако искате да се свързвате с доставчика от собствения си сървър вместо през платежната страница на HMS, крайната точка данни за виртуален POS връща ID на търговеца, ключовете и кода на доставчика. Това са тайни данни: използвайте ги само на сървъра и първо съгласувайте този подход с HMS.

След плащането#

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