ریکاوری بلیت های فعال و یا آخرین بلیت های فعال کاربر

سلام
هدف از این تسک، بازیابی بلیت بوده. یعنی در صورتی که بلیت خود را گم گرده باشیم و یا حتی گم نکرده باشیم و بلیت رو داریم و دنبال دانلود PDF اش هستیم می شد از این ریسورس برای دریافت به بلیت مورد نظرمان اقدام کنیم.
این ریسورس بلیت هایی که در حال حاضر رویداد فعالی داشته باشن رو لیست می کنه و برای رویدادهای گذشته کاربری نخواهد داشت.

از آنجایی که چیزهایی رفته رفته شکل های گوناگون به خود می گیرند و معنی شان عوض می شود، اتفاقی بوده که برای این ریسورس هم افتاده.
البته کاربرد اصلی خودش رو حفظ کرده و تنها مسئله ای که بهش اضافه شده اینه که در صورتی که به ایوند لاگین کرده باشیم (توکن اهراز هویت مان در دست راستمان باشد) می شود بدون نیاز به تعیین کد تائیدیه ای به اطلاعات مربوطه دسترسی داشت.

کاربرد اول: بازیابی بلیت برای مهمانان گرامی
برای این منظور نیاز است ابتدا یکی از ایمیل، شماره موبایل، و یا کد بلیت را از کاربر دریافت کنید تا به شخص مورد نظر کد تائیدیه ای ارسال شود.
در صورتی که ایمیل گرفته شود به کاربر کد تائیدیه ای ایمیل خواهد شد.
برای شماره موبایل هم پیامک خواهد شد.
در صورتی که کد بلیت را وارد کرده باشه، هم برای کاربر پیامک و هم ایمیلی باید ارسال شود.

برای این منظور همچین درخواستی ارسال می کنیم:

POST https://api.evand.com/identifiers/tokens
Headers:
  - Content-Type: application/json
{
"identifier": "XYZ",
"identifier_type": "XYZ"
}

برای مقدار فیلد identifier_type یکی از mobile - email - ticket را نیاز هست ارسال نمایید.
و برای identifier  هم مقدار متناظر با نوع آی دی نیازه مقدارش را ارسال کنید. مثلا برای ایمیل مقداری همچون hossein@gmail.com و یا برای موبایل هم 09140000000 و بلیت هم همینطور. کد بلیت را نیاز است ارسال نمایید.

Sample 1:
{
"identifier": "9140000000",
"identifier_type": "mobile"
}

Sample 2:
{
"identifier": "hossein@gmail.com",
"identifier_type": "email"
}

Sample 3:
{
"identifier": "j30gh",
"identifier_type": "ticket"
}

پاسخ ریسورس مربوطه همچین چیزی خواهد بود:

{
  "data": {
    "pseudo_token": 4,
    "verification_code_life_time_in_seconds": 900,
    "_links": {
      "verification": "\/identifiers\/tokens\/4\/verification"
    }
  }
}

در اینجا مقدار pseudo_token برایمان مهم است زیرا نیاز است به ریسورس ای که در آدرسش باید این عدد را قرار دهیم و سپس درخواست دیگری ارسال نمایید.
درخواست ارسالی باید شامل کد تائیدیه ای که به کاربر ارسال شده بود و مربوط به همین درخواست می شد باشد.
البته آدرس ریسورس مربوطه در فیلد _links -> verification هم تعبیه شده و می شه ازش استفاده کرد.

نکته: اعتبار کد تائیدیه ارسال شده به کاربر 900 ثانیه است! یا به عبارتی ۱۵ دقیقه معتبر خواهد بود! به به.

خطاهای دریافتی
در صورتی که اطلاعات ارسالی مثل نوع آی دی را اشتباه ارسال کنید خطایی همچون زیر خواهیم داشت:

{
  "message": "خطا در مقادیر ورودی",
  "errors": {
    "identifier_type": [
      "Supported identifier types are (email, mobile, ticket)"
    ]
  },
  "status_code": 422,
}

و یا در صورت نامعتبر بودن شماره موبایل:

{
  "message": "خطا در مقادیر ورودی",
  "errors": {
    "identifier": [
      "Identifier is not a valid mobile"
    ]
  },
  "status_code": 422,
}

لطفا در صورتی که شماره موبایل و یا ایمیل گرفته می شه از صحت مقدار مربوطه اطمینان حاصل نمایید.


مرحله بعد: به تائید رساندن درخواست و دریافت توکن نهایی
بعد از ارسال درخواست فوق نیاز است که کد ۵ رقمی ارسال شده به کاربر را ازش گرفته و به ریسورس مربوطه ارسال نمایید تا توکن ای برای دسترسی برای برخی ریسورس ها در اختیارتان قرار گیرد:

POST https://api.evand.com/identifiers/tokens/pseudo_token/verification
Headers:
  - Content-Type: application/json
{
"verification_code": "FIVE_DIGIT_NUMBER"
}

اینجا در آدرس ریسورس فوق نیازه که pseudo_token که در مرحله قبل برای درخواست مورد نظر صادر می شه رو قرار دهید.
برای مقدار verification_code هم که عدد ۵ رقمی به کاربر ارسال شده رو نیازه قرار دهید و درخواست خود را ارسال نمایید.

