احراز هویت در Travel API
احراز هویت در Travel API مبتنی بر نشست است. یک بار اطلاعات ورود را با یک SessionId مبادله میکنید و از آن به بعد همین شناسه را همراه همهٔ درخواستهای دیگر میفرستید.
کلید API جداگانهای وجود ندارد. SessionIdای که Authenticate/CreateSession برمیگرداند، همان اعتبارنامهای است که در هر فراخوانی ارسال میکنید. از آن مثل رمز عبور محافظت کنید.
دریافت اطلاعات ورود#
همراه حساب کاربریتان سه مقدار دریافت میکنید:
| مقدار | مثال | توضیح |
|---|---|---|
OfficeId | OFC-4821 | دفتری (کیف پولی) که هزینهٔ رزروها از آن کسر میشود. |
UserName | jane.doe | کاربری که عضو این دفتر است. |
Password | your-password | رمز عبور کاربر. آن را فقط سمت سرور نگه دارید. |
ساخت نشست#
این سه مقدار را به Authenticate/CreateSession بفرستید. پاسخ، SessionId را در خود دارد.
پارامترهای بدنه#
| نام | نوع | الزامی | توضیح |
|---|---|---|---|
OfficeId | string | الزامی | شناسهٔ دفتر شما. |
UserName | string | الزامی | نام کاربری. |
Password | string | الزامی | رمز عبور کاربر. |
curl -X POST https://api.simorghapi.com/api/Authenticate/CreateSession \
-H "Content-Type: application/json" \
-d '{
"OfficeId": "OFC-4821",
"UserName": "jane.doe",
"Password": "your-password"
}'const res = await fetch("https://api.simorghapi.com/api/Authenticate/CreateSession", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
OfficeId: "OFC-4821",
UserName: "jane.doe",
Password: "your-password"
})
});
const { SessionId } = await res.json();import requests
res = requests.post(
"https://api.simorghapi.com/api/Authenticate/CreateSession",
json={
"OfficeId": "OFC-4821",
"UserName": "jane.doe",
"Password": "your-password",
},
)
session_id = res.json()["SessionId"]فیلدهای پاسخ#
| فیلد | نوع | توضیح |
|---|---|---|
Success | boolean | در صورت موفقیت true. |
SessionId | string | شناسهٔ نشست. آن را همراه همهٔ درخواستهای بعدی بفرستید. در صورت خطا null. |
Error | object | در صورت موفقیت null، وگرنه { "Id", "Message" }. |
{
"Success": true,
"SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f",
"Error": null
}ارسال نشست همراه هر درخواست#
SessionId را در همهٔ اندپوینتهای محافظتشده بفرستید. در درخواستهای POST و PUT آن را در بدنهٔ JSON بگذارید و در درخواستهای GET در کوئریاسترینگ. API هر دو حالت را میخواند.
# POST: SessionId in the body
curl -X POST https://api.simorghapi.com/api/Common/CreditBalance \
-H "Content-Type: application/json" \
-d '{ "SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f" }'
# GET: SessionId in the query string
curl "https://api.simorghapi.com/api/Activity/v2/products?SessionId=8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f&per_page=20"const sessionId = "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f";
// POST: SessionId in the body
await fetch("https://api.simorghapi.com/api/Common/CreditBalance", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ SessionId: sessionId })
});
// GET: SessionId in the query string
await fetch("https://api.simorghapi.com/api/Activity/v2/products?SessionId=" + sessionId + "&per_page=20");session_id = "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f"
# POST: SessionId in the body
requests.post(
"https://api.simorghapi.com/api/Common/CreditBalance",
json={"SessionId": session_id},
)
# GET: SessionId in the query string
requests.get(
"https://api.simorghapi.com/api/Activity/v2/products",
params={"SessionId": session_id, "per_page": 20},
)طول عمر نشست#
نشست پس از مدتی بیفعالیتی منقضی میشود. هر فراخوانی موفق آن را تمدید میکند؛ بنابراین یک یکپارچهسازی فعال همان SessionId را نگه میدارد. وقتی فراخوانیای Err0101001 یا Err0101002 برمیگرداند، نشست از بین رفته است. یک نشست جدید بسازید و درخواست را یک بار دیگر تکرار کنید.
پیش از هر درخواست CreateSession را صدا نزنید. یک بار احراز هویت کنید، شناسه را کش کنید و تا زمان انقضا از همان استفاده کنید.
پایان دادن به نشست#
برای بستن نشست پیش از انقضا، Authenticate/EndSession را فراخوانی کنید.
{ "SessionId": "8f3c81d2-4a5b-4c6d-9e0f-1a2b3c4d5e6f" }سطوح دسترسی#
هر اندپوینت به مجوزی نیاز دارد که باید برای دفتر شما فعال شده باشد. اگر دفتر شما اجازهٔ فراخوانی یک اندپوینت را نداشته باشد، درخواست Err0101006 برمیگرداند. برای فعالشدن مجوز با مدیر حساب خود تماس بگیرید. هر صفحهٔ مرجع، مجوز مورد نیاز را در بخش دسترسی ذکر کرده است.
مسیر جایگزین v2#
میتوانید بهجای آن از v2/Authenticate/CreateSession هم احراز هویت کنید. عملیات و محل نگهداری نشستها یکی است؛ پس SessionId هر کدام از این دو مسیر همهجا کار میکند. یکی را انتخاب کنید و به همان پایبند بمانید.
اشتباهات رایج#
- قراردادن رمز عبور یا
SessionIdدر مرورگر یا اپلیکیشن موبایل. جای هر دو روی سرور شماست. - فراخوانی
CreateSessionدر هر درخواست. یک بار این کار را انجام دهید و شناسه را دوباره به کار ببرید. - قراردادن
SessionIdدر URL درخواستPOST. آن را در بدنه بفرستید. - مدیریتنکردن انقضا.
Err0101001وErr0101002را بگیرید، دوباره احراز هویت کنید و یک بار درخواست را تکرار کنید.
خطاهای احراز هویت#
| کد | معنا | راهحل |
|---|---|---|
Err0101001 | نشست ارسال نشده یا نامعتبر است. | یک نشست جدید بسازید. |
Err0101002 | نشست منقضی شده است. | یک نشست جدید بسازید. |
Err0101003 | نام کاربری یا رمز عبور اشتباه است. | اطلاعات ورود آن دفتر را بررسی کنید. |
Err0101004 | کاربر به آن دفتر دسترسی ندارد. | از دفتری استفاده کنید که کاربر عضو آن است. |
Err0101005 | حساب کاربری تأیید نشده است. | با مدیر حساب خود تماس بگیرید. |
Err0101006 | دفتر برای این اندپوینت مجوز ندارد. | درخواست فعالسازی آن مجوز را بدهید. |
فهرست کامل را در مرجع خطاها ببینید.