Zahlungsablauf
Das Hotel legt im Panel fest, welche Zahlungsarten es für Online-Buchungen akzeptiert. Die Buchungsmaschine zeigt diese Liste an und folgt je nach Typ einem anderen Weg. Dieser Leitfaden behandelt die vier Zahlungsarten und was jeweils zu tun ist.
Zahlungsarten auflisten#
curl "https://test.hms.gen.tr/external/online/payment/type?hotelID=1000" \
-H "Authorization: Bearer $HMS_TOKEN"{
"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 | Typ | Was passiert |
|---|---|---|
1 | Zahlung im Hotel | Kein Zahlungseinzug; die Buchung wird direkt übermittelt. |
3 | Überweisung | Die Bankkonten des Hotels werden angezeigt; die Buchung wird als „Zahlung ausstehend“ übermittelt. |
9 | Kreditkarte (Garantie) | Die Kartendaten werden mit der Buchung in PaymentCard an HMS gesendet; das Hotel belastet die Karte. |
10 | Online-Zahlung (virtuelles POS-Terminal) | HMS startet eine Zahlungssitzung; der Gast wird an die Zahlungsseite des Anbieters übergeben und kehrt zu Ihrer returnUrl zurück. |
Typ 1 · Zahlung im Hotel#
Kein zusätzlicher Schritt. Sie können den Endpunkt aufrufen, um eine Bestätigung zu erhalten:
{
"success": true,
"message": "payment_at_the_hotel"
}Typ 3 · Überweisung#
Rufen Sie die Bankkonten ab, die das Hotel für den Online-Verkauf aktiviert hat, und zeigen Sie sie dem Gast an:
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}'{
"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"
}
]
}Ist kein Konto konfiguriert, wird bank_info_is_not_found zurückgegeben; blenden Sie diesen Typ dann in der Liste aus.
Typ 9 · Kreditkarte#
Der Endpunkt teilt Ihnen lediglich mit, dass Kartendaten erfasst werden müssen:
{
"success": true,
"message": "credit_card_info_should_be_requested"
}Erfassen Sie die Kartendaten in Ihrem eigenen Formular und senden Sie sie bei der Buchungsübermittlung im Feld PaymentCard jedes RoomStays-Elements:
{
"PaymentCard": {
"CardHolder": {
"fullname": "Ayşe Demir",
"address": "Kumsal Cad. No: 12",
"country": "Türkiye",
"city": "Antalya"
},
"cardNumber": "5571135571135575",
"expireDate": "0329",
"cardCode": "MasterCard",
"seriesCode": "000"
}
}Typ 10 · Online-Zahlung#
Starten Sie eine Zahlungssitzung mit den Gast- und Warenkorbdaten. Alle Felder sind erforderlich; ein fehlendes Feld wird mit required_input_info_not_submitted und errors[] gemeldet.
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 }
]
}'const res = await fetch("https://test.hms.gen.tr/external/online/payment/type/10", {
method: "POST",
headers: { "Authorization": `Bearer ${process.env.HMS_TOKEN}`, "Content-Type": "application/json" },
body: JSON.stringify({
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 }
]
})
});
const data = await res.json();
if (!data.success) throw new Error(data.message + " " + (data.errors || []).join(", "));
// data.code ist ein HTML-Fragment, das an den Anbieter übergibt: unverändert auf Ihrer Zahlungsseite ausgeben
res.send(paymentPageTemplate({ providerHtml: data.code }));{
"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>"
}Der zurückgegebene code ist ein HTML-Fragment: Je nach Anbieter des virtuellen POS-Terminals des Hotels handelt es sich um ein automatisch abgesendetes 3-D-Secure-Formular, ein Weiterleitungsskript mit window.location oder ein eingebettetes Zahlungsformular (z. B. iyzico). Geben Sie das Fragment unverändert auf Ihrer Zahlungsseite aus; versuchen Sie nicht, es zu parsen. Der Gast schließt die Zahlung beim Anbieter ab und kehrt zu Ihrer returnUrl zurück; das Ergebnis wird über angehängte Query-Parameter mitgeteilt (sonuc=1 Erfolg, sonuc=0 Fehlschlag). Ihre Bestellnummer (orderID) wird mit dem Zahlungsdatensatz gespeichert; ordnen Sie sie bei der Rückkehr Ihrem eigenen Datensatz zu und übermitteln Sie die Buchung nur, wenn die Zahlung erfolgreich war.
| Feld | Hinweis |
|---|---|
totalPrice | Muss der Warenkorbsumme entsprechen; dieser Betrag geht an den Anbieter. |
orderID | Muss eindeutig sein. Die Verwendung der Buchungs-ID erleichtert den Abgleich. |
countryID | id aus der Länderliste. |
baskets[] | Eine Zeile pro Zimmer oder Extra. id ist die Zimmertyp- bzw. Paket-ID, piece die Menge, price der Einzelpreis. |
Daten des virtuellen POS-Terminals direkt verwenden#
Wenn Sie den Anbieter statt über die Zahlungsseite von HMS direkt von Ihrem eigenen Server aus anbinden möchten, liefert der Endpunkt Daten des virtuellen POS-Terminals die Händler-ID, die Schlüssel und den Anbietercode. Diese Daten sind geheim: Verwenden Sie sie nur serverseitig und stimmen Sie dieses Vorgehen vorab mit HMS ab.
Nach der Zahlung#
- Übermitteln Sie die Buchung bei Typ 10 erst nach der Bestätigung der Zahlung; bei einer fehlgeschlagenen Zahlung nicht übermitteln.
- Übermitteln Sie die Buchung bei Typ 3 sofort; das Hotel erfasst die Überweisung im Panel, sobald sie eingeht.
- Bei der Buchungsübermittlung muss
Total.amountAfterTaxesdem eingezogenen bzw. noch einzuziehenden Betrag entsprechen.