Mam dziwny problem z numerem zamówienia w Magento.
Ostatnio, kiedy jedno zamówienie zostało złożone na mojej stronie internetowej, przyszedł numer zamówienia 100000350
, najlepiej byłoby, gdyby były 100000370
moje poprzednie numery zamówień 100000369
i 100000367
. Załączam zrzut ekranu poniżej
Ponadto sprawdziłem dzienniki błędów, ale nie znalazłem żadnego wpisu. Jako bramę płatności używamy SagePay i PayPal.
Czy ktoś może mi w tym pomóc?
magento-1.7
sales-order
order-status
Dexter
źródło
źródło
Odpowiedzi:
Za pierwszym razem, gdy dostałem numer kolejny, mieliśmy niespodziankę i trochę przerażenia, dopóki nie zorientowałem się, co się dzieje. Ma to związek ze sposobem przydzielania numerów zamówień sprzedaży przez Magento.
Teraz wyjaśnienie.
Proces zamawiania Magento tworzy wycenę przy pierwszym dodaniu czegoś do koszyka.
W tym momencie oferta jest tylko potencjalnym Zleceniem sprzedaży . Nie ma przypisanego numeru, ponieważ klient nie zobowiązał się do zapłaty.
Gdy klient kliknie przycisk Kontynuuj, aby przejść do kasy, będzie:
Ważne jest to, co następuje: Klienci, którzy zdecydują się zarejestrować w koszyku, są traktowani jak klienci-goście do momentu zakończenia zamówienia i przechodzą do strony sukcesu, w której tworzone jest konto i są zalogowani. pozostaje zaproszonym klientem-klientem z utratą limitu czasu sesji koszyka, jeśli zamówienie nie zostanie zrealizowane i wyświetli się strona powodzenia.
W przypadku zamówienia kartą kredytową po kliknięciu przycisku Złóż zamówienie dzieje się, co następuje .
sales_flat_quote
tabela wreserved_order_id
kolumnie)Jeśli transakcja kartą kredytową zostanie odrzucona dla dowolnego klienta przez bramę płatności kartą kredytową, a następny klient złoży udane zamówienie, w sekwencji numerów Zamówienia sprzedaży zostanie pominięty błąd z powodu przypisania do odrzuconej płatności Zamówienia sprzedaży numeru zarezerwowanego a następnemu udanemu zleceniu sprzedaży zostaje przypisany następny dostępny numer.
W przypadku koszyków gości (zamówień gości i nieudanej rejestracji klientów koszyka), które przekraczają limit czasu sesji, ten zarezerwowany numer Zamówienia sprzedaży zostanie utracony po wygaśnięciu sesji, pozostawiając luki w sekwencji Zamówienia sprzedaży.
W przypadku klientów, którzy zalogowali się przed kliknięciem przycisku Kontynuuj , wycena ma przypisany identyfikator klienta, więc jeśli spróbują złożyć zamówienie i stwierdzą, że zostało odrzucone, mogą wrócić, zalogować się, znaleźć koszyk wciąż zawierający zawartość i umieścić zamówienie, czasem znacznie później (najdłużej jak dotąd cztery miesiące). Oferta użyje przypisanego zarezerwowanego numeru zamówienia sprzedaży, co spowoduje wyświetlenie poza zamówieniem numeru zamówienia sprzedaży wyświetlanego na ekranie zarządzania zamówieniem sprzedaży.
źródło
Miałem do czynienia z tym samym problemem, ale tylko wtedy, gdy serwer został obciążony ogromną ilością obciążenia. Ten problem występuje, ponieważ db przechodzi w stan blokady podczas przekształcania oferty w kolejność. Podczas dalszej inspekcji dowiedziałem się, że problem polegał na tym, że próbował zapisać do tabeli sales_flat_order_grid w ramach transakcji zaraz po wstawieniu do tabeli sales_flat_order. Przy równoczesnych zapytaniach powodowało blokowanie kolizji. Prawdziwym rozwiązaniem jest przeniesienie elementów Sales_flat_order_grid z transakcji.
Link pomógł mi zrozumieć problem
Łatka rozwiązała problem dla mnie.
Musisz usunąć funkcję _afterSave z Mage_Sales_Model_Abstract i dodać
Daj mi znać, jeśli to rozwiąże problem.
źródło
Nie jestem pewien, ale może to rozwiązać problem:
O ile mi się wydaje, coś mogło zakłócić twój
eav_entity_store
stół. Zawiera informacje o kolejnym identyfikatorze increment_id, tj. Id_przyjęcia do użycia. Być może jakiś moduł lub kod w twoim systemie magento mógł to zmienić.Otwórz tę tabelę i zaktualizuj kolumnę increment_last_id o swój identyfikator ostatniego zamówienia. Bądź ostrożny, że zawiera przyrost id użytkownika, jak również innych, takich jak faktury, wysyłki itp Aby mieć pewność, wystarczy udać się do
eav_entity_types
stołu i zobaczyć, co jestentity_type_id
zasales/order
(kolumnyentity_model
). W moim magento jest 5. Więc teraz przejdź doeav_entity_store
tabeli i po prostu zaktualizuj increment_id dla wiersza, któryentity_type_id
jest 5. Możesz bezpośrednio zaktualizować go przez phpmyadmin lub możesz uruchomić zapytanie takie jak:Uwaga: w moim Magento 5 znajduje się identyfikator podmiotu_typu dla zamówienia
Przyczyn problemu może być wiele, ale myślę, że może to rozwiązać problem.
źródło