Woo-poly-integration: مشكلة مزامنة المخزون مع IPN

تم إنشاؤها على ٢١ يناير ٢٠١٨  ·  27تعليقات  ·  مصدر: hyyan/woo-poly-integration

هل يمكنك إعادة إنتاج هذه المشكلة على سمة Wordpress الافتراضية (مثل واجهة المتجر)؟
نعم

هل يمكنك إعادة إظهار هذه المشكلة عند تعطيل جميع المكونات الإضافية الأخرى باستثناء WooCommerce و Polylang و Hyyan WooCommerce Polylang Integration؟
نعم

ما إصدارات المنتج والإعدادات التي تستخدمها عند حدوث هذه المشكلة؟
PHP: PHP 7.0
ووردبريس: 4.9.2
WooCommerce: 3.2.6
بوليلانج: 2.2.8
تكامل Hyyan WooCommerce Polylang: 1.0.4
المتصفح: Chrome الأحدث

خطوات التكاثر
قم بإعداد لغتين على الأقل ، دعنا نقول EN = افتراضي ، FR
قم بتعيين منتج ، وقم بترجمته إلى اللغتين وقم بتعيين المخزون على 3
أضف 1 من هذا المنتج إلى السلة أثناء وجودك في فرنسا
تابع عملية الدفع باستخدام منصة دفع مثل Paypal أو Payzen.
بمجرد الانتهاء من العملية ، أغلق الصفحة قبل إعادة التوجيه إلى موقع الويب الخاص بك.
تأكد من إرسال IPN إلى موقع الويب الخاص بك.
تم استلام طلبك ، سيكون مخزون المنتج 1 باللغة الإنجليزية و 3 بالفرنسية!

ما توقعت
أن يكون لديك 2 كمخزون في كل لغة كما كان 3 وقمت بشراء 1.

ماذا حدث بدلا من ذلك
عند الاتصال عبر IPN ، يتم تحديث تحديث المخزون مرتين للغة الافتراضية بدلاً من مرة واحدة لكل منهما ، لقد بحثت ووجدت المشكلة التي يمكن إصلاحها على النحو التالي:

عن طريق إزالة هذه الخطوط في Stock.php

$productID = Utilities::get_order_item_productid($item); $productObject = wc_get_product($productID);

بطريقة ما ، عندما يتم استدعاؤها من خلال IPN ، تقوم دالة get_order_item_productid بإرجاع معرف المنتج لمنتج اللغة الافتراضية بدلاً من المنتج المحدد.

راجعت wc-stock-function.php وغيرت هذين السطرين من خلال هذا:

$productObject = $item->get_product(); $productID = $productObject->get_id();

ثم قمت بإزالة ملف

unset($translations[$orderLang]);

وتخطى ببساطة المنتج الحالي في حلقة الترجمات:

if ($ID == $productID) continue;

help wanted stock

التعليق الأكثر فائدة

يمكنك التحقق من Fix الخاص بي وإجراء تغييرات على ملف Stock في المكون الإضافي:
https://github.com/hyyan/woo-poly-integration/pull/300/files

لم يتم قبوله بعد ولكني أستخدمه لمدة شهر دون أي مشكلة.

آمل أن يقبلوا طلب السحب الخاص بي يومًا ما ...

ال 27 كومينتر

عندما يتم استدعاؤها من خلال IPN ، تقوم دالة get_order_item_productid بإرجاع معرف المنتج لمنتج اللغة الافتراضية بدلاً من المنتج المحدد.

