ملی ای‌پی‌آی

تبدیل کارت به شبا: چند کارت یک حساب، یک شبا

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

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

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

یک حساب، چند کارت

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

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

اگر هر دو کارت را تبدیل کنید و نتیجه یکی باشد، رفتار طبیعی است، نه اشکال.

پاسخ چیست

ورودی شماره کارت ۱۶ رقمی است. پاسخ سه چیز می‌دهد: شبا (IBAN)، نام بانک (bank_name) و نام صاحب کارت (name). نمونه با مقادیر ساختگی:

json { "IBAN": "IR…", "bank_name": "…", "name": "…" }

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

نامِ برگشتی را چه کنیم

نام را نشان دهید و تأیید بگیرید. «شبای متصل به این کارت به نام فلانی است، درست است؟». این گام کوچک جلوی دو خطا را می‌گیرد: کارت دیگری که اشتباه وارد شده، و کارت کسی که کاربر نمی‌خواسته.

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

مالکیت چه می‌شود

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

ثابت‌بودن نتیجه

تعویض کارت معمولاً حساب را عوض نمی‌کند. به همین دلیل نگاشت کارت به شبا کند تغییر می‌کند و ممکن است پاسخ از کش بیاید. این برای هزینه و سرعت خوب است. فقط وقتی کاربر می‌گوید «حسابم را عوض کردم»، دوباره استعلام بگیرید. فیلد source.fetchedAt می‌گوید پاسخ مال چه زمانی است.

چه زمانی تبدیل جواب نمی‌دهد

  • شماره کارت اشتباه یا ناقص: خطای ورودی، بدون هزینه.
  • کارتی که در شبکه پیدا نشود: «پیدا نشد»، که پاسخ معتبر و هزینه‌دار است.

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

چند سناریوی مرزی

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

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

کارت شرکتی. اگر نام برگشتی نام شرکت است، همان را نشان دهید و مقایسه با نام اشخاص را متناسب تنظیم کنید. این نکته در مقایسهٔ نام آمده است.

پیش از تبدیل، چه چیزی رایگان است

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

یک نکتهٔ طراحی دربارهٔ مهاجرت داده

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

تفاوت با تبدیل حساب به شبا

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

جزئیات خروجی که به آن بی‌توجهی می‌شود

دو فیلد کنار شبا را فراموش نکنید: نام بانک و نام صاحب کارت. نام بانک یک بررسی ارزان است؛ اگر کاربر گفته «بانک ملی» و پاسخ بانک دیگری است، قبل از هر واریز بایستید. نام صاحب کارت هم چنان که گفتیم باید به کاربر نشان داده یا با نام مورد انتظار مقایسه شود. هر دو بدون هزینهٔ اضافه در همان پاسخ آمده‌اند.

چرا ذخیرهٔ شبا بهتر از کارت است، به زبان ساده

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

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

نمونه جدول ذخیره

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

آنچه این سرویس نمی‌کند

مالکیت را نمی‌سنجد، موجودی نمی‌دهد، و درباره فعال بودن کارت یا حساب حرفی نمی‌زند. همچنین جای «تبدیل حساب به شبا» را نمی‌گیرد؛ آن سرویس ورودی دیگری دارد.

در یک نگاه

شبا را نگه دارید، نه شماره کارت را. نام را نشان دهید تا کاربر تأیید کند. نتیجه را برای کارت‌های مختلف یک حساب یکسان بدانید. و مالکیت را جداگانه بسنجید اگر برایتان مهم است.

فیلدهای ورودی و پاسخ در صفحهٔ تبدیل کارت به شبا آمده است.

آخرین بازبینی: تیم تحریریه ملی ای‌پی‌آی

وب‌سرویس مرتبط با این راهنما

API تبدیل کارت به شبا

شماره شبای متصل به یک کارت بانکی را بگیرید.

مشاهده مشخصات فنی و تعرفه

راهنماهای مرتبط

پرسش و تجربه کاربران

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

هنوز پرسشی ثبت نشده، اولین نفر باشید.