Flujo de pago

El hotel decide en el panel qué tipos de pago acepta para las reservas online. El motor de reservas muestra esa lista y sigue un camino distinto para cada tipo. Esta guía describe los cuatro tipos de pago y qué hacer en cada uno.

Obtén la lista de tipos de pago#

Terminal
curl "https://test.hms.gen.tr/external/online/payment/type?hotelID=1000" \
  -H "Authorization: Bearer $HMS_TOKEN"
Respuesta · 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
        }
    ]
}
typeIDTipoQué ocurre
1Pago en el hotelNo hay cobro; la reserva se envía directamente.
3Transferencia bancariaSe muestran las cuentas bancarias del hotel; la reserva se envía como “pendiente de pago”.
9Tarjeta de crédito (garantía)Los datos de la tarjeta se envían a HMS con la reserva, en PaymentCard; el hotel realiza el cargo en la tarjeta.
10Pago online (POS virtual)HMS inicia una sesión de pago; el huésped pasa a la página de pago del proveedor y vuelve a tu returnUrl.

Tipo 1 · Pago en el hotel#

No hay ningún paso adicional. Puedes llamar al endpoint para obtener una confirmación:

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

Tipo 3 · Transferencia bancaria#

Obtén las cuentas bancarias que el hotel ha habilitado para la venta online y muéstraselas al huésped:

Terminal
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}'
Respuesta · 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"
        }
    ]
}

Si no hay ninguna cuenta configurada, se devuelve bank_info_is_not_found; en ese caso, oculta este tipo en la lista.

Tipo 9 · Tarjeta de crédito#

El endpoint solo te indica que hay que pedir los datos de la tarjeta:

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

Recoge los datos de la tarjeta en tu propio formulario y, al enviar la reserva, inclúyelos en el campo PaymentCard de cada elemento 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"
    }
}

Tipo 10 · Pago online#

Inicia una sesión de pago con los datos del huésped y de la cesta. Todos los campos son obligatorios; si falta alguno, se indica con required_input_info_not_submitted y errors[].

Solicitud
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 }
    ]
  }'
Respuesta · 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>"
}

El code devuelto es un fragmento HTML: según el proveedor de POS virtual del hotel, es un formulario 3D Secure que se envía automáticamente, un script de redirección window.location o un formulario de pago integrado (p. ej., iyzico). Muestra el fragmento tal cual en tu página de pago; no intentes analizarlo. El huésped completa el pago en el proveedor y vuelve a tu returnUrl; el resultado se indica con parámetros de consulta añadidos a esa URL (sonuc=1 éxito, sonuc=0 error). Tu número de pedido (orderID) se guarda con el registro del pago; cuando el huésped vuelva, relaciónalo con tu propio registro y envía la reserva solo si el pago se ha completado.

CampoNota
totalPriceDebe ser igual al total de la cesta; este es el importe que se envía al proveedor.
orderIDDebe ser único. Usar el ID de la reserva facilita la conciliación.
countryIDid de la lista de países.
baskets[]Una línea por habitación o extra. id es el ID del tipo de habitación o del paquete, piece la cantidad y price el precio unitario.

Uso directo de los datos del POS virtual#

Si quieres conectarte al proveedor desde tu propio servidor en lugar de usar la página de pago de HMS, el endpoint de datos del POS virtual devuelve el ID de comercio, las claves y el código del proveedor. Son datos secretos: úsalos solo en el servidor y acuerda antes este enfoque con HMS.

Después del pago#

  • Con el tipo 10, envía la reserva después de que se confirme el pago; si el pago falla, no la envíes.
  • Con el tipo 3, envía la reserva de inmediato; el hotel registra la transferencia en el panel cuando la recibe.
  • Al enviar la reserva, Total.amountAfterTaxes debe ser igual al importe cobrado o pendiente de cobro.
Última actualización: 21 de septiembre de 2026¿Has encontrado un error? Avísanos