نعم ، سيتم التعامل مع عنوان URL الخاص بـ IPN نفسه بواسطة Polylang كما هو الحال في اللغة الافتراضية.
[على الرغم من أن # 218 يشير إلى إمكانية وجود IPN خاص باللغة ويقترح تغييرًا لضمان عدم حدوث ذلك]

كيف تقتصر تغييراتك على مكالمات IPN فقط؟
هل يمكنك إرسال تغييراتك كطلب سحب بحيث يكون من الواضح مراجعة الاختلاف في التغييرات؟

سؤال واحد ساذج ، ألا يتم حل المشكلة أيضًا من خلال عدم استخدام IPN؟ ما فائدة استخدام IPN في هذه الحالة؟ (لا يستخدم موفرو الدفع الآخرون IPN وهو ليس ضروريًا لـ PayPal أيضًا ، لذا فقط للتوضيح ...)

لا يبدو أن التغييرات تؤثر على المكالمات بخلاف IPN ، فأنا أستخدم التصحيح الخاص بي في الإنتاج وليس لدي أي مشكلات على الإطلاق.
لقد قدمت طلب التغيير.
أنا حقًا لا أرى كيف يمكنك تجنب استخدام IPN. هل يمكن أن تشرح لي كيف لا تستخدمه؟
عدم استخدام IPN سيجعلك تعتمد كليًا على PDT ، وهي عادةً الصفحة التي يتم إعادة توجيههم إليها بعد الدفع. في حالتنا ، لا ينتظر أكثر من 50٪ من عملائنا حتى يتم إعادة توجيههم (تعيين على ثانية واحدة) إلى موقعنا على الويب بعد الدفع ، مما يعني أنه بدون IPN ، لن يتحول نصف طلبنا إلى اكتمال الدفع. يسمح لنا IPN بالتأكد من تحديث دفع الطلب ولا يمكنني أن أفهم كيف لن تستخدم هذا.

حسنًا ، يحتوي تسجيل الخروج القياسي على Stripe على سبيل المثال إما على مربع حوار منبثق أو حقول بطاقة على الصفحة (أو زر Apple Pay على الصفحة) ، ويبدو أنه يتحكم في كل شيء عبر مجموعة من نصوص جافا سكريبت واستدعاءات أجاكس ، لست على علم بذلك له ما يعادل Paypal IPN.

هل تستخدم تكامل Paypal المقدم من WooCommerce أو أحد المكونات الإضافية الأخرى؟

نظرًا لأن جافا سكريبت هي جانب العميل ، فهي غير موثوقة. قد تفشل JS أو يتم حظرها ، وعادةً ما يتم حظر النوافذ المنبثقة. أيضًا ، يقوم العديد من عملائنا بتشغيل IE مع Win7 ، المعروف بتطبيقه السيئ لـ Javascript.
نحن لا نستخدم Paypal ، نحن نستخدم PayZen و Ingenico Plugins ، كلاهما يعمل مع IPN.
لا يتعين عليك استخدام IPN مع أي مكون إضافي ، ولكنه متاح دائمًا ، حتى في Stripe.
https://github.com/jatskie/stripe/blob/master/ipn.php
لقد قمنا بتنفيذها لأنها تمنحك اليقين ، أيضًا ، في مجال عملنا ، يطلب الأشخاص غداءهم قبل الساعة 10:15 ويتم تسليمهم قبل الساعة 12 ، لذلك ، إذا لم يتم إخطار الدفع ، فلن يحصل العميل على غدائه. في هذه المسألة ذات الأهمية الزمنية ، لا يمكننا الاعتماد على الصدفة ويجب أن ننفذ IPN للتأكد من أن الطلب المدفوع ستتم معالجته خلال الإطار الزمني الخاص بنا.

إذا دفعنا مع بنك التحويل لا يعمل.

carlituxman هذه ليست تفاصيل كافية لأي شخص ليتمكن من التعليق ، ولكن من المحتمل جدًا أن الوضع تغير مع woocommerce 3.3.5 بسبب تغيير woocommerce ajax مرة أخرى. ستحتاج إلى الاختبار مع كل من طلبات السحب المفتوحة ، أحدهما مقترح لإصلاح هذه المشكلة والآخر يعمل على إصلاح مشكلة أجاكس.

آسف. ما هي مشكلة اياكس فيكس؟
أعتقد أنك تقول # 329؟

لقد طبقت إصلاحات # 329 و # 300 ولا تعمل.
لدي نفس المشكلة رقم 332

حسنًا ، ما هو إصدار woocommerce الذي تستخدمه؟

woocommerce 3.3.5

هل هناك حل لهذه المشكلة؟ إنه أمر سيئ حقًا في أحد متاجرنا. لدينا الكثير من المنتجات الفريدة (مع عنصر واحد فقط في المخزن) وإذا تم طلبه بلغة واحدة ، فسيظل المخزون في اللغة الأخرى عند 1 (ومخزون اللغة الرئيسية مضبوط على -1). الآن لدينا عدد قليل من الطلبات المزدوجة لمنتج لا يزال متوفرًا في إحدى اللغات ، حتى لو تم بيعه بلغة أخرى ...

يمكنك التحقق من Fix الخاص بي وإجراء تغييرات على ملف Stock في المكون الإضافي:
https://github.com/hyyan/woo-poly-integration/pull/300/files

لم يتم قبوله بعد ولكني أستخدمه لمدة شهر دون أي مشكلة.

آمل أن يقبلوا طلب السحب الخاص بي يومًا ما ...

Tii شكرا ، سأحاول الإصلاح الخاص بك. آمل أن يقبلوا طلب السحب. إنه ليس أول خطأ يجب إضافته إلى الملفات الأساسية. إصدار المكون الإضافي الحالي الخاص بي غير قابل للتحديث. :(

لم يساعدني هذا الإصلاح .. المخزون يتغير في تلك اللغة فقط ، ما "أشتريه". لقد أعددت مخزونات بمتغيرات. أي شخص لديه حل؟

Stibo لماذا إصدار البرنامج المساعد الحالي الخاص بك غير قابل للتحديث؟
إذا كان عليك إجراء تغييرات أخرى ، فلماذا لا تنشئ فرعًا خاصًا بك في github ، تحقق من تغييراتك هناك وقم برفع طلب السحب.

لم يعمل هذا الخيار / الإصلاح بالنسبة لي. :(

لقد قمت بالفعل بإعادة كتابة الكود بالكامل

"

تغيير الوظيفة المحمية (WC_Order_Item_Product $ item، $ action = self :: STOCK_REDUCE_ACTION) {

    $productID = Utilities::get_order_item_productid($item);
    $productObject = wc_get_product($productID);
    $orderLang = pll_get_post_language($item->get_order_id());

    if ($productObject && $orderLang) {
        $translations = Utilities::getProductTranslationsArrayByObject($productObject);
        $isManageStock = $productObject->managing_stock();

        $method = ($action === self::STOCK_REDUCE_ACTION) ?
            'decrease' :
            'increase';
        $change = ($action === self::STOCK_REDUCE_ACTION) ?
            Utilities::get_order_item_quantity($item) :
            Utilities::get_order_item_change($item);

        $mainStock = null;
        $mainStockId = null;
        $products = array();
        foreach ($translations as $ID) {
            $product = wc_get_product($ID);
            $stock = $product->get_stock_quantity();

            if ($mainStock === null) {
                $mainStock = $stock;
                $mainStockId = $ID;
            } else {
                if ($method === 'decrease') {
                    if ($mainStock > $stock) {
                        $mainStock = $stock;
                        $mainStockId = $ID;
                    }
                } else {
                    if ($mainStock < $stock) {
                        $mainStock = $stock;
                        $mainStockId = $ID;
                    }
                }
            }
        }
        unset($products[$mainStock]);

        foreach ($translations as $ID) {

            if ($ID === $mainStockId) continue;

            if ($isManageStock) {
                \wc_update_product_stock($ID, $change, $method);
            }
            $general = Settings::getOption(
                'general', MetasList::getID(), array('total_sales')
            );
            if (in_array('total_sales', $general)) {
                update_post_meta($ID, 'total_sales', get_post_meta($mainStockId, 'total_sales', true)
                );
            }
        }

    }
}

"

لذلك كان أسلوبي هو التحقق من المخزون المختلف عن الآخرين ومزامنة جميع الأسهم الموجودة عليه.

إنها ليست فعالة للغاية ولكنها تعمل بشكل جيد حتى نتمكن من الحصول على اللغة من خلال IPN.

مرحبًا Tii ،

سأجربه اليوم :)

هل يمكنك لصق كل التعليمات البرمجية لتغيير الوظيفة المحمية؟

أحصل على نفس المشكلة :/
testing

مرحبًا Tii ،

سأجربه اليوم :)

لاحظ أنني لم أقم بالعمل من أجل الاختلافات

مرحبًا Tii ،
سأجربه اليوم :)

