SKLEPINTERNETOWY.BIZPoradniki i wiedza e-commerce
Poradnik›BŁĘDY›Magento 2.4.9 – poważny błąd statusu zamówienia. Sklep…
BŁĘDY

Magento 2.4.9 – poważny błąd statusu zamówienia. Sklep oznacza nieopłacone zamówienia jako zrealizowane

6 listopada 202615 min czytanianetpoint

Magento może oznaczyć nieopłacone zamówienie jako Complete – poważny błąd obsługi płatności

W Magento Open Source wykryto błąd, który może powodować przedwczesne oznaczanie zamówień jako całkowicie zrealizowanych, mimo że część należności nadal nie została zapłacona. Problem dotyczy zamówień z otwartą fakturą i pozostałą do rozliczenia kwotą mniejszą niż jedna jednostka waluty, na przykład 0,50 zł lub 0,50 EUR.

Nieprawidłowość została zgłoszona 5 listopada 2026 roku w oficjalnym repozytorium Magento pod numerem #41789. Dzień później, 6 listopada, przedstawiciel zespołu projektu odtworzył problem w aktualnej gałęzi rozwojowej Magento 2.4 i potwierdził jego występowanie. Zgłoszenie otrzymało priorytet P2 i trafiło do kolejki prac rozwojowych.

Największym zagrożeniem jest rozbieżność między rzeczywistym stanem rozliczenia zamówienia a jego statusem w systemie. Zamówienie może zostać oznaczone jako Complete, mimo że Magento nadal przechowuje otwartą fakturę i dodatnią kwotę do zapłaty.

W sklepach korzystających z automatycznej obsługi sprzedaży, integracji ERP i systemów księgowych taki błąd może prowadzić do pomijania nierozliczonych należności oraz nieprawidłowej synchronizacji dokumentów.

Na czym dokładnie polega błąd statusu zamówienia Magento?

Magento wykorzystuje stany i statusy zamówień do kontrolowania przebiegu sprzedaży, fakturowania, płatności oraz realizacji wysyłek.

W standardowym procesie zamówienie powinno pozostać w stanie Processing, jeżeli nie zostały jeszcze spełnione wszystkie warunki jego zakończenia.

W zgłoszonym przypadku Magento może przejść do stanu Complete mimo istnienia nieopłaconej faktury. Dzieje się tak wtedy, gdy pozostała należność jest dodatnia, ale mniejsza niż 1, a wszystkie produkty zostały już wysłane.

Przykład zamówienia o wartości 100,50

Autor błędu przedstawił następujący scenariusz:

  1. Klient składa zamówienie o wartości 100,50 jednostek waluty.
  2. W systemie zostaje rozliczona faktura obejmująca 100,00.
  3. Pozostaje druga faktura w stanie Pending, obejmująca kwotę 0,50.
  4. Wszystkie produkty z zamówienia zostają wysłane.
  5. Magento ponownie sprawdza warunki określające stan zamówienia.
  6. Zamiast pozostawić zamówienie w stanie Processing, system zmienia jego stan na Complete.

Po zmianie statusu pozostaje nadal 0,50 do zapłaty. Zamówienie jest więc oznaczone jako zakończone, chociaż nie zostało w pełni rozliczone.

Parametr zamówienia Wartość
Łączna wartość zamówienia 100,50
Kwota już zapłacona 100,00
Pozostała należność 0,50
Stan nierozliczonej faktury Pending
Wysyłka produktów Zakończona
Prawidłowy stan zamówienia Processing
Błędny stan zamówienia Complete

Problem nie polega na usunięciu należności z bazy danych. Magento nadal przechowuje informację o kwocie 0,50. Nieprawidłowa jest decyzja o zmianie stanu całego zamówienia.

Dlaczego Magento uznaje nieopłacone zamówienie za zakończone?

Przyczyna została zidentyfikowana w mechanizmie odpowiedzialnym za sprawdzanie stanu zamówienia.

Problem dotyczy klasy:

Magento\Sales\Model\ResourceModel\Order\Handler\State

W metodzie check() znajduje się warunek wykorzystujący następujące porównanie:

