رفتن به مطلب

دریافت محصولات دنلودی و تکمیل سفارش، بدون پرداخت مبلغ!


ahmadwp

پست های پیشنهاد شده

سلام خدمت شما عزیزان.

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

مشکلی که پیش اومده این هست که کاربری اومده و بدون اینکه احتمالا هیچ پرداختی انجام بده، سفارشش رو دریافت کرده و محصولات رو هم کاملا دانلود کرده!

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

این تراکنش ها به صورت ناموفق در درگاه واسط ثبت شدن، اما چطور وقتی تراکنش موفق نبوده، اون کاربر تونسته برگرده و سفارش رو تکمیل کنه! (بدون پرداخت؟)

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

در ووکامرس گزینه ای برای محصولات دانلودی وجود داره با نام (دسترسی به محصولات دانلود شدنی پس از پرداخت) این گزیه اگر فعال باشه، نیاز نیست که دیگه مدیرِ سایت، هر بار برای هر سفارش یکی یکی بره و وضعیت اونها رو به تکمیل شده تغییر بده تا مشتری بتونه محصول رو دانلود کنه و این احتمالا هیچ مشکلی نداره چون جزو امکانات داخلی ووکامرس هست.

اما من برای اینکه وضعیت سفارش از حالت پرداخت شده به تکمیل شده تغییر داده بشه کمی کد در فایل function.php پوسته سایتم قرار دادم که در زیر برای شما قرار می دم، شاید باگ در همین کد باشه چون احتمالا ووکامرس سیستمی نیست که چنین باگ ضایعی داشته باشه، هرچند که دور از انتظار هم نیست.

کدی که در فاکنشن قرار دادم:

/**
* Auto Complete all WooCommerce orders.
*/
 
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) {
    global $woocommerce;
 
    if ( !$order_id )
        return;
    $order = new WC_Order( $order_id );
    $order->update_status( 'completed' );
}

/**
* Auto Complete all WooCommerce orders.
*/

به نظر شما همین کد می تونه مشکل ایجاد کرده باشه و اون کاربر (احتمالا هکر) از همین موضوع استفاده کرده باشه و در فرانت اند کاری کرده باشه که بدون پرداخت، سفارش تبدیل به تکمیل شده بشه؟

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

جالب اینجاست که گفتم شاید مسئولین درگاهِ پِی درست بررسی نکرده باشن و مشکل از افزونه اونها باشه، لذا درگاه رو از پِی، به زرین پال تغییر دادم و اون قبلی رو حذف کردم، اما با زرین پال هم همین مشکل به وجود اومد!

آیا باید نگران امنیت سایتم باشم و این می تونه این هشدار رو بده که باقی قسمت های سایتم مانند مدیریت هم در خطره؟ چطور اون کاربر یا کاربران این کار رو انجام دادن و بدون اینکه پرداختی انجام بدن سفارش رو تکمیل کردن و محصولاتشون رو دریافت کردن؟

بنده درگاه پرداخت پِی و زرین پال رو هم از سایت های اصلی اونها دانلود کردم و برای شما پیوست کردم که در صورت امکان لطف کنین و شما استادان گرامی هم نگاهی بندازین و ببینین که آیا این باگ می تونه از این درگاه ها باشه؟

بسیار از شما سپاسگزارم

Payir-woocommerce.zip

zarinpal-woocommerce-payment-gateway.zip

لینک به ارسال

به نظرم باید چک کنید اگه وضعیت processing بود تغییر بده به complete

 

لینک به ارسال

سلام

من مشکلی تو کد ندیدم

 

ادرس سایتتون رو قرار بدین تا مشکل رو بررسی کنیم...یا شاید باگ directory listing ای چیزی باشه...

یاعلی

لینک به ارسال

دوست عزیز دقیقا حق با a_mogheimi هست.

داخل برگه ی پس از بازگشت از درگاه یک do_action به شکل زیر اجرا میشه :

<?php do_action( 'woocommerce_thankyou_' . $order->get_payment_method(), $order->get_id() ); ?>
<?php do_action( 'woocommerce_thankyou', $order->get_id() ); ?>

زمانی که کاربر به این برگه دسترسی پیدا کنه این اکشن در صورتی که سفارش (با هر وضعیت پرداختی) وجود داشته باشه براش اجرا میشه و اکشن شما هم اجرا میشه.

اصلا روش خوبی رو استفاده نکردید.

بهتره از اکشن woocommerce_order_status_changed استفاده کنید که چک کنید اگر وضعیت جدید به صورت پرداخت شده بود به وضعیت تکمیل شده تغییر پیدا کنه.

لینک به ارسال

سلام.

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

