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

مقدمه

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

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


انتخاب مستند مناسب

بر اساس هدف پیاده‌سازی، یکی از مسیرهای زیر انتخاب می‌شود:

هدفمستند مربوطهروش authentication
ورود کاربر مهراد به سایت پذیرنده بدون ثبت‌نام مجدد و دریافت اطلاعات پایهٔ اومستندات SSOکد موقت + امضای کلاینت
پرداخت سبد خرید کاربر در سایت پذیرنده با دارایی مهرادمستندات سفارشtoken SSO و/یا token اپلیکیشن پذیرنده
پرداخت مشتری در فروشگاه فیزیکی پذیرنده با اپلیکیشن مهرادمستندات خرید حضوریپنل پذیرنده یا token اپلیکیشن پذیرنده
ارسال request‌های محافظت‌شدهٔ سفارش از سرور پذیرندهمستندات ارتباط پذیرندگانtoken اپلیکیشن پذیرنده
صدور بستهٔ حمایتی برای کاربران توسط سازمانمستندات ارتباط سازمانیامضای دیجیتال request

مسیر متداول یک پذیرندهٔ فروشگاهی، ترکیب SSO (ورود کاربر) و سفارش (پرداخت) است.


مدل کلی یکپارچه‌سازی

request‌های پذیرنده به API مهراد از سمت سرور ارسال می‌شوند و بسته به نوع عملیات، یکی از روش‌های authentication زیر به کار می‌رود:

روشکاربردمستند مربوطه
SSO (ورود یکپارچه)ورود کاربر مهراد به سایت پذیرنده و دریافت Access Token در زمینهٔ همان کاربر؛ برای دریافت اطلاعات کاربر و ایجاد پرداختمستندات SSO
token اپلیکیشن پذیرندهtoken سرور-به-سرور مستقل از کاربر؛ برای تأیید پرداخت، عملیات بعدی سفارش و خرید حضوریمستندات ارتباط پذیرندگان
امضای درخواست سازمانیامضای هر request با کلید خصوصی سازمان؛ مخصوص ارتباط سازمان‌هامستندات ارتباط سازمانی

برخی عملیات، مانند خرید حضوری، از طریق رابط کاربری پنل پذیرنده نیز در دسترس هستند و در این حالت به پیاده‌سازی API نیاز ندارند.


آدرس سرویس

محیطآدرس پایه
عملیاتی (Production)https://api.mehrad.app
تست (Staging)https://dev-api.mehrad.app

فرآیند دسترسی به محیط عملیاتی: پیاده‌سازی باید ابتدا به‌طور کامل روی محیط تست (Staging) انجام شود. پس از ارائهٔ دمو و تأیید آن از سمت مهراد، دسترسی محیط عملیاتی (Production) در اختیار شما قرار می‌گیرد.

تمام pathهای این مستندات نسبت به همین آدرس پایه هستند؛ برای مثال POST /gateway/sso/token یعنی https://api.mehrad.app/gateway/sso/token.

هر آدرسی که API بازمی‌گرداند — مانند payment_url، draft_url یا آدرس بازگشت کاربر — باید دقیقاً به همان شکل استفاده شود. ساختار این آدرس‌ها بخشی از قرارداد نیست و نباید توسط پذیرنده ساخته یا تغییر داده شود.


قالب response‌ها

بیشتر endpoint‌ها response را در یک پوشش استاندارد برمی‌گردانند:

{
  "success": true,
  "data": {},
  "meta": null
}

endpoint‌های استاندارد SSO (token، introspection، discovery و JWKS) و endpoint‌های اطلاعات کاربر، بنا بر استاندارد OpenID، response را بدون این پوشش و به صورت شیء مستقیم برمی‌گردانند. در هر بخش نمونهٔ دقیق response آمده است.

خطاها همیشه این ساختار را دارند:

{
  "success": false,
  "error": {
    "code": "SSO_INVALID_GRANT",
    "message": "کد موقت ورود نامعتبر است یا دیگر قابل استفاده نیست.",
    "details": null
  }
}