($this->orderHasOpenInvoices($order) && (int) $order->getTotalDue() > 0)

Najważniejszy jest fragment:

(int) $order->getTotalDue()

Instrukcja (int) powoduje konwersję liczby na typ całkowity.

W PHP rzutowanie dodatniej liczby zmiennoprzecinkowej na liczbę całkowitą usuwa jej część ułamkową.

Przykładowo:

(int) 0.50  // 0
(int) 0.99  // 0
(int) 1.00  // 1
(int) 1.50  // 1

Jeżeli Magento sprawdza pozostałą należność wynoszącą 0,50, po konwersji otrzymuje wartość 0.

Warunek sprawdzający, czy do zapłaty pozostała dodatnia kwota, zwraca wtedy nieprawidłowy wynik.

Dlaczego jest to błąd logiczny?

Z punktu widzenia rozliczeń kwoty 0,00 i 0,50 nie są równoważne.

Pierwsza oznacza brak pozostałej należności, natomiast druga wskazuje, że klient nadal powinien zapłacić określoną kwotę.

Mechanizm Magento nie powinien więc usuwać części dziesiętnej przed porównaniem pozostałej należności z zerem.

Funkcja getTotalDue() zwraca wartość pieniężną, która jest już zaokrąglona zgodnie z mechanizmem obsługi waluty. Dodatkowa konwersja do liczby całkowitej nie jest potrzebna.

W opisanym scenariuszu powoduje ona pominięcie zabezpieczenia, które powinno zatrzymać zmianę stanu zamówienia.

Które wersje Magento i Adobe Commerce mogą być dotknięte problemem?

Autor zgłoszenia wskazał występowanie błędu w Magento 2.4.9 oraz w gałęzi 2.4-develop.

6 listopada 2026 roku przedstawiciel zespołu Magento odtworzył scenariusz w aktualnej wersji rozwojowej i oznaczył problem jako potwierdzony.

Stan ustaleń:

  • Magento 2.4.9: wersja wskazana przez autora jako dotknięta błędem.
  • Magento 2.4-develop: problem odtworzony i potwierdzony przez zespół projektu.
  • Wcześniejsze wersje Magento 2.4: możliwe występowanie tego samego mechanizmu, ale brak kompletnego zestawienia zweryfikowanych wydań.
  • Adobe Commerce: ponieważ platforma współdzieli istotną część mechanizmów zamówień z Magento Open Source, problem wymaga weryfikacji również w odpowiednich instalacjach Adobe Commerce. Nie potwierdzono jednak wszystkich dotkniętych wydań.

Nie ma podstaw, aby twierdzić, że każde zamówienie w Magento 2.4.9 będzie oznaczane jako Complete przed rozliczeniem płatności.

Wystąpienie błędu wymaga konkretnej kombinacji warunków związanych z fakturami, pozostałą kwotą do zapłaty i stanem realizacji zamówienia.

W jakich sytuacjach błąd może pojawić się w sklepie internetowym?

Częściowe fakturowanie i rozliczanie płatności

Jednym z możliwych scenariuszy jest sprzedaż, w której dla jednego zamówienia tworzone są oddzielne faktury.

Może to dotyczyć transakcji realizowanych etapami, z częściowymi płatnościami albo oddzielnym rozliczaniem poszczególnych pozycji.

Jeśli większość wartości zamówienia została rozliczona, ale pozostaje niewielka należność poniżej jednej jednostki waluty, Magento może nieprawidłowo ocenić możliwość zakończenia zamówienia.

Metody płatności bez natychmiastowego pobrania pieniędzy

W oficjalnym zgłoszeniu opisano również znaczenie metod płatności, które pozwalają utworzyć fakturę bez natychmiastowego przechwycenia środków.

Takie rozwiązania mogą wykorzystywać mechanizmy autoryzacji płatności i późniejszego pobrania pieniędzy.

W zależności od konfiguracji operatora i Magento faktura może przez pewien czas pozostawać otwarta.

Jeżeli w tym samym czasie wszystkie produkty zostaną wysłane, mechanizm zmiany stanu zamówienia może napotkać warunki prowadzące do błędu.

