اگر دو کاربر به طور همزمان سعی کنند آخرین مورد را از یک فروشگاه آنلاین خریداری کنند ، ما یا فرصتی برای شرایط مسابقه یا فرصتی برای حمله DOS به فروشگاه داریم.
به طور خاص ، من از موتور پرداخت Magento و WorldPay استفاده می کنم ، اما من این مشکل را به عنوان یک مورد کلی تر می دانم که در آن از دروازه پرداخت شخص ثالث استفاده می شود.
دو سناریو را در نظر بگیرید
- سهام در هنگام قرار دادن سفارش یا کسر می شود.
- سهام هنگام دریافت پرداخت کسر می شود.
در سناریو 1 مشکل زیر را داریم. اگر پرداخت به پایان نرسد ، کالای هنوز از موجودی خارج می شود. این به یک مهاجم اجازه می دهد تا همه چیز را بدون پرداخت هزینه آن سفارش دهد - البته این مورد ارسال نمی شود ، اما کنترل سهام مانع از سفارش کاربران مشروعیت می شود. مشکل باید به صورت دستی ، در صورت مشاهده ، در ساعات اداری برطرف شود.
در Magento تنظیماتی وجود دارد تا تعداد مواردی را که می توان سفارش داد محدود کرد ، اما این برای مواردی که فقط تعداد معدودی از آنها وجود دارد ، واقعاً مفید نیست - و ما ممکن است بخواهیم همه آنها را به خریدار قانونی بفروشیم (یعنی نمی گویم"شما فقط می توانید 1 داشته باشید")
لزوماً نباید یک حمله عمدی باشد. اگر کاربر به دلیل مشکل مرورگر ، در وب سایت Gateway Payment مشکل داشته باشد ، ممکن است تسلیم شود - یا ممکن است این روند را دوباره شروع به کاهش سهام کند.
بنابراین گزینه دیگر ، سناریو 2 ما را به یک وضعیت مسابقه سوق می دهد. اگر دو کاربر هر دو با آخرین مورد به پرداخت بپردازند ، هر دو می توانند آن را سفارش دهند و به وب سایت Gateway Payment وارد شوند ، زیرا در آن مرحله سهام کسر نشده است. و سپس هر دو آنها پرداخت می کنند ، اما فقط یک مورد در دسترس است.
تا آنجا که من می توانم بیان کنم ، فقط یک پروتکل اطلاع رسانی پرداخت وجود دارد ، نه یک پروتکل "هنوز این مورد در سهام است".
بنابراین من نمی دانم که چگونه مردم به طور کلی با این مشکل برخورد می کنند ، و به ویژه از تنظیمات Magento / WorldPay می توان برای کاهش مسائل استفاده کرد.
بهترین تناسب من که می توانم به آن فکر کنم نوعی از زمان پرداخت است که این کالا را در انبار قرار می دهد. این امر نیاز به پرداخت هزینه پرداخت هم در انتهای Magento و هم در پایان WorldPay دارد ، اما من نمی توانم هیچ روشی را برای انجام این کار در هر یک از انتها ببینم.
من دو ساعت پس از قرار دادن سفارش ، هرگونه سفارش پرداخت در انتظار را از طریق API Magento لغو می کنم. من همچنین به کاربر ایمیل ارسال می کنم تا بگوید سفارش لغو شده است زیرا هیچ پرداختی پیدا نشده است تا بتوانند با ما تماس بگیرند یا سبد خرید خود را بازسازی کنند و دوباره امتحان کنند. در رابطه با این ، ما از API برای انجام به روزرسانی کامل سهام از دفتر پشتی خود در فواصل منظم استفاده می کنیم. ما واقعاً مسائل مربوط به سطح سهام را با فروش هزاران محصول به صدها مشتری در روز نداریم و از طریق تلفن و eBay نیز می فروشیم. همه به طور خودکار و بدون هیچ گونه مداخله کاربر انجام می شود.
لطفاً مشخص کنید که از چه نسخه ای از Magento استفاده می کنید. به طور خاص ، 1. 8/1. 13 نمایه سازی بهتری را ارائه می دهد که ممکن است بیشتر این مشکل را برطرف کند.
ما از 1. 7 استفاده می کنیم. من نمی دانم که یک کار به روزرسانی چقدر بزرگ خواهد بود و چه فایده ای خواهد داشت. من به این نتیجه می رسم که هنگام استفاده از موتور پرداخت شخص ثالث ، این مشکل هرگز نمی تواند به طور کامل از بین برود ، اما شاید من چیزی را از دست بدهم.
شما درست می گویید - این یک مشکل رایج است که به اندازه کافی آسان است و برای حل آن بسیار دشوار است. برای برآورد پیچیدگی های ارتقا ، برچسب به روزرسانی را بررسی کنید.
3 پاسخ 3
در بخش های مختلف پیمانکاری و مشاوره ای که من انجام داده ام ، راه حل حل این مشکل نیست. تفکر عمومی است
این اتفاق کمتر از آنچه فکر می کنید اتفاق می افتد
وقتی این اتفاق بیفتد ، گرفتن هر دو سفارش و رفع چیزها در سطح تجارت ساده تر است
رفع این مسئله در سطح کسب و کار به معنای انتظار برای تحقق سفارش دوم تا زمان ورود سهام بیشتر است ، یا اگر سهام بیشتری نیامده ، سفارش مشتری را لغو می کنید و یک ایمیل عذرخواهی را با یک کوپن اختیاری یا برخی از مزایای کم هزینه دیگر ارسال می کنید تا آنهااحساس بدی نکنید
من نمی توانم به طور خاص برای WorldPay صحبت کنم ، اما ما از یک روش ادغام سرور SagePay استفاده می کنیم و ماژولی که استفاده می کنیم (توسط Ebizmarts) این مسئله را در آنچه من می دانم بهترین راه حل کارآمد است ، حل می کند. بسته به پشتیبانی API و غیره ، این رویکرد ممکن است کاربردی نباشد.
ما 1 مورد در انبار داریم و دو نفر در پرداخت آن ، البته Magento مشکلی در این مورد ندارد. مشتری A و مشتری B هر دو در مرحله نهایی پرداخت قرار گرفتند که فرم SAGEPAY را در یک جعبه فانتزی باز می کند و مشتری را برای تکمیل جزئیات پرداخت خود باز می کند. بعد از اینکه مشتری جزئیات پرداخت خود را به SagePay (و در مورد برنامه های امن سه بعدی به بانک خود ارسال کرد) SagePay پستی را به URL اعلان در سرور ما ارسال می کند. بیایید فرض کنیم هر دو مشتری جزئیات صحیح را وارد می کنند و مشتری اول این کار را انجام داده است. SagePay Magento را از پرداخت موفقیت آمیز برای مشتری مطلع می کند. Magento نقل قول مشتری A را به سفارش و فاکتور بلافاصله تبدیل می کند (گزینه های مختلف پیکربندی برای تعویق و غیره وجود دارد ، اما ما از آنها استفاده نمی کنیم) قبل از ارسال پیام موفقیت در پاسخ بهاطلاع. SagePay سپس مشتری را به صفحه موفقیت پرداخت Magento دوباره هدایت می کند.
در این مرحله مشتری A به اتمام رسیده است و مشتری B فقط مرحله نهایی پرداخت را ارسال کرده است. SagePay سپس پستی را برای Magento ارائه می دهد و می گوید پرداخت موفقیت آمیز برای مشتری B. Magento تلاش می کند تا نقل قول مشتری B را به یک سفارش تبدیل کند ، اما این شکست خواهد خورد زیرا QUOTE_ITEM اکنون خارج از سهام است. ماژول این استثنا را به دست می آورد و پاسخ عدم موفقیت را به اعلان می دهد ، با نقل قول مشتری B هنوز دست نخورده و بدون سفارش. SagePay سپس پرداخت را باطل می کند و مشتری را به صفحه شکست (OPC) تغییر می دهد که در آن مشتری B پیام را دریافت می کند "سفارش نمی تواند تکمیل شود ، یک یا چند مورد از موجودی خارج نیست".
بنابراین بسیاری از ماژول های پرداخت دیگر که من قبل از دریافت هر نوع اطلاعات پرداخت ، به ایجاد سفارشات نگاه کردم ، این به دلیل تعداد برشی سفارشاتی که هرگز تکمیل نمی شوند ، من را عصبانی می کند. مشتریان اغلب گیج می شوند که چرا سفارشات زیادی در سیستم دارند که در واقع سفارش نیستند. اما شاید این فقط موارد من باشد.
مقالات آموزش فارکس...
ما را در سایت مقالات آموزش فارکس دنبال می کنید
برچسب :
نویسنده : بهزاد فراهانی
بازدید : <-PostHit->
تاريخ : سه
شنبه
30 خرداد
1402 ساعت: 12:11