پیمان محمدی
پیمان محمدی
خواندن ۳ دقیقه·۳ سال پیش

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

در این مطلب API زرین پال نسخه 4 را بررسی خواهیم کرد و به مشکلات آن می‌پردازیم.


مشکل در کار با سندباکس

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

متأسفانه از زمان انتشار نسخه 4 (بیشتر از دو سال پیش)، در صورتی که تلاش کنید از این قابلیت استفاده کنید، سرور خطای 500 را برگشت می‌دهد. اما این تنها مشکل نیست. زرین پال بجای ارسال یک ارور صحیح در قالب json، به شکل عجیبی پاسخ html ارسال می‌کند که باعث بروز خطای غیر منتظره می‌شود.


برگشت دیتای متناقض

همان طور که در تصویر زیر می‌توانید مشاهده کنید، در صورتی که نتیجه data خالی باشد، سرویس یک «آرایه خالی» برگشت می‌دهد. در اکثر مواقع برگشت دادن آرایه خالی مشکلی ندارد، اما نتیجه اصلی data یک آرایه نیست. بلکه یک object است.

به errors دقت کنید.
به errors دقت کنید.


در تصویر قبل مشاهده کردید که errors از نوع object بود، اما این‌بار بدلیل نبود خطا، یک «آرایه خالی» برگشت داده شده است. برای data هم نتیجه برعکس همین موضوع است.

این نوع داده های متناقض باعث بروز مشکل هنگام deserialize شدن اطلاعات می‌شود. به عنوان مثال در زبان سی‌شارپ اگر کلاس نتیجه «درخواست پرداخت» را به این صورت در نظر بگیریم:

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

این نوع عدم توجه به جزئیات نشان از بی دقتی توسعه دهندگان این API دارد. برای رفع این مشکل لازم است که یک JsonConverter تعریف شود که در این مورد خاص، هرگاه با array مواجه شد null برگشت داده شود.

راه حل های پیشنهادی در System.Text.Json:

  • https://stackoverflow.com/a/69818233
  • https://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

لطفاً نظرات و پیشنهادات خود را از طریق بخش نظرات همین مطلب برای من ارسال کنید.

بررسیدرگاه پرداختزرین پالapiبرنامه نویسی
ویرگول ایموجی ها را از این بخش حذف می‌کند!
شاید از این پست‌ها خوشتان بیاید