Woo-poly-integration: Masalah Sinkronisasi Saham dengan IPN

Dibuat pada 21 Jan 2018  ·  27Komentar  ·  Sumber: hyyan/woo-poly-integration

Dapatkah Anda mereproduksi masalah ini pada tema Wordpress default (misalnya Storefront)?
YA

Bisakah Anda mereproduksi masalah ini ketika semua plugin lain dinonaktifkan kecuali Integrasi WooCommerce, Polylang, dan Hyyan WooCommerce Polylang?
YA

Versi dan pengaturan produk apa yang Anda gunakan saat masalah ini terjadi?
PHP: PHP 7.0
WordPress: 4.9.2
WooCommerce: 3.2.6
Polilang: 2.2.8
Integrasi Polylang Hyyan WooCommerce: 1.0.4
Peramban: Chrome terbaru

Langkah-langkah untuk Reproduksi
Siapkan minimal 2 bahasa, misalkan EN = default, FR
Tetapkan produk, terjemahkan ke dalam 2 bahasa dan atur stok ke 3
Tambahkan 1 produk tersebut ke dalam keranjang saat berada di FR
lanjutkan ke checkout pembayaran dengan platform pembayaran seperti Paypal atau Payzen.
Setelah pembayaran selesai, tutup halaman sebelum redirect ke website Anda.
Pastikan IPN dikirim ke situs web Anda.
Pesanan Anda diterima, stok produk akan menjadi 1 di EN dan 3 di FR!

Apa yang saya harapkan
memiliki 2 sebagai stok dalam setiap bahasa seperti 3 dan Anda membeli 1.

Apa yang Terjadi Sebagai gantinya
Saat dipanggil melalui IPN, pembaruan stok memperbarui 2 kali bahasa default alih-alih satu kali masing-masing, saya menggali dan menemukan masalah yang dapat diperbaiki seperti ini:

dengan menghapus baris ini di Stock.php

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

Entah bagaimana, ketika dipanggil melalui IPN, fungsi get_order_item_productid mengembalikan id produk dari produk bahasa default alih-alih produk yang dipilih.

Saya memeriksa wc-stock-function.php dan mengubah dua baris dengan ini:

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

Kemudian, saya menghapus

unset($translations[$orderLang]);

dan cukup lewati produk saat ini di loop terjemahan:

if ($ID == $productID) continue;

help wanted stock

Komentar yang paling membantu

Anda dapat memeriksa Fix saya dan membuat perubahan pada file Stock di plugin:
https://github.com/hyyan/woo-poly-integration/pull/300/files

itu belum diterima tetapi saya menggunakannya selama sebulan tanpa masalah.

Saya berharap mereka akan menerima permintaan tarik saya suatu hari nanti. . .

Semua 27 komentar

ketika dipanggil melalui IPN, fungsi get_order_item_productid mengembalikan id produk dari produk bahasa default alih-alih produk yang dipilih.

