مستندات

جست‌وجو در مستندات

نام اندپوینت، موضوع یا کلیدواژه را بنویسید

احراز هویت در Travel API

احراز هویت در Travel API مبتنی بر نشست است. یک بار اطلاعات ورود را با یک SessionId مبادله می‌کنید و از آن به بعد همین شناسه را همراه همهٔ درخواست‌های دیگر می‌فرستید.

کلید API جداگانه‌ای وجود ندارد. SessionIdای که Authenticate/CreateSession برمی‌گرداند، همان اعتبارنامه‌ای است که در هر فراخوانی ارسال می‌کنید. از آن مثل رمز عبور محافظت کنید.

دریافت اطلاعات ورود#

همراه حساب کاربری‌تان سه مقدار دریافت می‌کنید:

مقدارمثالتوضیح
OfficeIdOFC-4821دفتری (کیف پولی) که هزینهٔ رزروها از آن کسر می‌شود.
UserNamejane.doeکاربری که عضو این دفتر است.
Passwordyour-passwordرمز عبور کاربر. آن را فقط سمت سرور نگه دارید.

ساخت نشست#

این سه مقدار را به Authenticate/CreateSession بفرستید. پاسخ، SessionId را در خود دارد.

POST/Authenticate/CreateSession

پارامترهای بدنه#

نامنوعالزامیتوضیح
OfficeIdstringالزامیشناسهٔ دفتر شما.
UserNamestringالزامینام کاربری.
Passwordstringالزامیرمز عبور کاربر.
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"]

فیلدهای پاسخ#

فیلدنوعتوضیح
Successbooleanدر صورت موفقیت true.
SessionIdstringشناسهٔ نشست. آن را همراه همهٔ درخواست‌های بعدی بفرستید. در صورت خطا null.
Errorobjectدر صورت موفقیت 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 را فراخوانی کنید.

POST/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دفتر برای این اندپوینت مجوز ندارد.درخواست فعال‌سازی آن مجوز را بدهید.

فهرست کامل را در مرجع خطاها ببینید.

ویرایش این صفحه در گیت‌هابمشکلی دیدید؟ از پنل ← پشتیبانی خبرمان کنید.