مستندات API فروش اقساطی اسنپ‌پی | راهنمای پیاده‌سازی پذیرندگان
اسنپ‌پی مستندات API فروش اقساطی
ویرایش 2.1 بروزرسانی: ۱۹ دی ۱۴۰۴ مناسب برای تیم‌های فنی
REST API · ویرایش 2.1

مستندات پیاده‌سازی پذیرندگان سلف اسنپ‌پی | راهنمای اتصال درگاه اختصاصی

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

۱

مقدمه

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

شما به‌عنوان یک پذیرنده و ارائه‌دهنده خدمات می‌توانید با فراهم نمودن این روش پرداخت برای کاربران خود، به آن‌ها اجازه دهید بدون نیاز به پرداخت تمام مبلغ، خرید کنند. کاربر بسته به نوع روش پرداخت، در روش پرداخت اقساطی صرفاً مبلغی به‌عنوان قسط اول پرداخت خواهد کرد و باقی بدهی خود را طی چند قسط در ماه‌های آتی پرداخت خواهد کرد. همچنین در روش پرداخت آخر ماه نیز، کل مبلغ سفارش در آخر ماه پرداخت خواهد شد.

این راهکار به دلیل افزایش قدرت خرید لحظه‌ای کاربران، در افزایش نرخ فروش شما تاثیرگذار خواهد بود.

۲

قالب کلی پاسخ درخواست‌ها

در هر فراخوانی موفق API (کدهای وضعیت HTTP از نوع 2xx)، بدنه پاسخ به‌صورت یک شیء JSON و در قالب نمونه کد سمت چپ ارائه می‌شود.

در فراخوانی‌های ناموفق (کدهای وضعیت HTTP از نوع 4xx و 5xx) نیز بدنه پاسخ مطابق نمونه دوم در پنل کد بازگردانده خواهد شد.

۳

مکانیزم امن‌سازی درخواست‌ها

در فراخوانی هر یک از سرویس‌های ارائه‌شده در این مستند، ضروری است درخواست ارسالی شامل یک توکن امنیتی از جنس JWT باشد که ایجاد آن از طریق فراخوانی API زیر میسر می‌شود.

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

POST /api/online/v1/oauth/token

پس از دریافت توکن، باید آن را درون هدر Authorization تمامی درخواست‌های بعدی خود قرار دهید. این توکن زمان اعتبار محدودی دارد (۳۶۰۰ ثانیه) و پس از پایان آن باید توکن جدید دریافت کنید.

توکن دسترسی (JWT) را کش نکنید و اجازه دهید به‌درستی منقضی شود؛ در غیر این‌صورت ممکن است در ادامه فرآیند با خطای دسترسی مواجه شوید.

۴

درخواست بررسی امکان پرداخت اقساطی (Eligible)

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

این سرویس به‌صورت داینامیک مبالغ اقساط را محاسبه می‌کند. با هر تغییر قیمت، لازم است مجدداً این سرویس فراخوانی شود؛ محاسبه مبالغ اقساط با هیچ روش دیگری قابل‌قبول نیست.

GET /api/online/offer/v1/eligible

پارامترهای ورودی

نام پارامترنوعالزامیمقادیر مجاز
amountQuery paramبلهمبلغ به ریال (IRR)
paymentMethodTypesQuery param (Array)خیرPOSTPAID, INSTALLMENT, FINANCING

ارسال پارامتر paymentMethodTypes اختیاری است و تنها زمانی باید ارسال شود که بخواهید کاربر را به استفاده از یک یا چند روش پرداخت مشخص محدود کنید. در صورت عدم ارسال یا ارسال آرایه خالی، کاربر تمامی روش‌های فعال و در دسترس را مشاهده خواهد کرد.

۵

روند کلی پرداخت اقساطی اسنپ‌پی

روند پرداخت زمانی آغاز می‌شود که پذیرنده با دریافت یک توکن JWT، از آن در هدر تمامی درخواست‌های آتی استفاده کند.

  1. فراخوانی سرویس eligibility و تصمیم‌گیری درباره نمایش یا عدم نمایش روش پرداخت اسنپ در سایت پذیرنده.
  2. در صورت true بودن پاسخ eligibility و انتخاب این روش توسط کاربر، درخواست دریافت Payment Token با پارامترهای متناسب با خرید ارسال می‌شود.
  3. هدایت کاربر به آدرس دریافت‌شده در paymentPageUrl برای انجام پرداخت.
  4. دریافت نتیجه تراکنش در آدرس بازگشت (returnURL) به‌صورت POST.
  5. فراخوانی سرویس Verify در صورت موفق بودن نتیجه، برای نهایی‌سازی تراکنش.
  6. فراخوانی سرویس Settle پس از پاسخ موفق Verify، برای اتمام قطعی خرید.

نکات مهم: مقدار transactionId باید در سیستم پذیرنده یکتا و بین ۵ تا ۱۰ رقم باشد (برای ارقام بالای ۱۰، حتماً از یک حرف استفاده شود). هر تب باز شده از سبد خرید باید یک تراکنش‌آیدی جداگانه داشته باشد.

