پرش به محتوا
مستندات مهراد

جستجوی کالا

سوپر اپلیکیشن مهراد

این سند دو endpoint را توضیح می‌دهد که پذیرنده روی سرور خود پیاده‌سازی می‌کند تا کالاهایش در جستجوی کالای اپلیکیشن مهراد نمایش داده شود. در این ارتباط مهراد request ارسال می‌کند و پذیرنده پاسخ می‌دهد.


نمای کلی

1

کاربرجستجو یا پیمایش فهرست کالاها در اپلیکیشن مهراد

2

مهرادارسال request فهرست کالا به endpoint پذیرنده

3

پذیرندهبازگرداندن یک صفحه از کالاها و تعداد کل نتایج

4

کاربرانتخاب یک کالا

5

مهرادارسال request جزئیات کالا با product_id

6

پذیرندهبازگرداندن جزئیات و تنوع‌های کالا


پیش‌نیازها

موردتوضیح
آدرس فهرست کالاآدرس HTTPS که request فهرست کالا به آن ارسال می‌شود
آدرس جزئیات کالاآدرس HTTPS شامل عبارت {product_id}؛ به جای این عبارت، ID کالا قرار می‌گیرد
ثبت پذیرنده در مهرادآدرس‌ها روی پذیرندهٔ ثبت‌شده در مهراد تنظیم می‌شوند

این آدرس‌ها در فرآیند راه‌اندازی به مهراد اعلام می‌شوند. نمونه:

https://shop.example.com/products/mehrad/
https://shop.example.com/products/{product_id}/mehrad/

فهرست endpoint‌ها

endpointکاربردauthentication
GET {آدرس فهرست کالا}فهرست کالاها همراه با جستجو، فیلتر و صفحه‌بندیبدون header
GET {آدرس جزئیات کالا}جزئیات یک کالا و تنوع‌های آنبدون header

مهراد request‌ها را بدون header Authorization ارسال می‌کند. هر دو endpoint باید فقط داده‌های عمومی کالا را برگردانند.


قواعد مشترک

  • پاسخ موفق باید کد ۲۰۰ و body از نوع JSON داشته باشد.
  • پاسخ باید در کمتر از ۱۰ ثانیه ارسال شود.
  • مبالغ به ریال و به صورت عدد صحیح ارسال می‌شوند.
  • rate امتیاز کالا از ۰ تا ۵ است.
  • فیلدی که در جدول‌ها اختیاری است می‌تواند ارسال نشود یا null باشد.

endpoint فهرست کالا

GET https://shop.example.com/products/mehrad/?limit=10&offset=0&title=ساعت&is_available=1

این request هنگام جستجو و پیمایش صفحه‌به‌صفحهٔ فهرست کالاها در اپلیکیشن ارسال می‌شود.

پارامترها

مقادیر boolean به صورت 1 و 0 ارسال می‌شوند. به جز limit و offset، سایر پارامترها اختیاری‌اند. اگر پارامتری ارسال نشود، فیلتر آن اعمال نمی‌شود.

پارامترهای ورودی9 فیلد
limitintegerالزامی
تعداد کالای هر صفحه؛ بین ۱ و ۵۰.

پیش‌فرض: 10

offsetintegerالزامی
تعداد کالاهایی که از ابتدای نتایج رد می‌شوند.

پیش‌فرض: 0

titlestring
اگر ارسال شد، فقط کالاهایی برگردانده شود که عنوان آن‌ها شامل این عبارت باشد؛ حداکثر ۲۰۰ کاراکتر.
is_availableboolean
اگر کالا موجود بود `1` و در غیر این صورت `0`.
is_domesticboolean
اگر کالا تولید داخل بود `1` و در غیر این صورت `0`.
has_fast_shippingboolean
اگر کالا ارسال سریع داشت `1` و در غیر این صورت `0`.
has_in_store_purchaseboolean
اگر کالا در فروشگاه حضوری قابل خرید بود `1` و در غیر این صورت `0`.
min_priceinteger
اگر ارسال شد، فقط کالاهایی با قیمت برابر یا بیشتر از این مقدار برگردانده شود. مبلغ به ریال است.
max_priceinteger
اگر ارسال شد، فقط کالاهایی با قیمت برابر یا کمتر از این مقدار برگردانده شود. مبلغ به ریال است.