مقدار code برای تصمیم‌گیری برنامه‌نویسی پایدار است؛ متن message برای نمایش به کاربر نهایی نوشته شده و ممکن است تغییر کند. منطق برنامه باید بر مبنای code پیاده‌سازی شود، نه بر مبنای متن پیام.

details در بیشتر خطاها null است. خطاهایی که در details اطلاعات تکمیلی دارند، در فهرست خطاهای هر مستند مشخص شده‌اند. کد HTTP و کد خطای هر مورد به تفکیک endpoint در بخش «فهرست خطاها» هر مستند آمده است.

خطای اعتبارسنجی

اگر فیلدی از body، path یا query ارسال نشده باشد، نوع آن نادرست باشد یا مقدارش خارج از محدودهٔ مجاز باشد، response آن با کد ۴۲۲ و خطای VALIDATION_ERROR برگردانده می‌شود. در details، کلید هر عضو مسیر فیلد و مقدار آن فهرست پیام‌های خطای همان فیلد است. مسیر فیلدهای تودرتو با . و اندیس آرایه‌ها با عدد مشخص می‌شود؛ خطایی که به کل body مربوط است، کلید خالی ("") دارد.

نمونه پاسخ
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "بعضی فیلدها را اشتباه پر کرده‌اید یا مقدارشان خارج از محدودهٔ مجاز است.",
    "details": {
      "amount": ["Field required"],
      "shipments.0.items.1.price": ["Input should be greater than 0"]
    }
  }
}

پیام‌های داخل details برای اشکال‌زدایی هستند و نباید به کاربر نهایی نمایش داده شوند.

خطاهای مشترک

خطاهای زیر در همهٔ مستندات مشترک‌اند و در فهرست خطاهای هر endpoint تکرار نمی‌شوند، مگر آن‌که معنای خاصی داشته باشند:

کد خطاHTTPتوضیح و اقدام پیشنهادی
VALIDATION_ERROR422ساختار request نامعتبر است؛ جزئیات هر فیلد در details آمده است.
HTTP_EXCEPTION401در endpoint‌هایی که token لازم دارند، header Authorization ارسال نشده یا قالب Bearer <token> ندارد. message در این حالت Not authenticated است.
FINANCIAL_OPERATIONS_FROZEN503عملیات مالی موقتاً متوقف شده است؛ request باید بعداً با همان مقادیر دوباره ارسال شود. این خطا فقط در ایجاد پرداخت، تأیید پرداخت، اصلاح و لغو سفارش و اعطای اعتبار برگردانده می‌شود.
نمونه پاسخ
{
  "success": false,
  "error": {
    "code": "FINANCIAL_OPERATIONS_FROZEN",
    "message": "عملیات مالی به‌طور موقت متوقف شده است؛ لطفاً بعداً دوباره تلاش کنید.",
    "details": null
  }
}

مفاهیم مشترک

مفهومتوضیح
پذیرنده (Merchant)کسب‌وکاری که کاربر مهراد در آن خرید می‌کند.
سرویس (Service)نوع سرویسی که پذیرنده ارائه می‌دهد (مثلاً خرید کالا). دسترسی‌ها و تنظیمات SSO برای هر ترکیب پذیرنده+سرویس جداگانه تعریف می‌شود.
سفارش (Order)یک خرید ثبت‌شده در مهراد.
تلاش پرداخت (Payment Attempt)هر بار تلاش کاربر برای پرداخت یک سفارش. ID هر تلاش پرداخت authority نام دارد.
تأیید پرداخت (Verify)مرحلهٔ نهایی که پذیرنده پرداخت را تأیید می‌کند و مبلغ برای او قطعی می‌شود.

واحد مبلغ

همهٔ مبالغ در API عدد صحیح و به ریال هستند و باید به صورت عدد صحیح ارسال شوند.


نکات مشترک امنیتی

  • client_secret، کلید خصوصی و tokenها فقط باید روی سرور پذیرنده نگهداری شوند؛ نباید در اپلیکیشن موبایل، کد سمت مرورگر یا localStorage قرار گیرند.
  • request‌های حساس (ایجاد پرداخت، تأیید پرداخت، اصلاح و لغو سفارش) باید از سمت سرور پذیرنده ارسال شوند.

در این صفحه