اینم یه تجربه پراکنده دیگه!

پست‌های مرتبط با ۸۵۸۳ منجر به یه سری سوال جواب ایمیلی شده که من سعی مکنم با اجازه کسانی که سوال پرسیدن اونها رو اینجا باز نشر میکنم. البته بگم اینها همه نظارت و تجربیات مستقیم من هست نه چیز دیگه ای

سوال

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

و اینم جواب من
با سلام
خواهش میکنم
اول از همه باید بگم که پروتکل ۸۵۸۳ تنها یه پروتکل معرفی ساختار داده است. یعنی تعیین میکنه چه اطلاعاتی به چه شکلی فرستاده بشه. اما تعیین نمیکنه که دقیقا چیا فرستاده بشه. پس هر جایی که از این پروتکل استفاده میکنه یه سری اختصاصی سازیها روی این پروتکل انجام میده. مثلا یه نفر میخواد همیشه نسخه نرم افزار هم در کنار اطلاعات تراکنش فرستاده بشه. یکی دیگه ممکنه بخواد زمان انجام تراکنش هر دفعه فرستاده بشه و هزارتا انتخاب دیگه که وجود داره. حالا هر شرکت ارائه دهنده خدمات براساس نیازهاش و با توجه امکاناتی که سوئیچ بانکیش در اختیارش قرار میده یه پروتکل اختصاصی شده از روی پروتکل ۸۵۸۳ ایجاد میکنه.
دوم اینکه باز هم هر شرکتی راهبرد متفاوتی برای مشخصات پذیرنده پوز داره. مثلا یه شرکت فرضش اینه که موقع نصب تمام اطلاعات مربوط به مشخصات پذیرنده روی پوز ست میشه و در صورت تغییر این مقادیر سوئیچ این تغییرات رو به پوز اطلاع رسانی میکنه. یه جای دیگه فرض بر اینه که کلا این اطلاعات از یه کانال خاص با یه فرمت خاص منظوره که اصلا هم ربطی به استاندارد ۸۵۸۳ نداره به پوز اعلام میشه و نیاز به انجام هیچ تنظیمی از سمت پوز نیست. این تفاوت نگاه تو جاهای مختلف وجود داره.
اگه منظورت از صورت حساب همون گزارشاتی باشه که پوز میده یه سریشون اصلتا آفلاین هست. یعنی تراکنش‌ها روی یه سری فایل ذخیره شده و حالا از روی اون فایل‌ها یه سری گزارش ارسال گرفته میشه. یه سری دیگشون هم با استفاده از ۸۵۸۳ انجام میشه. اما اینجا هم ممکنه یه شرکت بخواد از چیزی غیر از ۸۵۸۳ استفاده کنه.
در مجموع در هر جایی ممکنه شما از یه استاندارد خود ساخته‌ای بجای ۸۵۸۳ استفاده کنی ولی معمولا فرض بر اینه که از این استاندارد استفاده میشه.
خوش و خرم باشید

اینم یه تجربه پراکنده دیگه!

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

تنها بخش مجهول این بود که من ایده‌ای نداشتم که چطوری پروتکل ۸۵۸۳ رو بصورت بهینه توی این زبان parse کنم که این پروژه‌ها رو پیدا کردم که بهم یکم ایده میدن. گفتم لیستش رو اینجا بنویسم شاید به درد دیگران هم بخوره

https://github.com/jthmath/VirtuaPOSP

https://github.com/paopaol/bank

https://github.com/linphy/iso8583go

https://github.com/dgv/omg8583

اینم یه تجربه پراکنده دیگه

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

اولین و مهمترین بخش فیلدها، فیلد مشخصه پیغامه که یک عدد ۴ رقمیه که معنای هریک از رقم ها به این صورته که:

  • اولین رقم (۰xxx) : نشان دهنده نسخه استاندارده
  • دومین رقم (x1xx) : دسته پیغام رو نشون میده
  • سومین رقم (xx0x): نوع پیغام که درخواست یا پاسخ باشه رو نشون میده
  • چهارمین رقم(xxx0): نشان دهنده اینه که این پیغام رو چه کسی فرستاده (شروع کننده تراکنش، پاسخ دهنده تراکنش و …)

دسته پیغام های مهم هم عبارتند از :

  • پیغام احراز هویت(۱): مثلا وقتی که نام صاحب کارت توی انتقال کارت استعلام میشه
  • پیغام مالی (۲): مثلا وقتی شما از دستگاه خرید میکنید
  • پیغام فایل(۳): مثلا وقتی قرار فایلهای دستگاه کارتخوان بروزرسانی بشن
  • پیغام تسویه(۵): وقتی که تراکنش موفق بوده و دستگاه میخواد اعلام کنه پول رو به فروشنده تحویل بدید
  • پیغام شبکه(۸): وقتی دستگاه میخواد اطلاعات مرتبط با اتصالش به شبکه از قبیل شماره تلفن و … رو از سرور مرکزی که همون سوئیچ بانکی باشه بگیره استفاده میشه

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

اینم یه تجربه پراکنده دیگه!

من یه مدت توی سیستم بانکی این مرز و بوم کار میکردم و برنامه نویس  پایانه‌های فروش بودم. از اونجا بود که یه استاندارد بانکی به نام iso ۸۵۸۳ بود آشنا شدم که یه استادارد برای تراکنش‌های مبتنی بر کارت است. این استادارد سه تا نسخه ۸۵ و ۹۱ و ۰۳ داره که در سالهای ۱۹۸۵ و ۱۹۹۱ و ۲۰۰۳ استاندارد شده که هرکدوم تفاوت‌هایی دارند.

درسهای زیادی برای یادگرفتن از این پروتکل وجود داره و مهمترینش اینه که سعی کن «کم گوی و گزیده گوی» باشی و پیشنهاد میده بسته تراکنش‌های مالی بایستی کمتر ۱۰۲۴ بایت باشه تا موفقیتش به میزان زیادی تضمین بشه.

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

  • پیاده سازی به زبان c معروف به سندرسون
  • پیاده سازی به زبان java معروف به jpos
  • دوتا پیاده سازی محیط .net هم داره که توی اینجا و اینجا پیدا میش

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