การจอง
ห้องพัก แผนอาหาร และราคาที่ผู้เข้าพักเลือกจะถูกส่งไปยัง HMS ในโครงสร้าง BookingPushRQ เอนด์พอยต์เดียวกันนี้ใช้สำหรับการยกเลิกและการแก้ไขด้วย โดยส่ง type เป็น Cancel หรือ Modify ดูขั้นตอนตั้งแต่ต้นจนจบได้ที่คู่มือขั้นตอนการจอง
ส่งการจอง (BookingPushRQ)#
/external/online/channel/bookingการยืนยันตัวตน: Authorization: Bearer · เนื้อหา: application/json
บันทึกการจองหนึ่งรายการหรือมากกว่าลงใน HMS ID คือรหัสการจองที่ไม่ซ้ำกันซึ่งสร้างจากฝั่งของคุณ การส่ง Modify ด้วย ID เดิมจะอัปเดตรายการ ส่วน Cancel จะยกเลิกรายการ เมื่อขายห้องที่มีประเภทห้องพักและแผนอาหารเดียวกันหลายห้อง แต่ละห้องจะเป็นรายการ RoomStays แยกกัน โดย NumberOfUnits เป็น 1, 2, 3…
สำหรับประเภทการชำระเงินบัตรเครดิต (9) ให้ส่งข้อมูลบัตรใน PaymentCard และไม่ต้องส่งฟิลด์นี้สำหรับประเภทการชำระเงินอื่น การจัดการข้อมูลบัตรทำให้คุณอยู่ในขอบเขตของ PCI DSS
เนื้อหาคำขอ
BookingPushRQ.Bookings[]object[]จำเป็นhotelIDstringจำเป็นIDstringจำเป็นtypestringจำเป็นBookModifyCancelcreateDateTimedatetimecheckinDate / checkoutDatedateจำเป็นYYYY-MM-DDRoomStays[]object[]จำเป็นroomTypeIDstringจำเป็นitems[].id จากรายการห้องพักroomNamestringratePlanIDstringจำเป็นaccommodationTypes[].id จากรายการห้องพักratePlanNamestringtypestringBookModifyCancelNumberOfUnitsstringจำเป็นcheckinDate / checkoutDatedateจำเป็นGuestCountobjectจำเป็นadult และ childPerDayRatesobjectcurrency และ PerDayRate[]: stayDate, baseRate, hotelServiceFeesTotalobjectจำเป็นamountAfterTaxes, amountOfTaxes, currencyPaymentCardobjectCardHolder{fullname, address, country, city}, cardNumber, expireDate (MMYY), cardCode, seriesCode (CVV)PrimaryGuests[]object[]จำเป็นname, surname, PhoneNumber, email, CountryCodeChildGuests[]object[]age เป็นฟิลด์ที่จำเป็น ส่วน name, surname, year, date, detail ไม่บังคับSpecialRequest[]object[]text จะถูกนำไปต่อรวมในหมายเหตุของการจองextras[]object[]name, note, person, piece, price, priceMode, priceTotal, stockID (id จากรายการแพ็กเกจ)Totalobjectจำเป็นamountAfterTaxes, amountOfTaxes, extraTotal, currencyการตอบกลับ
200 ออบเจ็กต์ BookingPushRS เมื่อสำเร็จจะมี Success: true และ ID การจองใน HMS (HMS_ID) เมื่อไม่สำเร็จจะมีข้อความ Error และ BookingConfirmNumbers[].Error[]
การตอบกลับเมื่อเกิดข้อผิดพลาด
- 200
Error: No available data could be found. (01, เนื้อหาว่างหรือแยกวิเคราะห์ไม่ได้) · Hotel registration not found on HMS. (02, โรงแรมไม่ได้เชื่อมกับช่องทางออนไลน์) · Could not register. · Failed to parse information.
curl -X POST "https://test.hms.gen.tr/external/online/channel/booking" \
-H "Authorization: Bearer $HMS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"BookingPushRQ": {
"Bookings": [
{
"hotelID": "1000",
"ID": "4811174883",
"type": "Book",
"createDateTime": "2026-08-01T08:32:11:293Z",
"checkinDate": "2026-08-18",
"checkoutDate": "2026-08-20",
"RoomStays": [
{
"roomTypeID": "2",
"roomName": "ห้องสแตนดาร์ด",
"ratePlanID": "2",
"ratePlanName": "รวมอาหารเช้า",
"type": "Book",
"NumberOfUnits": "1",
"checkinDate": "2026-08-18",
"checkoutDate": "2026-08-20",
"GuestCount": {
"adult": 2,
"child": 1
},
"PerDayRates": {
"currency": "TRY",
"PerDayRate": [
{
"stayDate": "2026-08-18",
"baseRate": "965.00",
"hotelServiceFees": "0"
},
{
"stayDate": "2026-08-19",
"baseRate": "965.00",
"hotelServiceFees": "0"
}
]
},
"Total": {
"amountAfterTaxes": "1930.00",
"amountOfTaxes": "175.45",
"currency": "TRY"
}
}
],
"PrimaryGuests": [
{
"name": "Ayşe",
"surname": "Demir",
"PhoneNumber": "+905551112233",
"email": "[email protected]",
"CountryCode": "TR"
}
],
"ChildGuests": [
{
"age": 7
}
],
"SpecialRequest": [
{
"text": "เช็กอินดึก ประมาณ 23:00 น."
}
],
"extras": [
{
"name": "อาหารเย็น",
"note": "",
"person": 2,
"piece": 1,
"price": "400.00",
"priceMode": null,
"priceTotal": "400.00",
"stockID": 12
}
],
"Total": {
"amountAfterTaxes": "2330.00",
"amountOfTaxes": "211.82",
"extraTotal": "400.00",
"currency": "TRY"
}
}
]
}
}'const res = await fetch("https://test.hms.gen.tr/external/online/channel/booking", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.HMS_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"BookingPushRQ": {
"Bookings": [
{
"hotelID": "1000",
"ID": "4811174883",
"type": "Book",
"createDateTime": "2026-08-01T08:32:11:293Z",
"checkinDate": "2026-08-18",
"checkoutDate": "2026-08-20",
"RoomStays": [
{
"roomTypeID": "2",
"roomName": "ห้องสแตนดาร์ด",
"ratePlanID": "2",
"ratePlanName": "รวมอาหารเช้า",
"type": "Book",
"NumberOfUnits": "1",
"checkinDate": "2026-08-18",
"checkoutDate": "2026-08-20",
"GuestCount": {
"adult": 2,
"child": 1
},
"PerDayRates": {
"currency": "TRY",
"PerDayRate": [
{
"stayDate": "2026-08-18",
"baseRate": "965.00",
"hotelServiceFees": "0"
},
{
"stayDate": "2026-08-19",
"baseRate": "965.00",
"hotelServiceFees": "0"
}
]
},
"Total": {
"amountAfterTaxes": "1930.00",
"amountOfTaxes": "175.45",
"currency": "TRY"
}
}
],
"PrimaryGuests": [
{
"name": "Ayşe",
"surname": "Demir",
"PhoneNumber": "+905551112233",
"email": "[email protected]",
"CountryCode": "TR"
}
],
"ChildGuests": [
{
"age": 7
}
],
"SpecialRequest": [
{
"text": "เช็กอินดึก ประมาณ 23:00 น."
}
],
"extras": [
{
"name": "อาหารเย็น",
"note": "",
"person": 2,
"piece": 1,
"price": "400.00",
"priceMode": null,
"priceTotal": "400.00",
"stockID": 12
}
],
"Total": {
"amountAfterTaxes": "2330.00",
"amountOfTaxes": "211.82",
"extraTotal": "400.00",
"currency": "TRY"
}
}
]
}
})
});
const data = await res.json();$ch = curl_init('https://test.hms.gen.tr/external/online/channel/booking');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('HMS_TOKEN'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'BookingPushRQ' => [
'Bookings' => [
[
'hotelID' => '1000',
'ID' => '4811174883',
'type' => 'Book',
'createDateTime' => '2026-08-01T08:32:11:293Z',
'checkinDate' => '2026-08-18',
'checkoutDate' => '2026-08-20',
'RoomStays' => [
[
'roomTypeID' => '2',
'roomName' => 'ห้องสแตนดาร์ด',
'ratePlanID' => '2',
'ratePlanName' => 'รวมอาหารเช้า',
'type' => 'Book',
'NumberOfUnits' => '1',
'checkinDate' => '2026-08-18',
'checkoutDate' => '2026-08-20',
'GuestCount' => [
'adult' => 2,
'child' => 1,
],
'PerDayRates' => [
'currency' => 'TRY',
'PerDayRate' => [
[
'stayDate' => '2026-08-18',
'baseRate' => '965.00',
'hotelServiceFees' => '0',
],
[
'stayDate' => '2026-08-19',
'baseRate' => '965.00',
'hotelServiceFees' => '0',
],
],
],
'Total' => [
'amountAfterTaxes' => '1930.00',
'amountOfTaxes' => '175.45',
'currency' => 'TRY',
],
],
],
'PrimaryGuests' => [
[
'name' => 'Ayşe',
'surname' => 'Demir',
'PhoneNumber' => '+905551112233',
'email' => '[email protected]',
'CountryCode' => 'TR',
],
],
'ChildGuests' => [
[
'age' => 7,
],
],
'SpecialRequest' => [
[
'text' => 'เช็กอินดึก ประมาณ 23:00 น.',
],
],
'extras' => [
[
'name' => 'อาหารเย็น',
'note' => '',
'person' => 2,
'piece' => 1,
'price' => '400.00',
'priceMode' => null,
'priceTotal' => '400.00',
'stockID' => 12,
],
],
'Total' => [
'amountAfterTaxes' => '2330.00',
'amountOfTaxes' => '211.82',
'extraTotal' => '400.00',
'currency' => 'TRY',
],
],
],
],
]),
]);
$data = json_decode(curl_exec($ch), true);{
"BookingPushRS": {
"Success": true,
"BookingConfirmNumbers": [
{
"confirmTime": 1755500000,
"bookingID": 48213,
"bookingType": "Book",
"HMS_ID": 48213
}
]
}
}{
"BookingPushRS": {
"Error": "Hotel registration not found on HMS.",
"BookingConfirmNumbers": [
{
"bookingID": null,
"bookingType": null,
"confirmTime": 1755500000,
"Error": [
{
"code": "02",
"text": "Hotel registration not found on HMS."
}
]
}
]
}
}