آدرس بازگشت (returnURL) ارسالی باید دقیقاً با آدرس پایه‌ای که هنگام تعریف پذیرنده معرفی و whitelist شده مطابقت داشته باشد؛ در غیر این‌صورت درخواست رد می‌شود.

پس از بازگشت کاربر، پذیرنده باید فقط یک‌بار سرویس Verify را فراخوانی کند (حتی اگر آدرس بازگشت چندین‌بار فراخوانی شده باشد). آخرین قدم برای نهایی‌سازی خرید موفق، فراخوانی سرویس Settle به ازای پاسخ موفق Verify است.

۶

درخواست دریافت Payment Token

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

POST /api/online/payment/v1/token

پارامترهای بدنه درخواست

نام پارامترالزامیتوضیحات
amountبلهمبلغ کل خرید (IRR)
discountAmountبلهمبلغ تخفیف (IRR)
externalSourceAmountبلهمبلغ پرداختی از منبع خارجی (IRR)
mobileبلهشماره موبایل کاربر
returnURLبلهآدرس بازگشت پس از پرداخت (باید POST باشد)
transactionIdبلهشناسه یکتای هر تراکنش
cartListبلهآرایه سبدهای خرید
forcedPaymentMethodTypesخیرPOSTPAID, INSTALLMENT, FINANCING

استفاده از پارامتر forcedPaymentMethodTypes نیازمند فعال‌سازی از سمت تیم اسنپ‌پی است. در صورت پیاده‌سازی پرداخت آخر ماه، ارسال این پارامتر الزامی است.

نحوه محاسبه totalAmount و amount

برای هر سبد خرید: [تعداد] × [مبلغ آیتم] + [هزینه ارسال در صورت عدم احتساب] + [مالیات در صورت عدم احتساب] = [مبلغ کل سبد]

برای کل سفارش: مجموع مبلغ کل تمام سبدها منهای مبلغ تخفیف و مبلغ منبع خارجی، برابر با مبلغ نهایی سفارش خواهد بود.

در صورتی که تنوع دسته‌بندی محصولات شما زیاد نیست، پارامتر commissionType را به‌صورت پیش‌فرض عدد ۱۰۰ ارسال کنید.

۷

درخواست Verify

پس از تکمیل مراحل پرداخت از سمت کاربر، وی به آدرس بازگشت به‌همراه پارامترهای ذیل منتقل می‌شود. پذیرنده ملزم است در صورت دریافت نتیجه پرداخت موفق، ظرف مدت محدود سرویس Verify را برای نهایی‌کردن تراکنش فراخوانی کند.

عدم فراخوانی Verify منجر به بازگشت مبلغ کسرشده از حساب کاربر و تغییر وضعیت سفارش به reverted خواهد شد.

پارامترهای دریافتی در Callback (متد POST)

نام پارامترمقادیر ممکنتوضیحات
transactionIdxxxxxx-xxxxxشناسه یکتای ارسالی در سرویس دریافت توکن پرداخت
stateOK / FAILEDOK یعنی خرید موفق بوده و باید Verify فراخوانی شود؛ FAILED یعنی نیاز به فراخوانی Revert است
amountعدد (IRR)مبلغ تراکنش
POST /api/online/payment/v1/verify
۸

درخواست Settle

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

پس از فراخوانی Settle، صرفاً با فراخوانی سرویس Cancel امکان لغو سفارش وجود خواهد داشت.

POST /api/online/payment/v1/settle
۹

درخواست Revert

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

پس از بازگشت کاربر از مراحل پرداخت، در صورتی‌که نتیجه اعلام‌شده موفق باشد اما امکان ارائه خدمات به مشتری وجود نداشته باشد (مثلاً اتمام موجودی انبار)، باید سرویس Revert فراخوانی شود تا مبلغ کسرشده به کاربر بازگردانده شود.

امکان انجام Revert برای تراکنشی که به وضعیت Settle رسیده باشد، وجود ندارد.

POST /api/online/payment/v1/revert
۱۰

درخواست Get Payment Status

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

GET /api/online/payment/v1/status

لیست وضعیت‌های ممکن

SETTLE CANCEL VERIFY PENDING REVERT
۱۱

مدیریت درخواست Verify

  1. فراخوانی اولیه: سرویس Verify را برای سفارش فراخوانی کنید و یک مهلت زمانی (Timeout) ۳۰ ثانیه‌ای برای دریافت پاسخ تنظیم نمایید.
  2. رسیدگی به Timeout: اگر طی ۳۰ ثانیه هیچ پاسخی دریافت نشد، سرویس Get Payment Status را فراخوانی کنید تا وضعیت نهایی پرداخت استعلام گرفته شود.
  3. تصمیم‌گیری بر اساس پاسخ: اگر وضعیت VERIFY بود، Settle را فراخوانی کنید؛ اگر PENDING بود، مجدداً Verify را فراخوانی کنید؛ در غیر این‌صورت سفارش را ناموفق تلقی کنید.
۱۲

