در این مطلب API زرین پال نسخه 4 را بررسی خواهیم کرد و به مشکلات آن میپردازیم.
اگر قبلاً با زرین پال کار کرده باشید، احتمالاً میدانید که این سرویس قابلیتی به نام Sandbox دارد که به شما اجازه میدهد بدون نیاز به ارسال اطلاعات به endpoint اصلی، کد های خود را در زمان توسعه تست کنید.
متأسفانه از زمان انتشار نسخه 4 (بیشتر از دو سال پیش)، در صورتی که تلاش کنید از این قابلیت استفاده کنید، سرور خطای 500 را برگشت میدهد. اما این تنها مشکل نیست. زرین پال بجای ارسال یک ارور صحیح در قالب json، به شکل عجیبی پاسخ html ارسال میکند که باعث بروز خطای غیر منتظره میشود.
همان طور که در تصویر زیر میتوانید مشاهده کنید، در صورتی که نتیجه data خالی باشد، سرویس یک «آرایه خالی» برگشت میدهد. در اکثر مواقع برگشت دادن آرایه خالی مشکلی ندارد، اما نتیجه اصلی data یک آرایه نیست. بلکه یک object است.
در تصویر قبل مشاهده کردید که errors از نوع object بود، اما اینبار بدلیل نبود خطا، یک «آرایه خالی» برگشت داده شده است. برای data هم نتیجه برعکس همین موضوع است.
این نوع داده های متناقض باعث بروز مشکل هنگام deserialize شدن اطلاعات میشود. به عنوان مثال در زبان سیشارپ اگر کلاس نتیجه «درخواست پرداخت» را به این صورت در نظر بگیریم:
با توجه به اینکه هنگام deserialize شدن، تایپ ها به صورت غیر لیست تعریف شدهاند، در هر حالت خطای زیر صادر خواهد شد.
این نوع عدم توجه به جزئیات نشان از بی دقتی توسعه دهندگان این API دارد. برای رفع این مشکل لازم است که یک JsonConverter تعریف شود که در این مورد خاص، هرگاه با array مواجه شد null برگشت داده شود.
✅ راه حل های پیشنهادی در System.Text.Json:
در این نسخه به نظر میرسد خطا های اعتبار سنجی از سبکی که بیشتر در لاراول مورد استفاده قرار میگیرد استفاده شده است. به این صورت که یک آرایه که کلید های آن نام فیلدی است که خطای اعتبار سنجی در آن رخ داده است برگشت داده میشود.
همانطور که احتمالاً حدس زدید بدلیل متغیر بودن نام فیلد ها، deserialize کردن آن به آسانی قابل انجام نیست.
✅ راه حل پیشنهادی در System.Text.Json:
در حال حاظر سه نوع نوع مستندات برای زرین پال وجود دارد.
اگر در گوگل مستندات زرین پال را جستجو کنید احتمالاً به وب سایت زیر ارجاع داده خواهید شد.
https://docs.zarinpal.com
در این وب سایت مستندات مربوط به API نسخه 4 اما به صورت GraphQL قرار گرفته است.
در لینک دیگری همان نسخه 4 اما به صورت عادی (غیر GraphQL) قرار گرفته است.
مشخص نیست کدام یک از این مستندات باید توسط توسعه دهنده استفاده شود.
✅ اگر از دات نت 6.0 به بالا استفاده میکنید، میتوانید از کتابخانه من استفاده کنید:
با توجه به مشکلات نسخه 4 زرین پال، در این کتابخانه سرویس نسخه قدیمی و جدید را کنار هم قرار دادهام تا بتوانید از هر نسخهای که تمایل داشته باشید استفاده کنید. برای دیدن کد های نسخه 4 به لینک زیر مراجعه کنید.
لطفاً نظرات و پیشنهادات خود را از طریق بخش نظرات همین مطلب برای من ارسال کنید.