البدء السريع
ستحصل في هذه الصفحة على رمز مميز باستخدام بيانات اعتماد الشريك، ثم ترسل استعلامًا عن الغرف والأسعار. تحتاج إلى apiKey وapiSecret ومعرّف الفندق في HMS (hotelID)؛ وإن لم تكن لديك بعد، فتواصل مع الدعم.
1. الحصول على رمز مميز#
تستقبل نقطة نهاية تسجيل الدخول حقول نموذج، ولا تحتاج إلى ترويسة مصادقة:
curl "https://test.hms.gen.tr/external/public/login" \
-d "apiKey=$HMS_API_KEY" \
-d "apiSecret=$HMS_API_SECRET" \
-d "hotelCode=1000"{
"success": true,
"hotelCode": "1000",
"token": "eyJlbmREYXRlIjp7ImRhdGUiOiIyMDI2LTA5LTE1IDEwOjI0OjMxLjAwMDAwMCIs…",
"hotelSeoUrl": "demo-otel"
}احفظ قيمة token؛ إذ تُستخدم في كل طلب يخص هذا الفندق طوال 7 أيام.
export HMS_TOKEN="eyJlbmREYXRlIjp7ImRhdGUiOiIyMDI2LTA5LTE1IDEwOjI0OjMxLjAwMDAwMCIs…"2. الاستعلام عن الغرف والأسعار#
بحث عن إقامة لليلتين لشخصين بالغين:
curl "https://test.hms.gen.tr/external/online/roomType" \
-H "Authorization: Bearer $HMS_TOKEN" \
-d "hotelID=1000" \
-d "startDate=2026-08-18" \
-d "endDate=2026-08-20" \
-d "adultCount=2" \
-d "language=en"const res = await fetch("https://test.hms.gen.tr/external/online/roomType", {
method: "POST",
headers: { "Authorization": `Bearer ${process.env.HMS_TOKEN}` },
body: new URLSearchParams({
hotelID: "1000",
startDate: "2026-08-18",
endDate: "2026-08-20",
adultCount: "2",
language: "en"
})
});
const data = await res.json();
if (!data.success) throw new Error(`${data.errorCode}: ${data.errorMessage}`);
for (const room of data.items) {
console.log(room.name, room.roomCount, "rooms");
}$ch = curl_init('https://test.hms.gen.tr/external/online/roomType');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('HMS_TOKEN')],
CURLOPT_POSTFIELDS => http_build_query([
'hotelID' => 1000,
'startDate' => '2026-08-18',
'endDate' => '2026-08-20',
'adultCount' => 2,
'language' => 'en',
]),
]);
$data = json_decode(curl_exec($ch), true);
if (empty($data['success'])) {
throw new RuntimeException($data['errorCode'] . ': ' . $data['errorMessage']);
}
foreach ($data['items'] as $room) {
echo $room['name'], ' · ', $room['roomCount'], " rooms\n";
}3. قراءة الاستجابة#
يحتوي كل نوع غرفة على أنواع الإقامة الخاصة به (accommodationTypes)، ويحتوي كل نوع إقامة على خيارات الأسعار (prices). إليك مثالًا مختصرًا:
{
"success": true,
"items": [
{
"id": 2,
"name": "Standard Room",
"roomCount": 5,
"currency": "TRY",
"accommodationTypes": [
{
"id": 2,
"title": "Bed & Breakfast",
"priceType": 0,
"prices": {
"2-1": {
"total": 2,
"price": "1930.00",
"currency": "TRY",
"nonRefundable": "",
"id": "2/2"
},
"2-0": {
"total": 2,
"price": "1737.00",
"currency": "TRY",
"nonRefundable": "[NR]",
"id": "2-0/2"
}
}
}
]
}
],
"count": 1
}2-1: شخصان، السعر القياسي (القابل للاسترداد).2-0: شخصان، السعر غير القابل للاسترداد (nonRefundable: "[NR]").priceهو إجمالي سعر الإقامة، وtotalهو عدد الليالي. أما أسعار الليالي فتجدها في المصفوفةprices[]ضمن الاستجابة الكاملة.- في الحجز، تُرسَل قيمة
idالخاصة بنوع الغرفة باسمroomTypeID، وقيمةidالخاصة بنوع الإقامة باسمratePlanID.
ماذا بعد؟#
- مسار الحجز — من اختيار الغرفة حتى إرسال
BookingPushRQ - مسار الدفع — الدفع في الفندق، والتحويل البنكي، وبطاقة الائتمان، والدفع الإلكتروني
- رموز الأخطاء — قيم
errorCodeوmessage