Zamówienia z końcówką dziesiętną

Istotna jest pozostała kwota do zapłaty, a nie całkowita wartość zamówienia.

Przykładowo zamówienie może mieć wartość 2500,50 zł, z czego zapłacono 2500,00 zł.

Jeżeli pozostałe 0,50 zł nadal figuruje jako nierozliczona należność, spełniony jest warunek dotyczący wartości mniejszej niż jedna jednostka waluty.

Nie oznacza to jednak, że sam fakt występowania groszy lub centów na fakturze automatycznie wywołuje błąd. Musi także istnieć odpowiedni stan otwartej faktury i muszą zostać spełnione pozostałe warunki logiki Magento.

Jakie konsekwencje może mieć nieprawidłowy status Complete?

Pomijanie nierozliczonych należności

Jeżeli system księgowy lub raport sprzedaży traktuje status Complete jako potwierdzenie zakończenia wszystkich operacji finansowych, zamówienie z nieopłaconą końcówką może zostać błędnie uznane za całkowicie rozliczone.

Pozostała należność nie znika automatycznie, ale może nie zostać zauważona podczas codziennej obsługi.

Nieprawidłowa synchronizacja z ERP

W wielu sklepach Magento współpracuje z zewnętrznymi systemami ERP, WMS i narzędziami do zarządzania sprzedażą.

Integracje mogą odczytywać status zamówienia i na tej podstawie uruchamiać kolejne działania.

Jeżeli system zewnętrzny interpretuje Complete jako zakończenie procesu rozliczeniowego, błędny status może prowadzić do niespójności między Magento a dokumentami finansowymi.

Zakres konsekwencji zależy od tego, czy integracja sprawdza wyłącznie status zamówienia, czy również pozostałą należność i stan faktur.

Błędy w raportach sprzedaży i rozliczeniach

Niektóre raporty mogą uwzględniać zamówienia zakończone bez dodatkowej weryfikacji płatności.

Jeżeli tak skonstruowany raport wykorzystuje status Complete jako jedyne kryterium rozliczenia, może błędnie klasyfikować zamówienia, przy których nadal istnieje należność.

Nie jest to jednak dowód, że standardowe raporty Magento automatycznie tracą informacje o nieopłaconych kwotach. Skutki zależą od zastosowanych zapytań, rozszerzeń oraz sposobu integracji danych.

Problemy z reklamacjami i obsługą klienta

Klient może otrzymać informację o zakończeniu realizacji zamówienia, mimo że w systemie finansowym nadal widnieje nierozliczona faktura.

W takiej sytuacji obsługa sklepu powinna zweryfikować historię płatności, faktur i wysyłek przed wysłaniem przypomnienia o zapłacie lub podjęciem innych działań.

Podobne rozbieżności pomiędzy stanem transakcji a statusem zamówienia występują także w innych platformach. Przykładowo w WooCommerce opisano przypadki, gdy klient zapłacił, ale sklep nadal pokazuje oczekiwanie na płatność. Przyczyny techniczne są inne, lecz w obu sytuacjach konieczne jest oddzielne sprawdzenie stanu finansowego i statusu zamówienia.

Jak sprawdzić, czy Magento nie oznacza przedwcześnie zamówień jako Complete?

Podstawowa diagnostyka powinna polegać na porównaniu stanu zamówienia z jego rzeczywistym rozliczeniem.

1. Sprawdź zamówienia ze statusem Complete

Zaloguj się do panelu Magento i otwórz:

Sales → Orders.

Odszukaj zamówienia oznaczone jako Complete, szczególnie te, które były fakturowane częściowo albo wykorzystywały płatność z opóźnionym przechwyceniem środków.

W szczegółach zamówienia sprawdź wartości:

  • Grand Total – całkowita wartość zamówienia;
  • Total Paid – łączna kwota zapłacona;
  • Total Due – kwota pozostająca do zapłaty;
  • stan poszczególnych faktur;
  • historię wysyłek i zmian statusów.

Szczególną uwagę zwróć na zamówienia, które mają status Complete, ale wartość Total Due jest większa od zera i mniejsza od jednej jednostki waluty.

