Support » Plugin: WooCommerce PayU EU Payment Gateway » Problem z anulowanymi platnosciami

  • Resolved jzonik

    (@jzonik)


    Panstwa wtyczka ustawia status zamowien jako Pending payment. Problem pojawia się przy niedokonczonych/porzuconych platnosciach. Wtedy taka porzucona platnosc i tak robi w sklepie zamowienie i sciaga produkty ze stanow. Pomimo, ze po wyznaczonym czasie taka nieudana platnosc przechodzi w status anulowane, to nie przywraca to stanow magazynowych. Zmowienie staje sie anulowane, a produkty w nim sa dalej sciagniete ze stanow.

    Probowalam uzyc tego kodu, zeby przywrocic stany magazynowe dla anulowanych zamowien, ale nie dziala:

    remove_filter( 'woocommerce_cancel_unpaid_orders', 'wc_cancel_unpaid_orders' );
    add_filter( 'woocommerce_cancel_unpaid_orders', 'override_cancel_unpaid_orders' );
    
    function override_cancel_unpaid_orders() {
        $held_duration = get_option( 'woocommerce_hold_stock_minutes' );
    
        if ( $held_duration < 1 || 'yes' !== get_option( 'woocommerce_manage_stock' ) ) {
            return;
        }
    
        $data_store    = WC_Data_Store::load( 'order' );
        $unpaid_orders = $data_store->get_unpaid_orders( strtotime( '-' . absint( $held_duration ) . ' MINUTES', current_time( 'timestamp' ) ) );
    
        if ( $unpaid_orders ) {
            foreach ( $unpaid_orders as $unpaid_order ) {
                $order = wc_get_order( $unpaid_order );
    
                if ( apply_filters( 'woocommerce_cancel_unpaid_order', 'checkout' === $order->get_created_via(), $order ) ) {
                    //Cancel Order
                    $order->update_status( 'cancelled', __( 'Unpaid order cancelled - time limit reached.', 'woocommerce' ) );
    
                    //Restock
                    foreach ($order->get_items() as $item_id => $item) {
                        // Get an instance of corresponding the WC_Product object
                        $product = $item->get_product();
                        $qty = $item->get_quantity(); // Get the item quantity
                        wc_update_product_stock($product, $qty, 'increase');
                    }
                }
            }
        }
        wp_clear_scheduled_hook( 'woocommerce_cancel_unpaid_orders' );
        wp_schedule_single_event( time() + ( absint( $held_duration ) * 60 ), 'woocommerce_cancel_unpaid_orders' );
    }

    Potrzebuje, zeby przy anulowaniu sie takiego nieoplaconego zamowienia automatycznie produkty wracaly na stan. Czy mozecie mi cos doradzic?

