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

کدهای پاسخ درگاه بانک ملت | راهنمای ResCode به‌پرداخت

راهنمای کاربردی کدهای پاسخ درگاه بانک ملت و به‌پرداخت؛ معنی ResCodeهای رایج، علت خطاها، روش بررسی پرداخت و نکات مهم برای توسعه‌دهندگان.

آخرین بروزرسانی: ۱۴۰۵/۰۳/۳۰ ۰ نظر

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

مخاطب صفحهبرنامه‌نویسان، مدیران فروشگاه و پشتیبان فنی
موضوع اصلیمعنی ResCode و اقدام درست بعد از هر پاسخ
نکته کلیدیموفقیت پرداخت فقط با ResCode بررسی نمی‌شود؛ Verify ضروری است

ResCode در چه مرحله‌ای استفاده می‌شود؟

فرایند پرداخت آنلاین معمولاً از چند مرحله تشکیل می‌شود. ابتدا سایت درخواست پرداخت را به سرویس بانک ارسال می‌کند. اگر درخواست اولیه درست باشد، بانک یک شناسه پرداخت مثل RefId برمی‌گرداند و کاربر به صفحه پرداخت هدایت می‌شود. بعد از پرداخت، بانک کاربر را به آدرس برگشت سایت بازمی‌گرداند و پارامترهایی مثل ResCode، SaleOrderId و SaleReferenceId ارسال می‌شود.

۱

درخواست پرداخت

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

۲

بازگشت از بانک

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

۳

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

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

جدول کدهای پاسخ رایج درگاه بانک ملت

کدمعنی وضعیت یا خطااقدام پیشنهادی
0عملیات موفقتراکنش را Verify کنید، مبلغ و شماره سفارش را تطبیق دهید و سپس وضعیت سفارش را پرداخت‌شده کنید.
11شماره کارت نامعتبر استپیام مناسب نمایش دهید و امکان پرداخت مجدد با کارت دیگر را قرار دهید.
12موجودی کافی نیستپرداخت را ناموفق ثبت کنید و کاربر را به بررسی موجودی یا استفاده از کارت دیگر راهنمایی کنید.
13رمز نادرست استسفارش را پرداخت‌نشده نگه دارید و لینک تلاش مجدد نمایش دهید.
14تعداد دفعات ورود رمز بیش از حد مجاز استاز کاربر بخواهید وضعیت کارت را از بانک صادرکننده پیگیری کند.
15کارت نامعتبر استاستفاده از کارت دیگر یا تماس با بانک را پیشنهاد دهید.
16دفعات برداشت وجه بیش از حد مجاز استپرداخت را متوقف کنید و امکان پرداخت در زمان دیگر یا با کارت دیگر بدهید.
17کاربر از انجام تراکنش منصرف شده استاین وضعیت خطای فنی نیست. سفارش را در حالت پرداخت‌نشده نگه دارید.
18تاریخ انقضای کارت گذشته استکاربر باید از کارت معتبر دیگری استفاده کند.
19مبلغ برداشت بیش از حد مجاز استسقف کارت، مبلغ سفارش و محدودیت‌های بانکی را بررسی کنید.
21پذیرنده نامعتبر استاطلاعات ترمینال، نام کاربری، رمز پذیرنده و فعال بودن درگاه را بررسی کنید.
23خطای امنیتی رخ داده استIP سرور، SSL، اطلاعات ارسالی، تغییر نکردن پارامترها و تنظیمات پذیرنده را کنترل کنید.
24اطلاعات کاربری پذیرنده نامعتبر استterminalId، userName و userPassword را دوباره بررسی کنید.
25مبلغ نامعتبر استمبلغ باید عددی، مثبت و مطابق واحد مورد انتظار درگاه ارسال شود.
31پاسخ نامعتبر استلاگ پاسخ بانک، فرمت درخواست و وضعیت سرویس را بررسی کنید.
32فرمت اطلاعات وارد شده صحیح نیستطول و نوع داده‌هایی مثل شماره سفارش، تاریخ، مبلغ و آدرس برگشت را کنترل کنید.
34خطای سیستمیپرداخت را ناموفق ثبت کنید، لاگ بگیرید و در صورت تکرار با پشتیبانی درگاه پیگیری کنید.
41شماره درخواست تکراری استبرای هر پرداخت یک شماره سفارش یکتا تولید کنید و از ارسال دوباره همان شناسه جلوگیری کنید.
43قبلاً درخواست Verify داده شده استسیستم شما باید idempotent باشد؛ یعنی تکرار درخواست باعث چندبار فعال شدن سفارش نشود.
44درخواست Verify یافت نشدشماره سفارش، مرجع فروش و اطلاعات برگشتی بانک را با لاگ داخلی تطبیق دهید.
45تراکنش Settle شده استاگر سفارش قبلاً پرداخت‌شده ثبت شده، از انجام دوباره عملیات جلوگیری کنید.
46تراکنش Settle نشده استوضعیت را بررسی و در صورت نیاز متد Settle را طبق مستندات اجرا کنید.
47تراکنش Settle یافت نشدلاگ Verify و Settle را بررسی کنید و از ارسال صحیح شناسه‌ها مطمئن شوید.
48تراکنش Reverse شده استسفارش نباید پرداخت‌شده بماند. وضعیت مالی و لاگ برگشت وجه را بررسی کنید.
49تراکنش Refund یافت نشددر سناریوهای برگشت وجه، شناسه‌ها و وضعیت تراکنش را دوباره بررسی کنید.
51تراکنش تکراری استاز پردازش دوباره جلوگیری کنید و وضعیت قبلی سفارش را نمایش دهید.
54تراکنش مرجع موجود نیستSaleReferenceId، SaleOrderId و لاگ برگشت از بانک را بررسی کنید.
55تراکنش نامعتبر استپرداخت را ناموفق نگه دارید و جزئیات را در لاگ فنی ذخیره کنید.
61خطا در واریزسفارش را تا روشن شدن وضعیت نهایی در حالت بررسی نگه دارید و با پشتیبانی درگاه پیگیری کنید.