2. Sprawdź otwarte faktury

Otwórz zakładkę Invoices w szczegółach podejrzanego zamówienia.

Zweryfikuj, czy znajdują się tam faktury w stanie Pending oraz czy odpowiadają im rzeczywiste, niezakończone operacje płatnicze.

Nie należy uznawać faktury za zapłaconą wyłącznie dlatego, że całe zamówienie ma status Complete.

3. Porównaj dane z operatorem płatności

Jeżeli płatność była obsługiwana przez zewnętrzną bramkę, sprawdź rzeczywistą historię autoryzacji i przechwycenia środków.

Należy ustalić, czy pozostała kwota faktycznie nie została pobrana, czy wystąpiło jedynie opóźnienie synchronizacji danych.

Weryfikacja powinna obejmować identyfikatory transakcji, walutę, kwotę i czas rozliczenia.

4. Sprawdź sposób obsługi statusów przez integracje

Jeżeli Magento jest połączone z ERP, WMS, systemem księgowym albo narzędziem automatycznej realizacji zamówień, sprawdź reguły synchronizacji.

Najważniejsze pytanie brzmi: czy zewnętrzny system sprawdza rzeczywiście otrzymaną płatność, czy polega wyłącznie na statusie Complete?

Oficjalna dokumentacja statusów zamówień Adobe Commerce wyjaśnia różnice pomiędzy stanami i statusami oraz sposób wykorzystywania ich w procesie sprzedaży.

Jak odtworzono błąd Magento 2.4.9?

Autor problemu przygotował test integracyjny, w którym zamówienie posiadało otwartą fakturę i pozostałą należność w wysokości 0,50.

Wszystkie pozycje zamówienia były już wysłane.

Po zapisaniu zamówienia Magento ponownie uruchamiało mechanizm kontroli stanu. W wyniku konwersji pozostałej należności do liczby całkowitej warunek zabezpieczający przed zakończeniem zamówienia nie był spełniony.

W konsekwencji zamówienie otrzymywało stan Complete, mimo że faktura nadal pozostawała otwarta.

Początkowa próba odtworzenia nie wykazała błędu

5 listopada przedstawiciel zespołu Magento poinformował, że nie udało mu się odtworzyć zgłoszonego zachowania.

Autor wyjaśnił jednak, że podczas pierwszego testu wykorzystano inne warunki niż opisane w zgłoszeniu. Pozostała kwota do zapłaty była znacznie większa niż jedna jednostka waluty, a faktura nie znajdowała się w wymaganym stanie Pending.

Po doprecyzowaniu scenariusza przeprowadzono ponowny test.

6 listopada Magento oficjalnie potwierdziło problem

Przedstawiciel projektu potwierdził, że po odtworzeniu właściwych warunków zamówienie rzeczywiście zmienia stan na Complete.

Zgłoszenie oznaczono jako potwierdzone i przypisano mu priorytet P2.

To istotne ustalenie, ponieważ problem nie opiera się już wyłącznie na analizie pojedynczego autora. Został również odtworzony przez osobę uczestniczącą w oficjalnym procesie weryfikacji Magento.

Dlaczego nie wystarczy ręcznie zmienić statusu zamówienia?

Ręczne przywrócenie statusu Processing może wydawać się prostym sposobem naprawy.

Nie usuwa jednak przyczyny technicznej.

Jeżeli mechanizm Magento ponownie przeliczy stan zamówienia przy takich samych warunkach, problem może wystąpić ponownie.

Dodatkowo ręczna zmiana stanu może uruchamiać określone mechanizmy integracyjne, zależnie od konfiguracji sklepu.

Dlatego nie należy wykonywać masowych zmian stanów zamówień bez sprawdzenia:

  • rzeczywistego salda należności;
  • historii płatności i faktur;
  • przeprowadzonych wysyłek;
  • reakcji integracji zewnętrznych;
  • mechanizmów automatycznej zmiany stanu Magento.

W przypadku stwierdzenia rozbieżności należy najpierw ustalić, czy wymagana jest korekta wyłącznie prezentowanego statusu, czy również działań w procesie rozliczania zamówienia.

