زمان کنونی: ۰۱ اردیبهشت ۱۴۰۳, ۱۲:۰۸ ب.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

رفع مشکل پرداخت بانک ملت (خطای ۴۲)

ارسال:
۲۹ شهریور ۱۳۹۱, ۰۱:۱۸ ق.ظ
رفع مشکل پرداخت بانک ملت (خطای ۴۲)
مشکل ماجول هدیه سایت برطرف شد. بد ندونستم دلایل این مشکل و راه‌حل رو توضیح بدم (بلکه به درد یه بنده خدایی خورد):

۱. آغاز مشکل: مشکل از اونجا شروع شد که ما سرور رو تغییر دادیم. با تغییر آی‌پی باید یه درخواست به بانک پذیرنده داد تا آی‌پی جدید تنظیم بشه. ما هم همین کار رو انجام دادیم. اما....
با همون اسکریپتی که قبلاً داشتیم نمی‌تونستیم پرداخت داشته باشیم. دلیل چی بود؟؟ آیا مشکل از بانک بود؟ آیا مشکل از اسکریپت ما بود؟
۲. شناسایی مشکل: شناسایی محل مشکل خودش از سخت‌ترین کارها توی این شرایط هست. من با بانک تماس گرفتم و مقادیر رو باهاشون چک کردم (واقعاً این بانک ملتی‌ها خیلی کارشون درسته و به مشتری‌ها احترام می‌گذارند) متوجه شدم که یکی از متغییرها به اسم saleReferenceId مقادیر عجیبی رو به خودش می‌گیره و چیزی که بانک برای من می‌فرسته با چیزی که من برای بانک می‌فرستم زمین تا آسمان متفاوت هست.
دلیل ساده این امر تنها یک چیز می‌تونه باشه، overflow! یعنی مقادیر saleReferenceId این‌قدر بزرگ هستند که توی int جا نمی‌شن. اما چرا توی سرور قبلی مشکل نداشتیم؟ سرور قبلی ما دارای معماری ۶۴ بیتی بود و به همین خاطر طول int در اون ۲ به توان ۶۴ بود. در حالی که این‌بار ما سرور رو ۳۲ بیتی کردیم!! و عجیب‌تر اینکه این saleReferenceId هم حدود چند ماهه که از میزان ماکزیمم int32 بالاتر رفته!!!
۳. راه‌حل: بعد از شناسایی مشکل پیشنهاد راه‌حل ساده به نظر می‌رسه. اما در این مورد خاص واقعاً راه‌حل ساده نیست. من متوجه شدم که درخواست SOAP ما به وب‌سرویس بانک ملت به صورت خودکار به int تبدیل می‌شه!! بنابراین ما از هر روشی استفاده می‌کردیم در نهایت overflow اتفاق می‌افتاد. راه حل واقعی این مشکل عوض کردن سرور به یک سرور ۶۴ بیتی بود اما ما چه طور این اتفاق رو دور زدیم؟
استفاده از تابع بسیار خطرناک eval از اونجا که استفاده ما از این تابع یک باگ امنیتی رو به مانشت اضافه کرده و به راحتی می‌شه با داشتن تعریف eval به مانشت نفوذ کرد من نمی‌تونم کد ۳۲ بیتی رو اینجا بیارم. لذا تنها توضیحاتی می‌دم که برای دوستان مفید باشه.
من متوجه شدم که تنها راه حل دور زدن تبدیل به int توی این وب‌سرویس استفاده از CONSTANTها هست. از طرفی اسم ثابت که میاد دل آدم می‌لرزه. مگه می‌شه که من Idای که هر سری تغییر می‌کنه رو توی یک ثابت بریزم؟؟ تنها راه انجام این کار استفاده از eval هست که بسیار بسیار خطرناک هست و باید با احتیاط سراغش رفت.

در نهایت از دوستانی که مایل به کمک به مانشت هستند درخواست می‌کنم که دریغ نکنند. متاسفانه هزینه‌های دلاری بالا رفته Big Grin

من برم هر جای دنیا قلب من دست تو گیره
۱
۰
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
 سپاس‌گزاری شده توسط: SaMiRa.e , انرژی مثبت , barca , fatima1537


موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
Exclamation خطای SQL Server2019 S.Pashaei ۰ ۲,۳۵۰ ۲۶ آذر ۱۳۹۹ ۰۲:۳۲ ب.ظ
آخرین ارسال: S.Pashaei
  رفع اشکال نصب جاوا، مشکل ساخته نشدن virtual machine shiivaa ۱۲ ۱۹,۲۴۳ ۱۹ آبان ۱۳۹۹ ۰۷:۲۹ ب.ظ
آخرین ارسال: wanted471
  چگونه این خطا را موقع اجرای sql server 2014 رفع کنم ؟ farahnaz ۲ ۲,۶۲۹ ۱۹ مهر ۱۳۹۹ ۰۲:۱۸ ق.ظ
آخرین ارسال: farahnaz
Sad مشکل در برنامه نویسی شیء گرا Xialu ۰ ۱,۹۶۲ ۰۵ شهریور ۱۳۹۹ ۱۲:۰۰ ب.ظ
آخرین ارسال: Xialu
  مشکل در حل تست ۲۲ فصل اول کتاب گسسته یوسفی pure.yaser ۷ ۸,۴۲۹ ۰۹ اردیبهشت ۱۳۹۹ ۰۶:۵۴ ب.ظ
آخرین ارسال: mohsentafresh
  رفع اشکال سؤالات کنکور دکتری هوش مصنوعی Lootus ۱۲ ۸,۳۴۹ ۲۵ اسفند ۱۳۹۸ ۰۷:۳۹ ب.ظ
آخرین ارسال: Lootus
  چگونگی پرداخت هزینه ثبت نام تیزهوشان ۹۹-۱۴۰۰ edumoshaver1 ۰ ۱,۸۵۸ ۱۲ اسفند ۱۳۹۸ ۰۵:۰۲ ب.ظ
آخرین ارسال: edumoshaver1
  رفع خطای Prevent saving changes that require ... در sql server deldar ۰ ۱,۷۱۸ ۲۴ مهر ۱۳۹۸ ۰۲:۴۹ ب.ظ
آخرین ارسال: deldar
  مشکل عدم ایجاد پروژه/فایل جدید در نت بینز αɾια ۳ ۱۰,۹۰۲ ۲۰ اردیبهشت ۱۳۹۸ ۰۳:۳۴ ب.ظ
آخرین ارسال: Silver1992
Question مشکل با درک توابع دنباله دار و مولد ؟؟؟؟ radar ۰ ۲,۵۰۰ ۱۶ دى ۱۳۹۷ ۰۴:۳۶ ب.ظ
آخرین ارسال: radar

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close