بازیابی بلیت - نسخه جدید و با تجربه متفاوت

سلام سلام صد تا سلام


برای بازیابی بلیت، که قبلا داشتیم، به چه صورت بودنش دقیق خاطر نیست. ولی قابل دانلود نبود و بلیت ایمیل می شد. یا پیامک می شد و یا از طریق تلگرام اینا ارسال می شد.
 
ولی چیزی که خواسته شد این بود که قابل دانلود باشه.مورد بعدی هم اینکه طرف احتمالا کد بلیتش رو یادش رفته و برای همین می خواد بازیابی کنه و  در نتیجه با استفاده از ایمیل یا موبایل بشه بازیابی کرد.

ریسورسی های متفاوتی برای این کار نوشته شده. دلیل این موضوع هم پشتیبانی از نیازهای مطرح شده جدید بود و هم اینکه می شه از این روش برای ورود به وبینار استفاده کرد که باعث می شد با استفاده از چیزی که می زنیم برای موارد دیگه ای هم استفاده کرد. از آنجایی که عملا موارد یکسانی در بر دارند.

در عمل می شه بجای ایمیل و موبایل، از طریق بلیت احراز هویت کنیم و عمل بعدش هر چی می خواد باشه انجام بشه، مثل ورود به وبنیار.

از ریسورس های جدید که برای این منظور نوشته شدن هم به همین منظور، برای تایید هویت استفاده می شه، که بعد از تایید هویت، توکن ای برای دانلود بلیت یا نمایش بلیت ها فعال استفاده می شه.


اینا یه خلاصه توضیح بود. بریم در عمل ببینیم چیکار باید بکنیم تا بلیتی رو بازیابی یا در حقیقت دانلود کنیم.


بازیابی بلیت

مرحله اول- درخواست توکن:


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


درخواست اولمون به ریسورس زیر خواهد بود:
POST https://api.evand.com/identifiers/tokens

مقداری که نیازه به این ریسورس ارسال شن به شرح زیر می باشد:
{

    "identifier_type": "email",

    "identifier" : "a_valid_email_address@gmail.com"

}

و یا این یکی:
{

    "identifier_type": "mobile",

    "identifier" : "0140000000"

}


غیر اینا باشه قبول نیست ها :)

مقدار identifier_type می تونه ایمیل (email) و یا موبایل (mobile) باشه. البته بلیت هم می تونه باشه ولی کامل پیاده سازی نشده.

مقدار identifier هم بسته به مقدار identifier_type تعیین می شه. اگه ایمیل تعیین کردید که باید ایمیلی بدید و در صورتی که موبایل تعیین کردید، موبایل معتبری بدید.

در حقیقت از این ریسورس هدف اینه که این identifier رو به تایید برسونیم. یعنی مطمئن شیم که برای کسی هست که درخواست می ده. سپس از همین identifier که به بلیت یا بلیت هایی می تونه وصل شده باشه، برای بازیابی شون می خواهیم در مراحل بعدی استفاده کنیم.


مقدار برگشی ریسورس، چیزی مثل این خواهد بود:
{

    "data": {

        "pseudo_token": 2,

        "verification_code_life_time_in_seconds": 900,

        "_links": {

            "verification": "/identifiers/tokens/2/verification"

        }

    }

}


چیزی که اینجا ما بهش نیاز داریم pseudo_token هست. یا می تونیم از _links -> verification رو بگیریم که ریسورس دیگه ای هست و درخواست بعدی رو مستقیم بهش بزنیم.

مقدار verification_code_life_time_in_seconds هم مدت اعتبار pseudo_token رو تعیین می کنه.  بعد از گذشت زمان تعیین شده، درخواست های بعدی که نیازه زده بشه موفقیت آمیز نخواهد بود و نیازه مراحل از ابتدا سپری بشه.

بعد از ثبت درخواست، به کد ۵ رقمی به عنوان کد تاییدیه هویت به موبایل یا ایمیل تعیین شده ارسال می شه. که تو مرحله بعدی ازش استفاده می کنیم.


مرحله بعد - تایید هویت

الان نوبت اینه که لینک ریسورس بعدی رو آماده کنیم و یا از لینک آماده تو دیتای برگشیتی از ریسورس قبلی استفاده کنیم (_links -> verification) تا درخواست بعدی رو بهش بزنیم.


درخواست بعدی، برای تایید هویت رو باید به ریسورس زیر بزنیم:
POST https://api.evand.com/identifiers/tokens/{pseudo_token}/verification

در لینک ریسورس فوق، بجای pseudo_token مقدار مربوطه رو نیازه جایگزین کنید. و مقداری که نیازه به ریسورس ارسال بشه از این شرحه:
{

     "verification_code": 00000

}

که بجای 00000 مقدار واقعی که به ایمیل یا موبایل تعیین شده ارسال می شه باید وارد کنید و درخواست خود رو ارسال کنید.


در صورتی که کد تاییدیه صحیح باشه و منقضی نشده باشه، توکن نهایی در اختیار شما قرار می گیره  که البته ایشون هم زمان انقضاء داره و برای همیشه نمی تونید بهش دل ببندید:
{

    "data": {

        "token": "aab15116-8010-4968-aa07-cff2a1701d32"

    }

}