Czy przygotowano już poprawkę Magento?

Tak. Autor zgłoszenia przygotował zmianę kodu i udostępnił ją w pull requeście #41790.

Proponowana poprawka eliminuje niepotrzebną konwersję pozostałej należności do liczby całkowitej.

Zamiast:

(int) $order->getTotalDue() > 0

mechanizm powinien wykonywać porównanie bezpośrednio na wartości zwracanej przez Magento:

$order->getTotalDue() > 0

W ten sposób system poprawnie rozróżnia brak należności od dodatniej kwoty, nawet jeśli jest ona mniejsza niż jedna jednostka waluty.

Testy poprawki obejmują kwoty 0,50 i 0,01

W zgłoszonym rozwiązaniu przygotowano testy jednostkowe i integracyjne obejmujące niewielkie pozostałe należności.

Według autora testy wykazują nieprawidłowe działanie starego kodu, a po zastosowaniu zmiany potwierdzają prawidłowe pozostawienie zamówienia w stanie Processing.

Poprawka została udostępniona w Magento Pull Request #41790.

Według stanu na 6 listopada 2026 roku zmiana pozostaje propozycją oczekującą na włączenie do projektu. Nie potwierdzono opublikowania oficjalnego wydania Magento zawierającego tę poprawkę.

Co zrobić do czasu udostępnienia oficjalnej aktualizacji?

W sklepach korzystających z częściowego fakturowania i opóźnionego przechwytywania płatności warto zastosować dodatkową kontrolę zamówień.

Kontroluj zamówienia z dodatnim Total Due

Najważniejszym działaniem jest identyfikacja zamówień, które zostały oznaczone jako Complete, mimo że pozostała do zapłaty kwota jest większa od zera.

Nie ograniczaj kontroli wyłącznie do konkretnej wartości 0,50. Problem może dotyczyć również innych kwot dodatnich mniejszych niż jedna jednostka waluty.

Nie opieraj rozliczeń wyłącznie na statusie Complete

Integracje księgowe i raportowe powinny uwzględniać stan faktur oraz faktycznie rozliczone kwoty.

Właściwe jest rozróżnienie zakończenia wysyłki od zakończenia rozliczenia finansowego.

Testuj zmiany kodu na środowisku stagingowym

Jeśli problem występuje w danym sklepie, możliwe jest przygotowanie poprawki dostosowanej do konkretnej wersji Magento.

Nie zaleca się jednak bezpośredniej modyfikacji plików produkcyjnych bez wykonania kopii zapasowej i testów regresyjnych.

Każda zmiana mechanizmu określającego stan zamówienia powinna zostać sprawdzona pod kątem fakturowania, wysyłek, płatności, zwrotów i integracji ERP.

Sprawdź także inne operacje wykorzystujące wartości dziesiętne

Omawiany błąd dotyczy nieprawidłowej konwersji kwoty pieniężnej.

W Magento zgłaszano również odrębny problem związany z konwersją ilości produktów o wartościach ułamkowych. W obu przypadkach źródłem nieprawidłowego działania jest utrata części dziesiętnej podczas sprawdzania warunków logicznych.

Nie oznacza to automatycznie, że każda operacja na liczbach dziesiętnych w Magento zawiera błąd. Warto jednak zwracać uwagę na rozbieżności związane z niewielkimi ilościami i kwotami.

Jak zapobiegać problemom z obsługą zamówień w Magento?

System sprzedażowy powinien prawidłowo odróżniać kilka niezależnych zdarzeń:

  • utworzenie zamówienia;
  • autoryzację płatności;
  • faktyczne pobranie środków;
  • wystawienie faktury;
  • częściowe lub pełne rozliczenie należności;
  • wysłanie wszystkich produktów;
  • zakończenie obsługi zamówienia.

Nie każde z tych zdarzeń oznacza to samo.

W szczególności wydanie towaru nie powinno być traktowane jako dowód, że wszystkie należności zostały uregulowane.

W sklepach Magento z rozbudowanym systemem płatności warto regularnie analizować zgodność stanów zamówień, faktur oraz transakcji operatorów.

