Woo-poly-integration: Проблема синхронизации акций с IPN

Созданный на 21 янв. 2018  ·  27Комментарии  ·  Источник: hyyan/woo-poly-integration

Можете ли вы воспроизвести эту проблему в теме Wordpress по умолчанию (например, Storefront)?
ДА

Можете ли вы воспроизвести эту проблему, когда все остальные плагины отключены, кроме WooCommerce, Polylang и Hyyan WooCommerce Polylang Integration?
ДА

Какие версии продукта и настройки вы используете при возникновении этой проблемы?
PHP: PHP 7.0
WordPress: 4.9.2
WooCommerce: 3.2.6
Полиланг: 2.2.8
Интеграция Hyyan WooCommerce с Polylang: 1.0.4
Браузер: последняя версия Chrome

Действия по воспроизведению
Установите как минимум 2 языка, скажем, EN = по умолчанию, FR
Установите товар, переведите его на 2 языка и установите на складе 3.
Добавьте 1 такой продукт в корзину, находясь в FR.
перейти к оформлению оплаты с помощью платежной платформы, такой как Paypal или Payzen.
Как только оплата будет завершена, закройте страницу перед перенаправлением на ваш сайт.
Убедитесь, что на ваш сайт было отправлено IPN.
Ваш заказ получен, товар на складе будет 1 по EN и 3 по FR!

Что я ожидал
иметь 2 в наличии на каждом языке, так как было 3, а вы купили 1.

Что случилось вместо
При вызове через IPN стандартное обновление обновляется в 2 раза по сравнению с языком по умолчанию, а не каждый раз, я покопался и нашел проблему, которую можно исправить следующим образом:

удалив эти строки в 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

Самый полезный комментарий

вы можете проверить мое Исправление и внести изменения в файл 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% наших клиентов не ждут, пока они не будут перенаправлены (установлено на 1 секунду) на наш веб-сайт после оплаты, а это означает, что без IPN половина нашего заказа не переключится на завершенную оплату. IPN позволяет нам быть уверенным в том, что оплата нашего заказа была обновлена, и я не могу понять, как вы не воспользуетесь этим.

ну, например, стандартная проверка Stripe имеет либо всплывающее диалоговое окно, либо поля карты на странице (или кнопку Apple Pay на странице), кажется, что она контролирует все с помощью набора javascripts и вызовов ajax, я не знаю, что он имеет эквивалент Paypal IPN.

Вы используете интеграцию с Paypal, предоставляемую WooCommerce, или один из других плагинов?

Поскольку javascript находится на стороне клиента, он ненадежен. JS может выйти из строя или заблокироваться, всплывающие окна также обычно блокируются. Кроме того, многие из наших клиентов запускают IE с Win7, которая известна своей плохой реализацией Javascript.
Мы не используем Paypal, мы используем плагины PayZen и Ingenico, они оба работают с IPN.
Вам не обязательно использовать IPN с каким-либо плагином, но он всегда доступен, даже в Stripe.
https://github.com/jatskie/stripe/blob/master/ipn.php
Мы внедрили его, поскольку это дает вам уверенность. Кроме того, в нашей работе люди заказывают обед до 10:15 и получают его до 12 часов, поэтому, если платеж не был уведомлен, клиент не получит свой обед. В этом вопросе важности времени мы не можем полагаться на случайность и должны внедрить IPN, чтобы быть уверенными, что оплаченный заказ будет обработан в установленные сроки.

Если мы платим переводом, банк не работает.

@carlituxman, этого недостаточно, чтобы кто-либо мог прокомментировать, но вполне вероятно, что ситуация изменилась с woocommerce 3.3.5 из-за того, что woocommerce ajax снова изменился. вам нужно будет протестировать оба открытых запроса на вытягивание, один из которых предлагается для устранения этой проблемы, а другой - для устранения проблемы с ajax.

Прости. в чем проблема с исправлением ajax?
Я думаю, вы говорите №329?

Я применил исправления # 329 и # 300 и ничего не заработал.
У меня такая же проблема # 332

Какую версию woocommerce вы используете?

woocommerce 3.3.5

Есть ли решение этой проблемы? ДЕЙСТВИТЕЛЬНО плохо в одном из наших магазинов. У нас есть много уникальных продуктов (только 1 товар на складе), и если он заказан на одном языке, запас на другом языке остается равным 1 (а запас для основного языка установлен на -1). Теперь у нас есть несколько двойных заказов на товар, который все еще есть в наличии на одном языке, даже если он распродан на другом ...

вы можете проверить мое Исправление и внести изменения в файл 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.

Привет Тии,

Попробую сегодня :)

Можете ли вы вставить весь код для изменения защищенной функции?

У меня такая же проблема: /
testing

Привет Тии,

Попробую сегодня :)

обратите внимание, что я не работал над вариациями

Привет Тии,
Попробую сегодня :)

обратите внимание, что я не работал над вариациями

Можете ли вы вставить весь код для изменения защищенной функции?

Привет Тии,
Попробую сегодня :)

обратите внимание, что я не работал над вариациями

Можете ли вы вставить весь код для изменения защищенной функции?

Я не уверен, что понимаю, я скопировал всю функцию ...

Привет Тии,
Попробую сегодня :)

обратите внимание, что я не работал над вариациями

Можете ли вы вставить весь код для изменения защищенной функции?

Я не уверен, что понимаю, я скопировал всю функцию ...

Не сработало. У меня такая же проблема: /. https://i.ibb.co/kHNW6fc/stockissue.jpg

Привет Тии,
Попробую сегодня :)

обратите внимание, что я не работал над вариациями

Можете ли вы вставить весь код для изменения защищенной функции?

Я не уверен, что понимаю, я скопировал всю функцию ...

Не сработало. У меня такая же проблема: /. https://i.ibb.co/kHNW6fc/stockissue.jpg

Вы заменили изменение функции из wp-content / plugins / woo-poly-integration / src / Hyyan / WPI / Product / Stock.php на мое?

Я использую его уже месяц, и у меня не было ни одной проблемы.

Привет Тии,
Попробую сегодня :)

обратите внимание, что я не работал над вариациями

Можете ли вы вставить весь код для изменения защищенной функции?

Я не уверен, что понимаю, я скопировал всю функцию ...

Не сработало. У меня такая же проблема: /. https://i.ibb.co/kHNW6fc/stockissue.jpg

Вы заменили изменение функции из wp-content / plugins / woo-poly-integration / src / Hyyan / WPI / Product / Stock.php на мое?

Я использую его уже месяц, и у меня не было ни одной проблемы.

да.

Исправление у меня тоже не работает ...

@fkoomek @bmpf @Stibo @Tii попробуйте этот замещающий файл Stock.php для более полного исправления

Была ли эта страница полезной?
0 / 5 - 0 рейтинги