از توکن برگشت داده شده، می شه در ریسورس هایی که ازش پشتیبانی می کنن استفاده کرد.
در حقیقت توکن برای اینه که اشاره به identifier تایید شده داره که ریسورس‌هایی که ازش پشتیبانی می کنن، به identifier رجوع کرده و ازش برای کارهای مورد نظر خود استفاده می کنن.

در این مرحله کار شما این خواهد بود که تا یه ساعت آینده از توکن با چنگ و دندون محافظت کنید تا مراحل بعدی.

در حقیقت این توکن هم قابل منقضی شدن هست که مقدار پیش فرض یک ساعت هست ولی اینجا بهش اشاره ای نشده متاسفانه :(




بریم مرحله بعد - لیست بلیت‌های رویدادهای فعال

به مرحله بعد خوش آمدید :)


در این مرحله از بازیابی بلیت، قصد داریم بلیت های فعال خریداری شده با identifier ای که در مرحله اول تعیین شده بود و توکنش هم در اختیارمون هست رو لیست کنیم و کاربر از بینشون می تونه انتخاب کنه که کدام رو می خواد دانلود کنه که در مراحل بعدی بشه دانلودش کرد.

در حقیقت فرض کنید از چند رویداد بلیت خرید کرده که بلیت ها که لیست می شن، می تونن بر اساس رویداد بلیت مربوطه، بلیت رو انتخاب کنن که بشه دانلودش کرد.

در حقیقت در این مرحله صرفا به کد بلیت قراره دسترسی داشته باشیم. و دانلودش در مراحل بعد،
توسط ریسورس خودش قابل دانلود خواهد بود.


خوب بریم سر نحوه ارسال درخواست برای این مرحله.


برای دریافت لیست بلیت های رویدادهای فعال به ریسورس زیر درخواست می فرستیم:

GET https://api.evand.com/ordered-tickets/of-active-events

در این مرحله هم نیازه توکن ای که از مرحله قبل گرفتیم هم همراه درخواست ارسال کنیم.

از آنجایی که می خواستم درخواست از نوع GET باشه، و نمی خواستم توکن در query string تعیین بشه که تو لاگ های سرور بیاد، تصمیم بر این گرفتم که توکن رو از طریق هدر بگیرم.

در نتیجه، نیاز هدری به اسم Identifier-Token همراه درخواست ارسال بشه که مقدارش هم توکن دریافتی از ریسورس قبلی خواهد بود.

خروجی مربوطه به این ریسورس لیستی از رویدادهای فعالی خواهد بود که کاربر مربوطه ازشون بلیت داره. حداکثر ۵۰ بلیت هم برای هر رویداد درش قرار می گیره . 

برای رویداد آی دی، اسم و اسلاگش گزاشتیم.
برای بلیت هاشم کد بلیت و اسم خریدار.

نمونه خروجی چیزی مثل این خواهد بود:


{
    "data": [
        {
            "id": 1610,
            "name": "test",
            "slug": "testasli",
            "tickets": [
                {
                    "code": "3n91r",
                    "name": "حسین بقایی"
                }
            ]
        }
    ],
    "meta": {
        "pagination": {
            "total": 1,
            "count": 1,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": []
        }
    }
}


نکته ای که وجود داره، از آیتم های data بهشون event گفته می شه.

بعد از انتخاب بلیت توسط کاربر، که از آیتم های tickets هر رویداد، مقدار فیلد code هست که همون کد  بلیت است رو برای مرحله بعدی که برای دریافت لینک دانلود بلیت خواهد بود، مورد استفاده قرار می گیره.


مرحله نهایی: لینک دانلود بلیت
 

در مرحله آخر، برای دریافت لینک دانلود بلیت مورد نظر، به دو چیز نیاز داریم.
یکی توکن که در مراحل قبل گرفتیم و یکی هم بلیت، (کد بلیت، id بلیت مورد نظر) که در مرحله قبل بهش رسیدیم.

با داشتن این دو دیتای مورد نظر می تونیم درخواست دانلود فایل بلیت رو بدیم و لینک فایل رو داشته باشیم و با خود به گور ببریم :))

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

GET https://api.evand.com/ordered-tickets/{ticket}/download

که بجای ticket مقدار بلیت (کد بلیت، id بلیت، attendee id ) رو قرار می دیم. و مقدار token هم که مثل مرحله قبل تو هدر نیازه فرستاده بشه:

Identifier-Token: XYZ


و درصورتی که توکن معتبر باشه، پاسخ سرور به شرح زیر خواهد بود:

{

    "file": "http://static.evand.com/..."

}

که مقدار file اشاره به لینک فایل PDF بلیت مربوطه داره و قابل دانلود می باشد.


----

پایان:

نکته: نوع دیتای تمام دیتاهای ارسالی و دریافتی JSON هست. با تشکر



آیا می دانید برای نوشتن این مطلب چه رنج هایی، حسین بالا، بیردانا، کشیده است؟ نه جدا آیا می دانید؟


نکته: توجه کردید من تو این مطلب ۷ بار "در حقیقت" نوشتم؟ ++در حقیقت بعد از اینکه ویرایش می کردم متوجه شدم. :)

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

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

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

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