لاحظ أنني لم أقم بالعمل من أجل الاختلافات

هل يمكنك لصق كل التعليمات البرمجية لتغيير الوظيفة المحمية؟

مرحبًا Tii ،
سأجربه اليوم :)

لاحظ أنني لم أقم بالعمل من أجل الاختلافات

هل يمكنك لصق كل التعليمات البرمجية لتغيير الوظيفة المحمية؟

لست متأكدًا من فهمي ، لقد قمت بنسخ الوظيفة بأكملها ...

مرحبًا Tii ،
سأجربه اليوم :)

لاحظ أنني لم أقم بالعمل من أجل الاختلافات

هل يمكنك لصق كل التعليمات البرمجية لتغيير الوظيفة المحمية؟

لست متأكدًا من فهمي ، لقد قمت بنسخ الوظيفة بأكملها ...

لم تعمل. حصلت على نفس القضية :/ . https://i.ibb.co/kHNW6fc/stockissue.jpg

مرحبًا Tii ،
سأجربه اليوم :)

لاحظ أنني لم أقم بالعمل من أجل الاختلافات

هل يمكنك لصق كل التعليمات البرمجية لتغيير الوظيفة المحمية؟

لست متأكدًا من فهمي ، لقد قمت بنسخ الوظيفة بأكملها ...

لم تعمل. حصلت على نفس القضية :/ . https://i.ibb.co/kHNW6fc/stockissue.jpg

هل استبدلت تغيير الوظيفة من wp-content / plugins / woo-poly-Integration / src / Hyyan / WPI / Product / Stock.php بآخرتي؟

أنا أستخدمه منذ شهر ولم يكن لدي مشكلة واحدة.

مرحبًا Tii ،
سأجربه اليوم :)

لاحظ أنني لم أقم بالعمل من أجل الاختلافات

هل يمكنك لصق كل التعليمات البرمجية لتغيير الوظيفة المحمية؟

لست متأكدًا من فهمي ، لقد قمت بنسخ الوظيفة بأكملها ...

لم تعمل. حصلت على نفس القضية :/ . https://i.ibb.co/kHNW6fc/stockissue.jpg

هل استبدلت تغيير الوظيفة من wp-content / plugins / woo-poly-Integration / src / Hyyan / WPI / Product / Stock.php بآخرتي؟

أنا أستخدمه منذ شهر ولم يكن لدي مشكلة واحدة.

نعم فعلا.

الإصلاح لا يعمل بالنسبة لي أيضًا ...

fkoomekbmpfStiboTii يرجى المحاولة هذا الملف Stock.php بديل للإصلاح أكثر اكتمالا

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

theblackhole picture theblackhole  ·  4تعليقات

ngrudev picture ngrudev  ·  6تعليقات

Jon007 picture Jon007  ·  4تعليقات

hyyan picture hyyan  ·  13تعليقات

mrleemon picture mrleemon  ·  4تعليقات