خطا:
در صورت نامعتبر بودن کد تائیدیه با همچین خطایی مواجه می شوید:

{
  "message": "خطا در مقادیر ورودی",
  "errors": {
    "verification_code": [
      "کد تاییدیه نامعتبر است"
    ]
  },
  "status_code": 422,
}

در صورت موفقیت آمیر بودن عملیات، پاسخ ریسورس بدین شکل خواهد بود:

{
  "data": {
    "token": "184a2ab8-dd3e-4582-a22b-425fbe7d583a"
  }
}

همانطور که ملاحظه می کنید یه توکن نی ناش ناش بهتون برگشت داده می شه. (شکلک چه زیبا)

نکته: اعتبار این توکن دریافتی که می شه باهاش به برخی ریسورس ها دسترسی داشت، به مدت ۳۶۰۰ ثانیه است. یا به عبارت دیگر، ۱ ساعت عمر دارد.


مرحله بعد: دریافت لیست بلیت های فعال
خوب بعد از گرفتن توکن در مرحله قبل، نیازه توکن رو از طریق هدر به ریسورس مربوطه ارسال نمایید.
هدری که باید ارسال نمایید Identifier-Token خواهد بود و مقدارش هم توکن گرفته شده از مرحله قبل باید باشد.

درخواست خود را بدین شکل ارسال می کنید:

GET https://api.evand.com/ordered-tickets/of-active-events
Headers:
  - Identifier-Token: TOKEN_FROM_PREVIOUS_STEP
{
    "data": [
        {
            "id": 16494,
            "name": "مسابقات بین استارت آپی دو می‌شباشد",
            "slug": "dota2",
            "tickets": [
                {
                    "code": "2xo4",
                    "name": "حسین بقایی"
                }
            ]
        }
    ],
    "meta": {
        "pagination": {
            "total": 1,
            "count": 1,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": []
        }
    }
}

با این ریسورس مثل دیگر ریسورس ها می تونید عمل کنید و تعداد آیتم ها رو کم و زیاد کنید:
?per_page=5 
و یا به دیگر صفحات برید: 
?page=2

مرحله بعد: درخواست دانلود فایل PDF بلیت ای:
بعد از نمایش لیست بلیت ها به کاربر، ممکنه کاربری بخواد فایل PDF مربوط به بلیت ای رو دانلود کنه.
برای این منظور درخواستی به ریسورس زیر ارسال می کنم و توکن گرفته شده در ریسورس های قبلی را هم نیازه به همین ریسورس از طریق هدر ارسال نماییم:

POST https://api.evand.com/ordered-tickets/TICKET_CODE/download
Headers:
  - Identifier-Token: TOKEN_FROM_PREVIOUS_STEP
{
    "file": "https://static.evand.net/....pdf"
}


درصورتی که دسترسی نداشته باشید، با خطای ۴۰۳ روبرو خواهید شد.
در صورت موفقیت آمیز بودن درخواست، لینک به PDF مورد نظر از طریق فیلد file در دسترس خواهد بود.


کاربرد دوم: دریافت لیست برای کاربران وارد شده به سیستم (توکن در دست ها)
تغییر رفتاری که جدیدا بر روی این ریسورس اعمال شده، همین بوده است. در اصل بچه ها همین خروجی که این ریسورس به ما می ده رو می خواستن، با این تفاوت که نیازی به اهراز هویت مجدد و متفاوت نباشه و با همان توکن JWT که بعد از ورود در اختیار داریم هم بشه ازش استفاده کرد.

برای این منظور کافیه مثل باقیه ریسورس ها عمل کنیم و توکن مون رو از طریق هدر مربوطه ارسال کنیم
GET https://api.evand.com/ordered-tickets/of-active-events
Headers:
  - Authorization: Bearer JWT_TOKEN

نکته ای که وجود داره اینه که هر دو توکن رو از طریق هدر می تونید ارسال کنید: یعنی این شکلی:

Headers:
  - Identifier-Token: TOKEN_FROM_PREVIOUS_STEP
  - Authorization: Bearer JWT_TOKEN

و اتفاقی که می افته اینه که Identifie-Token به دیگر توکن اولویت داره و در صورتی که نامعتبر باشه خطا می گیرید و از توکن تعیین شده در هدر بعدی استفاده نخواهد شد.
پس مراقب باشید که اگه Identifier-Token ای ارسال می کنید، معتبر باشه.


دانلود فایل PDF بلیت برای کاربران ورود کرده به سیستم (با توکن JWT)
خوب دقیقا مثل همین ریسورس فوق که توضیح دادیم برای همین ریسورس هم همین کارو نیازه انجام بدید.
یعنی هدر مربوطه Authorization: xxx رو ارسال کنید:

POST https://api.evand.com/ordered-tickets/TICKET_CODE/download
Headers:
  - Authorization: Bearer JWT_TOKEN
{
    "file": "https://static.evand.net/....pdf"
}

همین.

نظرات

پست‌های معروف از این وبلاگ

لیست کاربران نشان شده - سرویس کانکت

استفاده از Refresh Token جهت دریافت توکن‌های معتبر جدید (کانکت)

پروفایل عمومی کاربران کانکت