نگاهی به API نسخه 4 زرین پال و مشکلات آن

در این مطلب API زرین پال نسخه 4 را بررسی خواهیم کرد و به مشکلات آن می‌پردازیم.مشکل در کار با سندباکساگر قبلاً با زرین پال کار کرده باشید، احتمالاً می‌دانید که این سرویس قابلیتی به نام Sandbox دارد که به شما اجازه می‌دهد بدون نیاز به ارسال اطلاعات به endpoint اصلی، کد های خود را در زمان توسعه تست کنید.متأسفانه از زمان انتشار نسخه 4 (بیشتر از دو سال پیش)، در صورتی که تلاش کنید از این قابلیت استفاده کنید، سرور خطای 500 را برگشت می‌دهد. اما این تنها مشکل نیست. زرین پال بجای ارسال یک ارور صحیح در قالب json، به شکل عجیبی پاسخ html ارسال می‌کند که باعث بروز خطای غیر منتظره می‌شود.برگشت دیتای متناقضهمان طور که در تصویر زیر می‌توانید مشاهده کنید، در صورتی که نتیجه data خالی باشد، سرویس یک «آرایه خالی» برگشت می‌دهد. در اکثر مواقع برگشت دادن آرایه خالی مشکلی ندارد، اما نتیجه اصلی data یک آرایه نیست. بلکه یک object است.به errors دقت کنید.در تصویر قبل مشاهده کردید که errors از نوع object بود، اما این‌بار بدلیل نبود خطا، یک «آرایه خالی» برگشت داده شده است. برای data هم نتیجه برعکس همین موضوع است.این نوع داده های متناقض باعث بروز مشکل هنگام deserialize شدن اطلاعات می‌شود. به عنوان مثال در زبان سی‌شارپ اگر کلاس نتیجه «درخواست پرداخت» را به این صورت در نظر بگیریم:با توجه به اینکه هنگام deserialize شدن، تایپ ها به صورت غیر لیست تعریف شده‌اند، در هر حالت خطای زیر صادر خواهد شد.این نوع عدم توجه به جزئیات نشان از بی دقتی توسعه دهندگان این API دارد. برای رفع این مشکل لازم است که یک JsonConverter تعریف شود که در این مورد خاص، هرگاه با array مواجه شد null برگشت داده شود.✅ راه حل های پیشنهادی در System.Text.Json:https://stackoverflow.com/a/69818233https://stackoverflow.com/a/59430729ساختار نامناسب خطاهای اعتبار سنجیدر این نسخه به نظر می‌رسد خطا های اعتبار سنجی از سبکی که بیشتر در لاراول مورد استفاده قرار می‌گیرد استفاده شده است. به این صورت که یک آرایه که کلید های آن نام فیلدی است که خطای اعتبار سنجی در آن رخ داده است برگشت داده می‌شود.همانطور که احتمالاً حدس زدید بدلیل متغیر بودن نام فیلد ها، deserialize کردن آن به آسانی قابل انجام نیست.✅ راه حل پیشنهادی در System.Text.Json:https://gist.github.com/peymanr34/53bc727953643154257c01bc36a4c301مستندات عجیبدر حال حاظر سه نوع نوع مستندات برای زرین پال وجود دارد. لینک توسعه دهندگان در صفحه اصلی به وب سایت «آزمایشگاه زرین پال» ارجاع داده می‌شود که در یکی از زیر منو ها لینکی برای دانلود فایل pdf مستندات ارائه می‌شود که مربوط به نسخه های قبلی API است.اگر در گوگل مستندات زرین پال را جستجو کنید احتمالاً به وب سایت زیر ارجاع داده خواهید شد.https://docs.zarinpal.comدر این وب سایت مستندات مربوط به API نسخه 4 اما به صورت GraphQL قرار گرفته است.در لینک دیگری همان نسخه 4 اما به صورت عادی (غیر GraphQL) قرار گرفته است.مشخص نیست کدام یک از این مستندات باید توسط توسعه دهنده استفاده شود.کتابخانه زرین پال در دات نت✅ اگر از دات نت 6.0 به بالا استفاده می‌کنید، می‌توانید از کتابخانه من استفاده کنید:https://github.com/peymanr34/riviera-zarinpal با توجه به مشکلات نسخه 4 زرین پال، در این کتابخانه سرویس نسخه قدیمی و جدید را کنار هم قرار داده‌ام تا بتوانید از هر نسخه‌ای که تمایل داشته باشید استفاده کنید. برای دیدن کد های نسخه 4 به لینک زیر مراجعه کنید.https://github.com/peymanr34/riviera-zarinpal/tree/main/Source/Riviera.ZarinPal/V4لطفاً نظرات و پیشنهادات خود را از طریق بخش نظرات همین مطلب برای من ارسال کنید.