Równie ważne jest sprawdzanie integracji po aktualizacjach platformy i zmianach sposobu fakturowania. Przejrzysty proces płatności oraz prawidłowa obsługa posprzedażowa są także istotnymi elementami sklepu internetowego spełniającego oczekiwania klientów.

W przypadku powtarzających się błędów statusów, rozbieżności płatności i problemów z fakturowaniem można skorzystać z pomocy technicznej dla sklepów Magento i Adobe Commerce, obejmującej diagnostykę procesów sprzedaży, integracji i nieprawidłowego działania sklepu.

Najczęściej zadawane pytania o błąd Magento Complete

Czy Magento 2.4.9 może oznaczyć nieopłacone zamówienie jako Complete?

Tak. W zgłoszeniu #41789 opisano scenariusz, w którym zamówienie z otwartą fakturą i dodatnią należnością mniejszą niż jedna jednostka waluty zostaje błędnie oznaczone jako Complete po zakończeniu wysyłki.

Czy problem występuje przy każdym nieopłaconym zamówieniu?

Nie. Muszą zostać spełnione określone warunki związane z otwartą fakturą, wysokością pozostałej należności oraz stanem wysyłki.

Dlaczego pozostałe 0,50 jest traktowane jak zero?

Przyczyną jest konwersja wartości do typu int. PHP usuwa część dziesiętną, więc liczba 0,50 zostaje przekształcona w 0.

Czy błąd może powodować straty finansowe?

Może prowadzić do nierozpoznania niewielkich należności i błędów w rozliczeniach, jeżeli sklep lub zewnętrzne systemy polegają na statusie Complete. Nie potwierdzono jednak konkretnej kwoty strat finansowych wynikających ze zgłoszenia.

Czy problem dotyczy również Adobe Commerce?

Magento Open Source i Adobe Commerce korzystają ze wspólnych elementów obsługi zamówień, dlatego analogiczne zachowanie jest technicznie możliwe. Nie zweryfikowano jednak pełnej listy wersji Adobe Commerce dotkniętych błędem.

Czy zmiana statusu na Processing rozwiąże problem?

Nie usuwa przyczyny technicznej. Przy ponownym sprawdzeniu warunków Magento może ponownie zmienić stan zamówienia.

Czy dostępna jest oficjalna poprawka?

6 listopada 2026 roku dostępna była propozycja poprawki w pull requeście #41790. Nie potwierdzono jeszcze wydania stabilnej wersji Magento zawierającej tę zmianę.

Podsumowanie: Magento może błędnie zakończyć zamówienie mimo otwartej faktury

Zgłoszenie Magento #41789 dotyczy nieprawidłowego sprawdzania pozostałej należności podczas automatycznego ustalania stanu zamówienia.

Jeżeli kwota do zapłaty jest większa od zera, ale mniejsza niż jedna jednostka waluty, konwersja do liczby całkowitej może spowodować potraktowanie jej jako zerowej.

W konsekwencji w pełni wysłane zamówienie może otrzymać status Complete, mimo że nadal istnieje otwarta faktura.

Problem został potwierdzony przez zespół Magento 6 listopada 2026 roku i otrzymał priorytet P2. Przygotowano również zmianę kodu eliminującą nieprawidłowe rzutowanie wartości, ale jej oficjalne wdrożenie nie zostało jeszcze potwierdzone.

Właściciele sklepów Magento korzystających z częściowych rozliczeń powinni zweryfikować, czy wszystkie zamówienia o statusie Complete są rzeczywiście w pełni opłacone.

Najważniejsze jest zachowanie zgodności pomiędzy kwotą rozliczonych płatności, stanem faktur i statusem zamówienia, ponieważ sama informacja Complete nie zawsze gwarantuje prawidłowe zakończenie wszystkich operacji finansowych.

Szczegółowe informacje o problemie i dalszych ustaleniach znajdują się w oficjalnym zgłoszeniu Magento #41789.

netpoint

Materiały o e-commerce, sprzedaży i technologii dla sklepów internetowych.

Czytaj dalej

Powiązane materiały