Ya, url IPN itu sendiri akan diperlakukan oleh Polylang seperti dalam bahasa default.
[walaupun #218 menyarankan mungkin ada IPN khusus bahasa dan mengusulkan perubahan untuk memastikan ini tidak terjadi]

Bagaimana perubahan Anda terbatas hanya berlaku untuk panggilan IPN?
Bisakah Anda mengirimkan perubahan Anda sebagai permintaan Tarik sehingga jelas untuk meninjau perbedaan perubahan?

Satu pertanyaan naif, bukankah masalahnya juga diperbaiki dengan tidak menggunakan IPN? Apa manfaat menggunakan IPN dalam kasus ini? (penyedia pembayaran lain tidak menggunakan IPN dan PayPal juga tidak perlu, jadi hanya untuk memperjelas...)

Perubahan tampaknya tidak memengaruhi panggilan non-IPN, saya menggunakan tambalan saya dalam produksi dan saya tidak memiliki masalah sama sekali.
Saya mengajukan permintaan perubahan.
Saya benar-benar tidak mengerti bagaimana Anda dapat menghindari penggunaan IPN. Bisakah Anda menjelaskan kepada saya bagaimana Anda tidak menggunakannya?
Tidak menggunakan IPN akan membuat Anda sepenuhnya bergantung pada PDT, yang biasanya merupakan halaman tujuan mereka setelah pembayaran. Dalam kasus kami, lebih dari 50% pelanggan kami tidak menunggu sampai mereka dialihkan (diatur ke 1 detik) ke situs web kami setelah pembayaran, yang berarti bahwa, tanpa IPN, setengah dari pesanan kami tidak akan beralih ke pembayaran selesai. IPN memungkinkan kami untuk memastikan pembayaran pesanan kami telah diperbarui dan saya tidak dapat memahami bagaimana Anda tidak akan menggunakan ini.

baik checkout Stripe standar misalnya memiliki dialog pop-up atau bidang kartu pada halaman (atau tombol Apple Pay di halaman), tampaknya mengontrol semuanya melalui serangkaian javascript dan panggilan ajax, saya tidak menyadarinya itu setara dengan IPN Paypal.

Apakah Anda menggunakan integrasi Paypal yang disediakan WooCommerce atau salah satu plugin lainnya?

Karena javascript adalah sisi klien, itu tidak dapat diandalkan. JS bisa gagal atau diblokir, Pop-up juga biasanya diblokir. Juga, banyak pelanggan kami menjalankan IE dengan Win7, yang dikenal dengan implementasi Javascript yang buruk.
Kami tidak menggunakan Paypal, kami menggunakan Plugin PayZen dan Ingenico, keduanya bekerja dengan IPN.
Anda tidak harus menggunakan IPN dengan plugin apa pun, tetapi selalu tersedia, bahkan di Stripe.
https://github.com/jatskie/stripe/blob/master/ipn.php
Kami menerapkannya karena memberi Anda kepastian, juga, dalam pekerjaan kami, orang memesan makan siang mereka sebelum 10:15 dan dikirim sebelum 12, jadi, jika pembayaran tidak diberitahukan, pelanggan tidak akan mendapatkan makan siangnya. Dalam hal pentingnya waktu ini, kami tidak dapat mengandalkan kebetulan dan harus menerapkan IPN untuk memastikan bahwa pesanan yang dibayarkan akan diproses dalam jangka waktu kami.

Jika kami membayar dengan transfer bank tidak berfungsi.

@carlituxman itu tidak cukup detail bagi siapa pun untuk dapat berkomentar, tetapi kemungkinan besar situasinya telah berubah dengan woocommerce 3.3.5 karena ajax woocommerce berubah lagi. Anda perlu menguji dengan kedua permintaan tarik terbuka, salah satunya disarankan untuk memperbaiki masalah ini dan yang lainnya memperbaiki masalah ajax.

maaf. apa masalah perbaikan ajax?
Saya pikir Anda mengatakan # 329?

Saya menerapkan perbaikan #329 dan #300 dan tidak berhasil.
Saya memiliki masalah #332 yang sama

Nah versi woocommerce apa yang Anda gunakan?

woocommerce 3.3.5

Apakah ada solusi untuk masalah ini? BENAR-BENAR buruk di salah satu toko kami. Kami memiliki banyak produk unik (dengan stok hanya 1 item) dan jika dipesan dalam satu bahasa, stok dalam bahasa lain tetap 1 (dan stok untuk bahasa utama diatur ke -1). Sekarang kami memiliki beberapa pesanan ganda untuk produk yang masih tersedia dalam satu bahasa, meskipun sudah terjual habis dalam bahasa lain...

Anda dapat memeriksa Fix saya dan membuat perubahan pada file Stock di plugin:
https://github.com/hyyan/woo-poly-integration/pull/300/files

itu belum diterima tetapi saya menggunakannya selama sebulan tanpa masalah.

Saya berharap mereka akan menerima permintaan tarik saya suatu hari nanti. . .

@Tii Terima kasih, saya akan mencoba perbaikan Anda. Berharap mereka akan menerima permintaan tarik Anda. Ini bukan perbaikan bug pertama yang harus ditambahkan ke file inti. Versi plugin saya saat ini tidak dapat diperbarui. :(

Perbaikan ini tidak membantu saya.. Stok hanya berubah dalam bahasa itu, apa yang saya "beli". Saya telah menyiapkan stok dengan variabel. Ada yang punya solusi?

@Stibo mengapa versi plugin Anda saat ini tidak dapat diperbarui?
Jika Anda harus membuat perubahan lain, mengapa tidak membuat cabang Anda sendiri di github, periksa perubahan Anda di sana dan ajukan permintaan tarik.

Opsi/perbaikan ini tidak berfungsi untuk saya. :(

Saya benar-benar menulis ulang seluruh kode

`

perubahan fungsi yang dilindungi(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)
                );
            }
        }

    }
}

`

Jadi pendekatan saya adalah memeriksa stok yang berbeda dari yang lain dan menyinkronkan semua stok di dalamnya.

Ini tidak terlalu efisien tetapi berfungsi dengan baik sampai kita bisa mendapatkan bahasa melalui IPN.

Hai Tii,

Saya akan mencobanya hari ini :)

Bisakah Anda menempelkan semua kode untuk perubahan fungsi yang dilindungi?

Saya mendapatkan masalah yang sama :/
testing

Hai Tii,

Saya akan mencobanya hari ini :)

perhatikan bahwa saya tidak melakukan pekerjaan untuk variasi

Hai Tii,
Saya akan mencobanya hari ini :)