چرا Verify و کنترل مبلغ ضروری است؟

یکی از اشتباهات رایج در توسعه درگاه پرداخت این است که سایت فقط بر اساس ResCode=0 سفارش را تکمیل می‌کند. این کار امن نیست. بعد از بازگشت از بانک باید تراکنش در سمت سرور Verify شود و اطلاعات برگشتی با اطلاعات سفارش داخلی تطبیق داده شود. مبلغ، شماره سفارش، شناسه مرجع و وضعیت قبلی سفارش باید بررسی شوند.

  • برای هر سفارش یک شناسه پرداخت یکتا ایجاد کنید.
  • اگر سفارش قبلاً پرداخت شده، عملیات را دوباره انجام ندهید.
  • مبلغ برگشتی و مبلغ ذخیره‌شده در دیتابیس را تطبیق دهید.
  • نتیجه Verify و Settle را در جدول تراکنش‌ها ذخیره کنید.
  • در صورت خطای نامشخص، سفارش را در وضعیت «در حال بررسی» قرار دهید، نه پرداخت‌شده.

نمونه ساده بررسی وضعیت در PHP

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

<?php
$resCode = $_POST["ResCode"] ?? null;
$saleOrderId = $_POST["SaleOrderId"] ?? null;
$saleReferenceId = $_POST["SaleReferenceId"] ?? null;

if ($resCode !== "0") {
    // پرداخت ناموفق یا انصراف کاربر
    markOrderAsUnpaid($saleOrderId, $resCode);
    exit("پرداخت با موفقیت انجام نشد.");
}

// 1) سفارش را از دیتابیس بخوانید
$order = findOrderByPaymentId($saleOrderId);

// 2) از پردازش چندباره جلوگیری کنید
if ($order && $order["status"] === "paid") {
    exit("این سفارش قبلاً پرداخت شده است.");
}

// 3) تراکنش را از سمت سرور Verify کنید
$verifyResult = verifyMellatTransaction($saleOrderId, $saleReferenceId);

if ($verifyResult === "0") {
    markOrderAsPaid($saleOrderId, $saleReferenceId);
    exit("پرداخت با موفقیت تایید شد.");
}

markOrderAsPendingReview($saleOrderId, $verifyResult);
exit("وضعیت پرداخت نیاز به بررسی دارد.");

چک‌لیست رفع خطاهای رایج

اگر درخواست پرداخت ایجاد نمی‌شود

  • اطلاعات پذیرنده را بررسی کنید.
  • IP ثبت‌شده در بانک را کنترل کنید.
  • واحد مبلغ و مثبت بودن مبلغ را بررسی کنید.
  • SSL و آدرس برگشت را تست کنید.

اگر پرداخت انجام شده اما سفارش فعال نمی‌شود

  • لاگ callback را بررسی کنید.
  • Verify و Settle را کنترل کنید.
  • تطبیق مبلغ و شماره سفارش را چک کنید.
  • از تکراری نبودن شناسه سفارش مطمئن شوید.
نیاز به پیاده‌سازی مطمئن درگاه دارید؟مسترگروپ می‌تواند اتصال بانک ملت، زرین‌پال، زیبال و سایر درگاه‌ها را با ساختار امن، لاگ تراکنش، جلوگیری از پرداخت تکراری و پنل مدیریت انجام دهد.
ثبت درخواست پیاده‌سازی درگاه

سوالات متداول درباره کدهای بانک ملت

آیا ResCode صفر یعنی سفارش را بلافاصله پرداخت‌شده کنم؟

خیر. ResCode صفر نشانه اولیه موفقیت است، اما باید Verify سمت سرور، تطبیق مبلغ و کنترل وضعیت قبلی سفارش انجام شود.

خطای 17 مشکل فنی است؟

معمولاً خیر. کد 17 یعنی کاربر از پرداخت منصرف شده است. بهتر است لینک پرداخت مجدد نمایش داده شود.

برای جلوگیری از فعال شدن دوباره سفارش چه کار کنم؟

برای هر تراکنش شناسه یکتا ذخیره کنید و قبل از هر تغییر وضعیت بررسی کنید سفارش قبلاً paid نشده باشد.

گفتگو

نظرات و پاسخ‌ها

دیدگاه‌ها، تجربه‌ها و پرسش‌های کاربران درباره این صفحه را اینجا ببینید و ثبت کنید.

۰ نظر
هنوز نظری منتشر نشده است.اولین نظر را شما ثبت کنید.

ثبت نظر جدید