آقا حنان عزیز (HANNANStd)، یعنی اصلا نباید نگران امنیت سایتم باشم و فکر کنم که سایتم هک شده؟ چون در سایتم هیچ آثاری از هک شدن وجود نداره و تنها اتفاق غیرطبیعی که توسط من مشاهده شده همین مورد خرید بدون پرداخت هست.

اون هم همه کاربران قادر به این کار نیستن (چون این روش این شخص رو بلد نیستن)، این شخصی که این کارها رو انجام داده از روش خاصی استفاده می کنه، من خودم به عنوان کاربر، هر جور امتحان می کنم و از صفحه پرداخت بانک بر می گردم، یا اینکه پرداخت رو نیمه تمام می ذارم، به هیچ وجه سفارش خود به خود، به پرداخت شده یا تکمیل شده تغییر داده نمیشه، نمی دونم این شخص دقیقا از چه روشی برای این کار استفاده می کنه که پرداخت رو دور می زنه و بدون پرداخت، سفارش رو تبدیل به تکمیل شده می کنه و محصولات رو دانلود می کنه!؟

با توجه به گفته های شما (آقا حنان) فکر می کنم جای نگرانی نیست و مشکلی مانند هک شدن برای سایتم وجود نداره و فقط باید همین کدی که در فانکشن قرار دادم که مرتبط با تغییر وضعیت سفارش هست رو جایگزین کنم، آیا درست متوجه شدم؟

چون من همیشه وردپرس و تمامی افزونه ها رو به روز نگه می دارم، دایرکتوری لیستینگ رو غیرفعال کردم، سطح دسترسی یا پرمیشن پوشه ها و فایل های مهم وردپرس رو بر روی ۴۰۰ قرار دادم، از رمز بسیار قوی برای مدیریت استفاده کردم و خیلی از موارد رو در بحث امنیت رعایت کردم و به اونها آگاهی دارم، برنامه نویسان شرکت های درگاه پرداخت هم بررسی کردن و گفتن که به هیچ وجه مشکل در سیستم اونها و یا پلاگین اونها نیست.

تنها چیزی که این وسط توسط خودم دستکاری شده، این هست که این کد رو در فانکشن قرار دادم، البته خیلی وقته قرار دادم و تاکنون این مشکل برام پیش نیومده بود، اما اینبار ظاهرا شخصی اومده و روشی رو برای دور زدن پرداخت پیدا کرده!

من فقط می خوام از این موضوع مطمئن بشم که دقیقا این مشکل به خاطر چه چیزی به وجود اومده و عامل اصلی اون چیه؟ تا اون رو به طور کامل رفع کنم، باز هم از صمیم قلب از همه شما متشکرم.

لینک به ارسال
https://metorik.com/blog/autocomplete-all-the-orders-in-woocommerce
https://woocommerce.com/products/woocommerce-order-status-control/
https://www.skyverge.com/blog/how-to-set-woocommerce-virtual-order-status-to-complete-after-payment/

در لینک اول قسمت سوم‌ش مناسب کار شماست

دومی هم افزونه رسمی ووکامرس هست

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

لینک به ارسال

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

خواستم از این طریق هم اعلام کنم تا این تاپیک، به یک نتیجه نهایی برسه و بحثش تمام بشه.

مشکل از همون کدی بود که خودمم بهش مشکوک بودم، کدی که در فانکشن قرار داده بودم، یعنی کدی که در ابتدای همین تاپیک، در پیام اول نوشته بودم، مشکلِ این کد این بود که هیچ شرط محکمی در اون تعیین نشده بود، مثلا اگر حتما وضعیت سفارش در حالت، در حال انجام یا پرداخت شده باشه، بعد به تکمیل شده تغییر پیدا کنه.

آقای مقیمی عزیز، لینکی رو هم برای بنده ارسال کردن که در اون شرطِ بهتر و امن تری نوشته شده بود، لینک زیر:

https://stackoverflow.com/questions/36969532/how-to-check-order-status-after-payment-in-woocommerce

باز هم از همه شما خوبان متشکرم، گاهی اوقات همین چیزهای کوچیک که از نگاه آدم دور می مونه می تونه باعث ایجاد مشکل بشه، وردپرس سیستم امنیه، البته اگر خود ما امنیتش رو بر هم نزنیم! B) من با قرار دادن کد ناامن، خودم باعث این مورد شده بودم که حالا حل شد.

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

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

مورد بعدی اینه که گاهی اوقات کدها هم مشکل ندارن، اما وقتی قالب، افزونه ها و خود وردپرس آپدیت می شه، اون کدهای قدیمی دیگه با نسخه های جدید سازگار نیستن، البته به این موضوع واقف بودم اما فراموش کرده بودم بررسی کنم، به هر حال، لازمه هر بار که به روز رسانی ای انجام می دین، دوباره کدهای کاستومی که قرار دادین رو بررسی کنین و مطمئن بشین که با نسخه های جدید مشکلی نداره (از لحاظ امنیت و کارآیی)

