احراز هویت
دسترسی از طریق یک حساب شریک تجاری فراهم میشود که HMS تعریف میکند. هر حساب شریک تجاری یک apiKey و یک apiSecret دریافت میکند و HMS تعیین میکند این حساب به کدام هتلها دسترسی داشته باشد. اندپوینت لاگین این اطلاعات را با یک توکن وابسته به هتل مبادله میکند.
لاگین و توکن#
POST /external/public/login HTTP/1.1
Host: test.hms.gen.tr
Content-Type: application/x-www-form-urlencoded
apiKey=5y94tLmALIKDyUVdEPlAAjg5xWGQNgQtnALlV4%2BAm7Q%3D&apiSecret=a143d640…&hotelCode=1000{
"success": true,
"hotelCode": "1000",
"token": "eyJlbmREYXRlIjp7ImRhdGUiOiIyMDI2LTA5LTE1IDEwOjI0OjMxLjAwMDAwMCIs…",
"hotelSeoUrl": "demo-otel"
}| فیلد | توضیح |
|---|---|
apiKey | کلید شریک تجاری. شامل نویسههای base64 است، بنابراین در بدنه فرم باید URL-encode شود (+ ← %2B، = ← %3D). کتابخانههای HTTP این کار را خودکار انجام میدهند. |
apiSecret | کلید محرمانه. آن را فقط سمت سرور نگه دارید و هرگز در کد مرورگر یا اپلیکیشن موبایل قرار ندهید. |
hotelCode | شناسه هتل در HMS. اگر شریک تجاری برای این هتل مجوز نداشته باشد، hotel_permission_is_not_found برگردانده میشود. |
hotelSeoUrl | نامک SEO هتل. فقط موتور رزرو خود HMS بهجای hotelCode از آن استفاده میکند؛ یکپارچهسازیهای شخص ثالث hotelCode را ارسال میکنند. |
هدر Bearer#
همه اندپوینتها بهجز لاگین، توکن را در هدر Authorization دریافت میکنند:
GET /external/currencies HTTP/1.1
Host: test.hms.gen.tr
Authorization: Bearer eyJlbmREYXRlIjp7ImRhdGUiOiIyMDI2LTA5LTE1IDEwOjI0OjMxLjAwMDAwMCIs…اگر هدر ارسال نشود، قالب نادرستی داشته باشد (بدون پیشوند Bearer) یا توکن ناشناخته باشد، API کد 401 برمیگرداند:
{
"success": false,
"error": "Authentication required"
}مدت اعتبار و تمدید توکن#
- توکن 7 روز معتبر است. پیش از انقضا با لاگین دوباره آن را تمدید کنید؛ لاگین سبک است و میتوان آن را برای همان هتل تکرار کرد.
- توکن را تجزیه نکنید. اگرچه ساختاری کدگذاریشده با base64 دارد، قالب آن تضمینشده نیست؛ آن را بهصورت یک رشته مبهم (opaque) ذخیره و ارسال کنید.
- در صورت دریافت
401، یک بار دیگر لاگین کنید و درخواست را تکرار کنید؛401دوم یعنی جفت کلید یا مجوز هتل تغییر کرده است.
وابستگی به هتل#
هر توکن به یک هتل وابسته است. پارامتر hotelID در اندپوینتها باید با همان هتل یکسان باشد؛ درخواست برای هتل دیگر به خطای مجوز یا نتیجه خالی منجر میشود. در یکپارچهسازیهای چندهتلی، برای هر هتل توکن جداگانه بگیرید و آن را به تفکیک هتل کش کنید.
خطاهای لاگین#
| message | معنا |
|---|---|
partner_is_not_found | جفت apiKey / apiSecret مطابقت نداشت. کلیدها و URL-encoding آنها را بررسی کنید. |
hotel_is_not_found | هیچ هتلی با hotelSeoUrl مطابقت نداشت. |
hotel_permission_is_not_found | شریک تجاری برای این هتل مجوز ندارد یا مجوز غیرفعال است. با پشتیبانی HMS تماس بگیرید. |
این خطاها با HTTP 200 و همراه با success: false و token: null برمیگردند.