مدیریت درخواست Settle

  1. فراخوانی اولیه: درخواست Settle را برای سفارش Verify‌شده فراخوانی کنید.
  2. عدم دریافت پاسخ: اگر Settle پاسخ false برگرداند یا پاسخی نداد، سرویس Get Payment Status را برای استعلام وضعیت نهایی فراخوانی کنید.
  3. تصمیم‌گیری: اگر وضعیت VERIFY بود، مجدداً Settle را فراخوانی کنید؛ اگر SETTLE بود، تراکنش موفق و نهایی تلقی می‌شود.
۱۳

درخواست Cancel

چنانچه پس از اتمام فرآیند خرید و قرارگرفتن تراکنش در وضعیت Settle نیاز به لغو آن باشد، می‌توانید با فراخوانی این سرویس تراکنش را لغو کنید.

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

POST /api/online/payment/v1/cancel
۱۴

درخواست Update

چنانچه پس از اتمام فرآیند خرید و قرارگرفتن تراکنش در وضعیت Settle نیاز به تغییر مبلغ یا آیتم‌های سبد خرید باشد، این درخواست از طریق سرویس Update ارسال و پردازش می‌شود. مبلغ درخواست Update باید کمتر از مبلغ کل سفارش باشد.

اگر یک محصول کاملاً حذف می‌شود، لازم است از بین آیتم‌های سبد خرید نیز حذف شود. به دلیل برگشت‌ناپذیر بودن این عملیات، پیش از ارسال، تاییدیه‌ای از ادمین دریافت کنید.

POST /api/online/payment/v1/update

پیاده‌سازی درخواست Update برای فروشگاه‌های چندآیتمی الزامی است.

۱۵

سوالات متداول

معمولاً این خطا به دلیل وایت نبودن IP ایجاد می‌شود. برای رفع آن لازم است IP صحیح را جهت Whitelist شدن به تیم اسنپ‌پی ارسال کنید.

این خطا به دلیل نادرست بودن اطلاعات Authorization (انکد اشتباه Client ID و Client Secret) رخ می‌دهد. فرآیند انکد و مقادیر Username و Password را مطابق بخش مکانیزم امن‌سازی درخواست‌ها بررسی کنید و از صحت متد و آدرس درخواست نیز اطمینان حاصل کنید.

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

بله، برای زبان‌های برنامه‌نویسی سمت بک‌اند از جمله PHP، .NET و... نمونه کدهای آماده در نظر گرفته شده است که در همین صفحه (پنل سمت چپ) قابل مشاهده است.

دقت کنید توکن دسترسی (JWT) زمان انقضای ۳۶۰۰ ثانیه‌ای دارد. بنابراین توکن نباید کش شود تا در ادامه فرآیند با خطای دسترسی مواجه نشوید.

نحوه نمایش روش پرداخت اسنپ‌پی از موارد بسیار مهمی است که باید دقیقاً پیاده‌سازی شود:

  • در خط اول عنوان (title) و در خط بعدی توضیحات (description) نمایش داده شود؛ نحوه نمایش صحیح در نسخه موبایل نیز اهمیت زیادی دارد.
  • سرویس eligible باید دقیقاً مطابق مستندات پیاده‌سازی شود. در صورت true بودن، عنوان و توضیحات بدون تغییر نمایش داده شود و در صورت false بودن، روش پرداخت نمایش داده نشود.
  • از هرگونه پیاده‌سازی دستی خودداری کرده و حتماً سرویس eligible را به‌درستی پیاده‌سازی کنید.
  • برای مبالغ پایین ۴ هزار تومان و بالای ۱۰ میلیون تومان (در محیط تست)، سرویس باید false برگرداند و روش پرداخت نمایش داده نشود.
  • عنوان و توضیحات بازگشتی از eligible همیشه داینامیک هستند و نباید به‌صورت ثابت از سمت پذیرنده نمایش داده شوند.

ابتدا برای پیاده‌سازی و تست، دسترسی محیط Stage در اختیار قرار می‌گیرد. پس از تایید پیاده‌سازی در جلسات pre-demo و دمو توسط کارشناسان فنی اسنپ‌پی، دسترسی محیط Production ارسال خواهد شد.

بله، این درخواست برای فروشگاه‌های چندآیتمی الزامی بوده و نیازمند پیاده‌سازی است.

۱۶

تاریخچه تغییرات مستند

ویرایشتاریختوضیحات
1.02022-02-13ایجاد سند
1.12022-03-05حذف پارامتر callback از روند خرید
1.22022-04-16بروزرسانی APIهای get payment token و merchant eligibility
1.32022-05-01بروزرسانی get payment token API (اجباری‌شدن cartList، totalAmount، cartItems)
1.42022-05-08افزودن Get Payment Status API
1.52022-05-14افزودن Cancel API
1.62022-05-16افزودن Update API
1.72022-09-20افزودن پارامترهای externalSourceAmount و commissionType
1.82023-01-08بروزرسانی Get Payment Status (افزودن پارامتر amount)
1.92024-09-01افزودن جزئیات به توضیحات هر API و افزودن بخش سوالات متداول
2.02026-01-19افزودن بخش پیمنت‌لیست در سرویس‌های get payment token و eligible