موفق باشید، متشکرم، خدا نگهدار

لینک به ارسال
  • 3 سال بعد...

سلام خدمت شما دوستان عزیز سایت ما هم دقیقه تازه گی به همین مشکل برخورده بوده که یک یک ماه پیش یه سفارش ثبت کرده بوده ما هم خبر نداشتیم که این سفارش نبوده دو روز پیش همین آقا یک سفارش دیگه ثبت کرده بوده یکم مبلغ بالا بود ما تست کردیم دیدیم اصلا پول واریز نشده با سرچ که انجام دادم به این مقاله رسیدم امید وارم که مشکل از همین کد باشه کد دوستان معرفی کردن 

// => not a filter (an action hook)
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );
function custom_woocommerce_auto_complete_paid_order( $order_id ) {
    if ( ! $order_id )
        return;

    $order = new WC_Order( $order_id );

    // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
    if ( get_post_meta($order_id, '_payment_method', true) == 'bacs' || get_post_meta($order_id, '_payment_method', true) == 'cod' || get_post_meta($order_id, '_payment_method', true) == 'cheque' ) {
        return;
     }
    // "completed" updated status for paid "processing" Orders (with all others payment methods)
    elseif ( $order->has_status( 'processing' ) ) {
        $order->update_status( 'completed' );
    }
    else {
        return;
    }
}

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

لینک به ارسال
  • 1 ماه بعد...
در در ۱۳۹۶/۶/۱۲ در 20:09، ahmadwp گفته است :

سلام.

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

آقا حنان عزیز (HANNANStd)، یعنی اصلا نباید نگران امنیت سایتم باشم و فکر کنم که سایتم هک شده؟ چون در سایتم هیچ آثاری از هک شدن وجود نداره و تنها اتفاق غیرطبیعی که توسط من مشاهده شده همین مورد خرید بدون پرداخت هست.

اون هم همه کاربران قادر به این کار نیستن (چون این روش این شخص رو بلد نیستن)، این شخصی که این کارها رو انجام داده از روش خاصی استفاده می کنه، من خودم به عنوان کاربر، هر جور امتحان می کنم و از صفحه پرداخت بانک بر می گردم، یا اینکه پرداخت رو نیمه تمام می ذارم، به هیچ وجه سفارش خود به خود، به پرداخت شده یا تکمیل شده تغییر داده نمیشه، نمی دونم این شخص دقیقا از چه روشی برای این کار استفاده می کنه که پرداخت رو دور می زنه و بدون پرداخت، سفارش رو تبدیل به تکمیل شده می کنه و محصولات رو دانلود می کنه!؟

با توجه به گفته های شما (آقا حنان) فکر می کنم جای نگرانی نیست و مشکلی مانند هک شدن برای سایتم وجود نداره و فقط باید همین کدی که در فانکشن قرار دادم که مرتبط با تغییر وضعیت سفارش هست رو جایگزین کنم، آیا درست متوجه شدم؟

چون من همیشه وردپرس و تمامی افزونه ها رو به روز نگه می دارم، دایرکتوری لیستینگ رو غیرفعال کردم، سطح دسترسی یا پرمیشن پوشه ها و فایل های مهم وردپرس رو بر روی ۴۰۰ قرار دادم، از رمز بسیار قوی برای مدیریت استفاده کردم و خیلی از موارد رو در بحث امنیت رعایت کردم و به اونها آگاهی دارم، برنامه نویسان شرکت های درگاه پرداخت هم بررسی کردن و گفتن که به هیچ وجه مشکل در سیستم اونها و یا پلاگین اونها نیست.

تنها چیزی که این وسط توسط خودم دستکاری شده، این هست که این کد رو در فانکشن قرار دادم، البته خیلی وقته قرار دادم و تاکنون این مشکل برام پیش نیومده بود، اما اینبار ظاهرا شخصی اومده و روشی رو برای دور زدن پرداخت پیدا کرده!

من فقط می خوام از این موضوع مطمئن بشم که دقیقا این مشکل به خاطر چه چیزی به وجود اومده و عامل اصلی اون چیه؟ تا اون رو به طور کامل رفع کنم، باز هم از صمیم قلب از همه شما متشکرم.

 

سلام دوست عزیز

من روشش رو بلدم، خیلی راحته

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

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

و سورس کدشو باز میکنی،اونجا آدرس فایل وجود داره،کپی میکنه و در مرورگر سرچ و دانلود میکنه

....(سانسور)....

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

لینک به ارسال
  • 4 ماه بعد...

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...