Response

فیلدهای پاسخ2 فیلد
total_itemsinteger | nullاختیاری
تعداد کل کالاهای منطبق با فیلترها در همهٔ صفحه‌ها.
dataarray of objects
کالاهای این صفحه. اگر کالایی یافت نشود، آرایهٔ خالی ارسال می‌شود.
فیلدهای هر عضو لیست data10 فیلد
idstring
ID کالا در سیستم پذیرنده؛ همین مقدار در request جزئیات کالا به عنوان `product_id` ارسال می‌شود.
titlestring
عنوان کالا.
image_thumbnail_urlsarray of stringsاختیاری
آدرس تصاویر کوچک کالا؛ تصویر اصلی کالا در ابتدای آرایه قرار می‌گیرد.
min_available_priceinteger | nullاختیاری
کمترین قیمت موجود کالا به ریال.
max_available_priceinteger | nullاختیاری
بیشترین قیمت موجود کالا به ریال.
is_availableboolean | nullاختیاری
اگر کالا موجود بود `true` و در غیر این صورت `false` برگردانده شود.
has_fast_shippingboolean | nullاختیاری
اگر کالا ارسال سریع داشت `true` و در غیر این صورت `false` برگردانده شود.
has_in_store_purchaseboolean | nullاختیاری
اگر کالا در فروشگاه حضوری قابل خرید بود `true` و در غیر این صورت `false` برگردانده شود.
is_domesticboolean | nullاختیاری
اگر کالا تولید داخل بود `true` و در غیر این صورت `false` برگردانده شود.
ratenumber | nullاختیاری
امتیاز کالا از ۰ تا ۵.
نمونه پاسخ
{
  "total_items": 37,
  "data": [
    {
      "id": "260",
      "title": "ساعت مچی عقربه‌ای کوارتز مردانه مدل EM610",
      "image_thumbnail_urls": [
        "https://shop.example.com/media/products/260_thumb.webp"
      ],
      "min_available_price": 2975000,
      "max_available_price": 2975000,
      "is_available": true,
      "has_fast_shipping": false,
      "has_in_store_purchase": true,
      "is_domestic": true,
      "rate": 5
    }
  ]
}

endpoint جزئیات کالا

GET https://shop.example.com/products/260/mehrad/

به جای {product_id} در آدرس، id کالا از فهرست کالا قرار می‌گیرد. این request پارامتر query ندارد.

اگر کالایی با این ID در سیستم پذیرنده وجود ندارد، پاسخ آن باید کد ۴۰۴ داشته باشد.

Response

data آرایه‌ای است که کالا تنها عضو آن است.