Viewing 11 replies - 1 through 11 (of 11 total)
  • Thread Starter jzonik

    (@jzonik)

    Czy macie jakies pomysly?

    Plugin Author PayU

    (@payusa)

    Wtyczka po złożónym zamówieniu ustawia w zależności od ustawień status on-hold lub pending. Produkty są ściągane ze stanu bo proces płatności jest asynchroniczny.

    W przypadku gdy zamówienie jest anulowane (czy to z poziomu panelu czy to z poziomu notyfikacji do płatności) produkty są przywracane na magazym.
    Wynika to z tego, że WooCommerce automatycznie uduchamia akcję “woocommerce_order_status_canacelled”, w obsłudze której wywoływana jest funkcja “wc_maybe_increase_stock_levels” przywracająca produkty na magazyn.

    Powyższe przetestowaliśmy (oba przypadki anulacja z panelu i anaulacja na notyfikacji) i w obu przypadkach zachowanie było takie samo tj. po złożeniu zamówienia ilość produktów na magazynie zmniejszyła się a po anulowaniu wróciła do stanu poprzedniego.

    Thread Starter jzonik

    (@jzonik)

    Niestety, na mojej stronie tak sie nie dzieje i rowniez to sparwdzilam. Jako przyklad ostatnie zamowienie, w ktorym jest sciagniety produkt ze stanu (ze wskazaniem ilosci: z 20 sztuk na 19). I zostalo anulowane przez Panstwa wtyczke z powodu braku platnosci. Zatem po anulowaniu produktow powinno byc z powrotem 20, a w produkcie jest jak byk 19, (a zaden inny klient tego produktu nie kupil). Co wiecej kazda inna wtyczka/mechanizm, kiedy wraca cos na stan, to jest o tym informacja na prawym sidebarze w zamowieniu. A w przypadku Panstwa wtyczki, nie ma takiej informacji ani przywroceniu stanu.

    Kontaktowalam sie przez Panstwa strone i prosilam o sprawdzenie tego u nas na stronie.

    Plugin Author PayU

    (@payusa)

    W naszym na stronie konfiguracyjnej pluginu (WooCommerce / Ustawienia PayU) jest możliwość możliwość wybrania statusu nowego zamówienia (opcja Domyślny status zamówienia) i są to:
    – Wstrzymane (oczekujące na płatność) (on-hold)
    – Oczekujące na płatność (pending)

    Proszę zmienić na tą pierwszą opcję czyli “Wstrzymane (oczekujące na płatność) (on-hold)” i będzie działać poprawnie.

    Komentarz dlaczego tak jest.
    Zgodnie z dokumentacją WooCommerce https://woocommerce.com/document/managing-orders/#order-statuses dla statusu on-hold jest zmniejszany stan magazynowy i następnie gdy następuje zmiana statusu na canceled z on-hold następuje zwiększenie stanu magazynowego. Cały ten mechanizm działa automatycznie z WooCommerce bez udziału wtyczki.

    Dla statusu pending zgodnie z dokumentacją WooCommerce nie następuje automatycznie zmniejszenie stanu magazynowego a co za tym idzie przy zmianie na canceled z pending nie są zwiększane stany.

    W naszym pluginie przy tworzeniu zamówienia jest uruchamiany mechanizm zmniejszenia stanu magazynowego dlatego nawet przy statusie pending następuje zmniejszenie stanu. Natomiast w przypadku canceled nie ma takiego mechanizmu i dlatego nie są przywracane stany magazynowe.

    Dodamy poprawkę do pluginu usuwającą zmniejszenie stanu magazynowego czyli dla statusu pending nie będzie zmniejszenia stanu magazynowego. Dzięki temu zachowanie będzie spójne z tym co oferuje WooCommerce i tylko zmieniając domyślny staus będzie możliwość sterowania czy rozpoczęcie płatności PayU blokuje towar czy nie.

    Thread Starter jzonik

    (@jzonik)

    Dziękuję za odpowiedz.

    Zrobilam tak, jak Panstwo radzili i na razie od trzech godzin przy nieudanej platnosci na testowym zamowienu jest on-hold.

    A po jakim czasie to zamowienie on-hold sie anuluje 🙂 ?

    Bo jesli sie nie anuluje, to i tak mi trzyma stan i musze w woocommerce recznie weryfikowac ktore on-hold jest payu i recznie anulowac…

    Thread Starter jzonik

    (@jzonik)

    “Dodamy poprawkę do pluginu usuwającą zmniejszenie stanu magazynowego czyli dla statusu pending nie będzie zmniejszenia stanu magazynowego. Dzięki temu zachowanie będzie spójne z tym co oferuje WooCommerce i tylko zmieniając domyślny staus będzie możliwość sterowania czy rozpoczęcie płatności PayU blokuje towar czy nie.”

    Bylabym sklonna poczekac na to rozwiazanie, gdyby nie bylo to jakos bardzo dlugo.

    Plugin Author PayU

    (@payusa)

    Zamówienia w WC anulują się automatycznie wtedy kiedy przyjdzie notyfikacja z PayU do sklepu.
    A to kiedy tak a informacji zależy od wybranego sposobu płatności. Inaczej będzie dla kart, inaczej dla blika inaczej dla każdego z banków.

    W przypadku nieudanej płatności kartą od razu jest anulowana płatność w PayU. Natomiast gdy te płatności nie są rozpoczęte to to następuje autoanulowanie po 5 lub 10 dniach.

    Najprościej żeby usyskać anulowanie należy zalogować się do panelu PayU i dla tych rozpoczętych, testowych transakcji na wyszukiwarce transakcji w kolumnie akcja kliknąć Anuluj.

    Thread Starter jzonik

    (@jzonik)

    OK, na razie zobacze jak to bedzie po tych 5-10 dniach.

    Co do anulowania w payu, czy gdziekolwiek indziej, to wlasnie o to jest cala bitwa :), nikomu nie chce sie nigdzie wchodzic i recznie anulowywac, kazdy chce automatycznie.

    Jak wdroza Panstwo ta poprawke do pending, to prosze o info.

    Dziekuje za pomoc i pozdrawiam

    Plugin Author PayU

    (@payusa)

    Moja sugestia odnośnie wchodzenia w panel jest tylko po to żeby Pani mogła szybko to sprawdzić. Można też zrobić płatność blikiem i nie potwierdzić płatności w apliakcji lub płatność kartą podając testowy numer karty np. 4444 3333 2222 1111

    Odnośnie drugiego poprawka spowoduje, że dla statusu ‘pending’ nie będzie nic blokowane na magazymnie.
    Można też całościowo wyłączyć w konfiguracji WooCommerce magazyn ale to zależey od specyfiki towaru i rotacji. W większości przypadków płatność udaje się szybko ale są metody, które trwaja dłużej np. raty, czasami karty, niektóre banki, które nie księgują 24h/7 (można znaleźć https://developers.payu.com/pl/overview.html#Polish_PBLs) i wtedy pojawia się niebezpieczeńśtwo, że towaru, którego jest jedna sztuka ktoś kupi dwa razy.

    Sama zmiana została już zrobiona na github, a jutro powinna być dostępna w pluginach WordPress-a

    Thread Starter jzonik

    (@jzonik)

    Super, jeszcze raz dziekuje.

    Plugin Author PayU

    (@payusa)

    Nowa wersja 2.0.11 została opublikowana w pluginach wordpress-a.

Viewing 11 replies - 1 through 11 (of 11 total)
  • The topic ‘Problem z anulowanymi platnosciami’ is closed to new replies.