Ödəniş axını
Onlayn rezervasiyalar üçün hansı ödəniş növlərini qəbul edəcəyinə otel paneldə özü qərar verir. Rezervasiya mühərriki bu siyahını göstərir və hər növ üçün fərqli yol izləyir. Bu bələdçi dörd ödəniş növünü və hər biri üçün nə etmək lazım olduğunu izah edir.
Ödəniş növlərini siyahıya alın#
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 | Növ | Nə baş verir |
|---|---|---|
1 | Oteldə ödəniş | Ödəniş alınmır; rezervasiya birbaşa ötürülür. |
3 | Bank köçürməsi | Otelin bank hesabları göstərilir; rezervasiya “ödəniş gözlənilir” kimi ötürülür. |
9 | Kredit kartı (zəmanət) | Kart məlumatları rezervasiya ilə birlikdə PaymentCard sahəsində HMS-ə göndərilir; ödənişi kartdan otel çıxarır. |
10 | Onlayn ödəniş (virtual POS) | HMS ödəniş sessiyası başladır; qonaq provayderin ödəniş səhifəsinə ötürülür və sizin returnUrl ünvanınıza qayıdır. |
1-ci növ · Oteldə ödəniş#
Əlavə addım yoxdur. Təsdiq almaq üçün son nöqtəni çağıra bilərsiniz:
{
"success": true,
"message": "payment_at_the_hotel"
}3-cü növ · Bank köçürməsi#
Otelin onlayn satış üçün aktivləşdirdiyi bank hesablarını alın və qonağa göstərin:
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"
}
]
}Heç bir hesab konfiqurasiya edilməyibsə, bank_info_is_not_found qaytarılır; bu növü siyahıda göstərməyin.
9-cu növ · Kredit kartı#
Son nöqtə yalnız kart məlumatlarının toplanmalı olduğunu bildirir:
{
"success": true,
"message": "credit_card_info_should_be_requested"
}Kart məlumatlarını öz formanızda toplayın və rezervasiya ötürülməsində hər RoomStays elementinin PaymentCard sahəsində göndərin:
{
"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-cu növ · Onlayn ödəniş#
Qonaq və səbət məlumatları ilə ödəniş sessiyası başladın. Bütün sahələr məcburidir; çatışmayan sahə required_input_info_not_submitted və errors[] ilə bildirilir.
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 provayderə ötürən HTML fraqmentidir: onu ödəniş səhifənizdə olduğu kimi göstərin
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>"
}Qaytarılan code HTML fraqmentidir: otelin virtual POS provayderindən asılı olaraq bu, avtomatik göndərilən 3D Secure forması, window.location yönləndirmə skripti və ya daxil edilmiş ödəniş formasıdır (məs. iyzico). Fraqmenti ödəniş səhifənizdə olduğu kimi göstərin; onu təhlil etməyə çalışmayın. Qonaq ödənişi provayderdə tamamlayır və sizin returnUrl ünvanınıza qayıdır; nəticə bu ünvana əlavə olunan sorğu parametrləri ilə bildirilir (sonuc=1 uğurlu, sonuc=0 uğursuz). Sifariş nömrəniz (orderID) ödəniş qeydi ilə birlikdə saxlanılır; qayıdışda onu öz qeydinizlə tutuşdurun və rezervasiyanı yalnız ödəniş uğurlu olduqda ötürün.
| Sahə | Qeyd |
|---|---|
totalPrice | Səbətin cəminə bərabər olmalıdır; bu məbləğ provayderə göndərilir. |
orderID | Unikal olmalıdır. Rezervasiyanın ID dəyərindən istifadə etmək tutuşdurmanı asanlaşdırır. |
countryID | Ölkələr siyahısındakı id. |
baskets[] | Hər otaq və ya əlavə xidmət üçün bir sətir. id otaq tipinin / paketin ID-si, piece miqdar, price vahidin qiymətidir. |
Virtual POS məlumatlarından birbaşa istifadə#
HMS-in ödəniş səhifəsi əvəzinə provayderə öz serverinizdən qoşulmaq istəyirsinizsə, virtual POS məlumatları son nöqtəsi ticarət nöqtəsinin ID-sini, açarları və provayder kodunu qaytarır. Bunlar gizli məlumatlardır: onlardan yalnız server tərəfində istifadə edin və bu yanaşmanı əvvəlcədən HMS ilə razılaşdırın.
Ödənişdən sonra#
- 10-cu növdə rezervasiyanı ödəniş təsdiqləndikdən sonra ötürün; uğursuz ödənişdə ötürməyin.
- 3-cü növdə rezervasiyanı dərhal ötürün; köçürmə daxil olduqda otel onu paneldə qeydə alır.
- Rezervasiya ötürülməsində
Total.amountAfterTaxesalınmış və ya alınacaq məbləğə bərabər olmalıdır.