فیلدهای پاسخ1 فیلد
dataarray of objects
جزئیات کالا.
فیلدهای هر عضو لیست data9 فیلد
idstring
ID کالا در سیستم پذیرنده.
urlstring | nullاختیاری
آدرس صفحهٔ کالا در سایت پذیرنده.
titlestring
عنوان کالا.
ratenumber | nullاختیاری
امتیاز کالا از ۰ تا ۵.
is_domesticboolean | nullاختیاری
اگر کالا تولید داخل بود `true` و در غیر این صورت `false` برگردانده شود.
specificationsarray of objectsاختیاری
گروه‌های مشخصات فنی کالا.
فیلدهای هر عضو لیست specifications2 فیلد
titlestring
عنوان گروه، مثلاً «مشخصات کلی».
attributesarray of objectsاختیاری
ویژگی‌های این گروه.
فیلدهای هر عضو لیست attributes2 فیلد
namestring
نام ویژگی.
valuestring
مقدار ویژگی.
bold_attributesarray of objectsاختیاری
ویژگی‌های شاخص کالا، مانند برند.
فیلدهای هر عضو لیست bold_attributes2 فیلد
namestring
نام ویژگی.
valuestring
مقدار ویژگی.
shared_mediasarray of objectsاختیاری
تصاویر و ویدیوهای مشترک همهٔ تنوع‌ها.
فیلدهای هر عضو لیست shared_medias3 فیلد
typestring
اگر رسانه تصویر بود `IMAGE` و در غیر این صورت `VIDEO` برگردانده شود.
urlstring
آدرس فایل.
thumbnail_urlstring | nullاختیاری
آدرس تصویر کوچک.
variantsarray of objectsاختیاری
تنوع‌های کالا، مانند رنگ، سایز یا فروشنده.
فیلدهای هر عضو لیست variants10 فیلد
idstring
ID تنوع در سیستم پذیرنده.
urlstring | nullاختیاری
آدرس صفحهٔ تنوع در سایت پذیرنده.
titlestring
عنوان تنوع.
skustring | nullاختیاری
SKU تنوع در سیستم پذیرنده.
key_propertiesarray of objectsاختیاری
ویژگی‌هایی که این تنوع را از سایر تنوع‌ها جدا می‌کنند.
فیلدهای هر عضو لیست key_properties3 فیلد
namestring
نام ویژگی، مثلاً «رنگ».
valuestring
مقدار ویژگی، مثلاً «مشکی».
hex_codestring | nullاختیاری
کد رنگ، مثلاً `#000000`.
min_available_priceinteger | nullاختیاری
کمترین قیمت موجود تنوع به ریال.
max_available_priceinteger | nullاختیاری
بیشترین قیمت موجود تنوع به ریال.
has_fast_shippingboolean | nullاختیاری
اگر تنوع ارسال سریع داشت `true` و در غیر این صورت `false` برگردانده شود.
has_in_store_purchaseboolean | nullاختیاری
اگر تنوع در فروشگاه حضوری قابل خرید بود `true` و در غیر این صورت `false` برگردانده شود.
mediasarray of objectsاختیاری
تصاویر و ویدیوهای مخصوص این تنوع؛ ساختار آن مانند `shared_medias` است.
نمونه پاسخ
{
  "data": [
    {
      "id": "260",
      "url": "https://shop.example.com/products/260",
      "title": "ساعت مچی عقربه‌ای کوارتز مردانه مدل EM610",
      "rate": 5,
      "is_domestic": true,
      "specifications": [
        {
          "title": "مشخصات کلی",
          "attributes": [{ "name": "وزن", "value": "180 گرم" }]
        }
      ],
      "bold_attributes": [{ "name": "برند", "value": "الگانس" }],
      "shared_medias": [
        {
          "type": "IMAGE",
          "url": "https://shop.example.com/media/products/260.webp",
          "thumbnail_url": "https://shop.example.com/media/products/260_thumb.webp"
        }
      ],
      "variants": [
        {
          "id": "260",
          "url": "https://shop.example.com/products/260",
          "title": "مشکی",
          "sku": "MS-21695508",
          "key_properties": [{ "name": "رنگ", "value": "مشکی", "hex_code": "#000000" }],
          "min_available_price": 2975000,
          "max_available_price": 2975000,
          "has_fast_shipping": false,
          "has_in_store_purchase": true,
          "medias": []
        }
      ]
    }
  ]
}

نکات پیاده‌سازی

  • فیلترها و صفحه‌بندی باید در سمت پذیرنده اعمال شوند.
  • total_items باید تعداد کل نتایج همان فیلترها باشد، نه تعداد کالاهای همین صفحه.
  • ID کالا باید پایدار باشد؛ id بازگشتی در فهرست کالا باید در endpoint جزئیات کالا همان کالا را برگرداند.
  • آدرس تصاویر و رسانه‌ها باید کامل و از طریق HTTPS در دسترس باشد.
  • ارتباط باید فقط روی HTTPS برقرار شود.

چک‌لیست پیاده‌سازی

  • پیاده‌سازی endpoint فهرست کالا با پارامترهای limit، offset و فیلترها
  • بازگرداندن total_items برابر تعداد کل نتایج فیلترشده
  • پیاده‌سازی endpoint جزئیات کالا با {product_id} در آدرس
  • بازگرداندن کد ۴۰۴ برای کالای ناموجود در endpoint جزئیات کالا
  • ارسال مبالغ به ریال و rate بین ۰ و ۵
  • پاسخ در کمتر از ۱۰ ثانیه
  • اعلام آدرس‌های فهرست و جزئیات کالا به مهراد

در این صفحه