perhatikan bahwa saya tidak melakukan pekerjaan untuk variasi

Bisakah Anda menempelkan semua kode untuk perubahan fungsi yang dilindungi?

Hai Tii,
Saya akan mencobanya hari ini :)

perhatikan bahwa saya tidak melakukan pekerjaan untuk variasi

Bisakah Anda menempelkan semua kode untuk perubahan fungsi yang dilindungi?

Saya tidak yakin saya mengerti, saya menyalin seluruh fungsi ...

Hai Tii,
Saya akan mencobanya hari ini :)

perhatikan bahwa saya tidak melakukan pekerjaan untuk variasi

Bisakah Anda menempelkan semua kode untuk perubahan fungsi yang dilindungi?

Saya tidak yakin saya mengerti, saya menyalin seluruh fungsi ...

Tidak bekerja. Saya mendapat masalah yang sama :/ . https://i.ibb.co/kHNW6fc/stockissue.jpg

Hai Tii,
Saya akan mencobanya hari ini :)

perhatikan bahwa saya tidak melakukan pekerjaan untuk variasi

Bisakah Anda menempelkan semua kode untuk perubahan fungsi yang dilindungi?

Saya tidak yakin saya mengerti, saya menyalin seluruh fungsi ...

Tidak bekerja. Saya mendapat masalah yang sama :/ . https://i.ibb.co/kHNW6fc/stockissue.jpg

Apakah Anda mengganti perubahan fungsi dari wp-content/plugins/woo-poly-integration/src/Hyyan/WPI/Product/Stock.php dengan milik saya?

Saya menggunakannya selama sebulan sekarang dan saya tidak memiliki satu masalah pun.

Hai Tii,
Saya akan mencobanya hari ini :)

perhatikan bahwa saya tidak melakukan pekerjaan untuk variasi

Bisakah Anda menempelkan semua kode untuk perubahan fungsi yang dilindungi?

Saya tidak yakin saya mengerti, saya menyalin seluruh fungsi ...

Tidak bekerja. Saya mendapat masalah yang sama :/ . https://i.ibb.co/kHNW6fc/stockissue.jpg

Apakah Anda mengganti perubahan fungsi dari wp-content/plugins/woo-poly-integration/src/Hyyan/WPI/Product/Stock.php dengan milik saya?

Saya menggunakannya selama sebulan sekarang dan saya tidak memiliki satu masalah pun.

Ya.

Perbaikannya juga tidak berhasil untuk saya ...

@fkoomek @bmpf @Stibo @Tii silakan coba file Stock.php pengganti ini untuk perbaikan yang lebih lengkap

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

damiencarbery picture damiencarbery  ·  14Komentar

ngrudev picture ngrudev  ·  6Komentar

hyyan picture hyyan  ·  13Komentar

FrankRosElche picture FrankRosElche  ·  33Komentar

Jon007 picture Jon007  ·  4Komentar