مشکلات درگاه پرداخت الکترونیک را در ایوند چطور حل کردیم؟

تاریخ: ۲۱ دی ۱۳۹۵
مشکلات درگاه پرداخت الکترونیک

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

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

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

تو این مطلب خیلی تخصصی حرف نخواهم زد و سعی می‌کنم راه حل رو شفاهی و ساده ارائه بدم تا شما هم بتونید -نسبت به زبان برنامه‌نویسی‌تون- کارتون رو راه بندازید.

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

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

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

مشکل کی پیش میاد؟

همون‌طور که گفتم، گاهی اوقات ارتباط اینترنت از خارج به ایران محدود می‌شه.

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

و فکر می‌کنید در این لحظه چه اتفاقی رخ میده؟

رینگ رینگ رینگ…

این آواز خوش زنگ تلفن‌هاست که پرده‌ی گوش شما رو نوازش می‌کنه…

و مشتریان شاکی از این‌که به شما اعتماد کردن و کل فروش‌شون را به شما سپردن!

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

مشکلات درگاه پرداخت الکترونیک در ایران

مشکلات درگاه پرداخت الکترونیک در ایران

راه‌حل‌هایی که به ذهن‌مون می‌رسید، اینا بودن:

  1. باید یا سرورمون رو به صورت کلی به ایران انتقال می‌دادیم.
  2. یا از سرویس‌های پرداخت واسط استفاده می‌کردیم چون اونا هم سرور داخلی داشتن هم سرور خارجی.
  3. یا سرور در ایران داشتیم که پرداخت‌ها رو با اون هندل می‌کردیم.
  4. یا راه‌حل اصلی دیگه‌ای که بهش می‌رسیم!

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

اگه از راه حل دوم -رفتن روی سرویس‌های پرداخت- استفاده می‌کردیم، باز همون مشکل رو داشتیم. چرا؟ چون این سرویس‌ها فقط مشکل اینماد رو حل می‌کنن و مشکل fail شدن درخواست‌ها به سرورهای بانکی پابرجا می‌مونه.

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

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

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

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

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

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

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

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

مشکل و راه‌حل

مطالب مرتبط

Exam: C_TSCM52_66 | 640-875 , 70-697 , 1Z0-060 , 98-365 , NSE7 , 2V0-621D , EX300 , 70-270 , PK0-003 , MB6-702 , 210-451 , 70-532 , C_TSCM52_66 , EX300 | 350-029 , MB2-707 , 350-060   , 300-085 , 70-466 | EX300 | 70-178 , 300-209 , 300-115 , M70-101 , 1K0-001 , C_HANATEC_10 , 70-414 | 70-177 , 642-999 , 350-060 , EX300 , 9A0-385 , 9A0-385 , ICBB , 640-692 , 000-104 , 70-980 , SY0-401 , 300-320 , 1z0-429 | 300-101 | 70-532 , 300-208 , 1Z0-062 , 200-125   , JN0-633   , 1K0-001 , 1V0-603 , 70-413 , 101 , HP0-S41 , 200-105 , OG0-091 , OG0-091 , 70-413 , 70-417 , MB7-701 | 400-051 , 070-461 , 350-030 , 700-037 , 70-697 , 810-403 , MB6-702 , 70-178 , 070-331   , 210-451 , LX0-103 , 000-017 , MB2-703 | 70-483 , JN0-360 , 200-105 , 9A0-385 , 640-916 , 640-864 | PK0-003   , 642-732 , 70-486 , 300-209 , 000-106 , 1Z0-803 , 500-801 | 70-461 | 70-697 , 400-201 , 350-001 , 1Z0-808 , 070-487 , MB2-704 , CGEIT , 600-460 , 200-101 | JN0-343 , 1Z0-062   , 300-320 , 700-260 , 500-260 , 400-101 , 1z0-808 , C_TFIN52_66 , NS0-157 , 70-346 , 98-349 | 3002 , 300-080 , 700-260 , 1Z0-808 , 70-332 , 250-272 | 1V0-601 , 700-801 | 98-349 | 1Z0-062 , 117-202 , OG0-093 , API-580 , 712-50 , MB2-708 , MB6-703 , 642-874 | 70-413 , 600-199 , 220-801 | 640-692 , 70-332 , 640-911 , CISM , 100-101 | 210-060 , 70-178 , 1Z0-060 , 1Z0-062 , CCD-410 | 300-115 , MB6-703 , 210-065 , 642-999 , 3002 , CBAP , 1Z0-808 , 600-460 , human hair wigs: Lace Front Wigs   , Semi-full Lace Wigs   , Full Lace Wigs   , Human Hair Wigs   , Human Hair Full Lace Wigs   , human hair wigs   , human hair wigs   , human hair wigs   , lace front wigs   , lace wigs   , human hair wigs   , hair wigs   , lace front wigs   , lace front wigs   , lace front wigs   , human hair wigs   , human-hair-wigs    | lacewigsbuy-human-hair-wigs    | divatress-wigs-human-hair    | platinumwigs-human-hair-wigs    | headcovers-wigs-human-hair-wigs    | besthairbuy-wigs    | sistawigs-human-hair-wigs    | bestwigoutlet-wigs-human-hair    | wig-type-human-hair-wigs    | human-hair-wig    | everafterguide-human-hair-wigs    | especiallyyours-wigs    | irresistible-wigs    | epiccosplay-wigs    | divatress-wigs    | lace-front-wigs    | hairsisters-lace-front-wigs    | samsbeauty-lace-front-wigs    | lace-front-wigs-human-hair    | aprillacewigs-lace-front-wigs    | omywigs    | human-hair-wigs    ; omywigs human hair wigs   , lace front wigs   ,