Skip to main content
#P1422

PUT /api/v2/purchase/retry/{id}

Route Info

Method Endpoint Controller Middleware Purpose
PUT /api/v2/purchase/retry/{id} V2TradeController@purchaseWebsiteRetry authWithJwt بازخوانی و تلاش مجدد برای تکمیل خرید آنلاین (temporary_payment) با وضعیت ناموفق یا نیمه‌کامل

منطق عملکرد

  • در ابتدا رکوردی از جدول temporary_payment جستجو می‌شود که با branch شعبه‌ی کاربر و شناسه {id} مطابقت داشته و وضعیت آن یکی از [1, 2] باشد.
  • در صورت عدم یافتن رکورد مطابق شرایط، پاسخ JSON با وضعیت HTTP 409 و پیام خطا بازگردانده می‌شود.
  • در صورت وجود، فیلد status رکورد مورد نظر به مقدار 1 به‌روزرسانی می‌گردد.
  • سپس متد CronController::completeOnlinePurchaseProcess($gateway_id) فراخوانی می‌شود تا فرآیند پرداخت ناقص تکمیل گردد.
  • در صورت موفقیت، پیام تأیید با HTTP 205 و ذکر رفرنس پرداخت برگردانده می‌شود؛ در غیر این صورت خطا با جزئیات پیام بازگردانده می‌شود.

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

نام محل نوع ضروری توضیح
id Path integer بله شناسه‌ی رکورد پرداخت موقت برای بازخوانی
branch Body / Header integer بله شناسه‌ی شعبه (branch_id) برای بررسی مالکیت رکورد
PUT /api/v2/purchase/retry/74
{
  "branch": 31
}

ساختار خروجی

**موفق (HTTP 205):**
{
  "payload": {
    "message": "رفرنس 672CHECK-9 با موفقیت ایجاد شد."
  },
  "meta": {"timestamp": 1732028000}
}
**خطا - رکورد یافت نشد (HTTP 409):**
{
  "error": {
    "code": 1000,
    "message": "آیتم مورد نظر یافت نشد و یا اجازه بازخوانی ندارد"
  },
  "meta": {"timestamp": 1732028000}
}
**خطا - اجرای CronController ناموفق (HTTP 409):**
{
  "error": {"code":1000,"message":"پرداخت قابل تکمیل نیست"},
  "meta": {"timestamp": 1732028000}
}

امنیت

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

وابستگی‌ها

  • DB::table('temporary_payment')
  • CronController::completeOnlinePurchaseProcess()
  • authWithJwt Middleware

کارایی

عملیات سبک‌تر از 10 ms (به جز فراخوان CronController که وابسته به سرویس خارجی است).

مدیریت خطا

  • کد خطا 1000 برای همه‌ی حالات بازخوانی ناموفق یا عدم وجود رکورد.
  • در صورت بروز خطای دیتابیس، HTTP 409 با پیام عمومی ارسال می‌شود.

اثرات جانبی

  • تغییر مقدار status رکورد در جدول temporary_payment.
  • احتمال اجرای مجدد فرآیند ایجاد reference مالی.

ردپای حسابرسی

هنگام موفقیت در ایجاد رفرنس جدید، وقایع در SystemLog و جدول عملیات خرید ذخیره می‌شوند (در لایه CronController).

پیشنهاد بهبود

  • افزودن شناسه کاربر به کوئری برای محدودسازی دقیق‌تر امنیتی.
  • افزودن Retry Count برای جلوگیری از حلقه‌ی بازخوانی بی‌پایان.

جمع‌بندی

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