Woo-poly-integration: 与 IPN 的股票同步问题

创建于 2018-01-21  ·  27评论  ·  资料来源: hyyan/woo-poly-integration

您能否在默认的 Wordpress 主题(例如 Storefront)上重现此问题?
是的

当除 WooCommerce、Polylang 和 Hyyan WooCommerce Polylang 集成之外的所有其他插件都被禁用时,您能否重现此问题?
是的

出现此问题时,您使用的是哪些产品版本和设置?
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
在 FR 时将 1 个该产品添加到篮子中
继续使用 Paypal 或 Payzen 等支付平台结账。
完成后,在重定向到您的网站之前关闭页面。
确保 IPN 已发送到您的网站。
您的订单已收到,该产品的库存为 EN 1 和 FR 3 !

我所期待的
在每种语言中都有 2 个作为库存,因为它是 3,而你买了 1 个。

发生了什么
当通过 IPN 调用时,股票更新更新默认语言的 2 倍,而不是每次更新一次,我挖掘并发现可以像这样修复的问题:

通过删除 Stock.php 中的这些行

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

不知何故,当通过 IPN 调用时,get_order_item_productid 函数返回默认语言产品的产品 ID,而不是所选产品。

我检查了 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 函数返回默认语言产品的产品 ID,而不是所选产品。

是的,IPN url 本身会被 Polylang 视为默认语言。
[尽管 #218 表明可能存在特定于语言的 IPN 并建议进行更改以确保不会发生这种情况]

您的更改如何仅限于仅适用于 IPN 呼叫?
您可以将更改作为拉取请求提交,以便清楚地查看更改的差异吗?

一个幼稚的问题,不使用IPN是否也解决了问题? 在这种情况下使用 IPN 有什么好处? (其他支付提供商不使用 IPN,PayPal 也不需要,所以只是澄清一下......)

更改似乎不会影响非 IPN 调用,我在生产中使用我的补丁,我完全没有问题。
我提交了更改请求。
我真的不明白如何避免使用 IPN。 你能向我解释一下你是如何不使用它的吗?
不使用 IPN 会让你完全依赖 PDT,这通常是他们在付款后重定向到的页面。 在我们的案例中,超过 50% 的客户不会等到他们在付款后被重定向(设置为 1 秒)到我们的网站,这意味着如果没有 IPN,我们的一半订单不会切换到付款完成。 IPN 使我们能够确保我们的订单付款已更新,我无法理解您将如何不使用它。

例如,标准的 Stripe 结帐在页面上有一个弹出对话框或卡片字段(或页面上的 Apple Pay 按钮),它似乎通过一组 javascripts 和 ajax 调用控制一切,我不知道它具有相当于 Paypal IPN 的功能。

您使用的是 WooCommerce 提供的 Paypal 集成还是其他插件之一?

由于 javascript 是客户端,因此不可靠。 JS 可能会失败或被阻止,弹出窗口通常也会被阻止。 此外,我们的许多客户在 Win7 上运行 IE,该系统以其糟糕的 Javascript 实现而闻名。
我们不使用 Paypal,我们使用 PayZen 和 Ingenico 插件,它们都与 IPN 配合使用。
您不必将 IPN 与任何插件一起使用,但它始终可用,即使在 Stripe 中也是如此。
https://github.com/jatskie/stripe/blob/master/ipn.php
我们确实实施了它,因为它为您提供了确定性,此外,在我们的工作中,人们在 10:15 之前订购午餐并在 12 之前交付,因此,如果未通知付款,客户将无法获得午餐。 在这个时间重要性问题上,我们不能依赖机会,必须实施 IPN 以确保支付的订单将在我们的时间范围内得到处理。

如果我们用转账银行付款是行不通的。

@carlituxman这对任何人来说都不够详细,无法发表评论,但由于 woocommerce ajax 再次发生变化,woocommerce 3.3.5 的情况很可能发生了变化。 您需要对两个开放的拉取请求进行测试,建议其中一个解决此问题,另一个解决 ajax 问题。

对不起。 什么是ajax修复问题?
我想你是说#329?

我应用了 #329 和 #300 修复,但没有工作。
我有同样的#332问题

那么你使用的是什么版本的woocommerce?

woocommerce 3.3.5

这个问题有解决方案吗? 在我们的一家商店里真的很糟糕。 我们有很多独特的产品(库存只有 1 件),如果以一种语言订购,另一种语言的库存仍为 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 获得语言之前,它运行良好。

嗨,蒂,

我今天试试:)

您可以粘贴受保护功能更改的所有代码吗?

我遇到了同样的问题:/
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 等级

相关问题

FrankRosElche picture FrankRosElche  ·  33评论

Jon007 picture Jon007  ·  19评论

Jon007 picture Jon007  ·  4评论

dmytro-kindrat picture dmytro-kindrat  ·  14评论

theblackhole picture theblackhole  ·  4评论