23.08.2026 09:53

VIP wreszcie do kupienia

⏱️ 3 min read
Share:

Zaczęło się od zwykłego pytania: gdzie u was kupić VIP-a?

Odpowiedź okazała się kłopotliwa. Nigdzie — choć w kodzie stał komplet: strona, obsługa płatności, subskrypcja, obsługa zdarzeń od operatora. Wszystko było, a zakupu nie dało się dokonać. Poniżej cztery przeszkody, jedna za drugą, bo każda po kolei wystarczała, żeby zatrzymać człowieka z portfelem w ręku.

Cztery rzeczy, każda wystarczająca

Strona /vip wywalała się każdemu zalogowanemu. Brakowało jednej linijki importu, więc kod szukał narzędzia do formatowania daty w niewłaściwym miejscu i nie znajdował.

Zakładka VIP w profilu wypisywała surowy kod na ekran. Plik szablonu miał nazwę o jeden człon za krótką. System taki plik znajduje, ale traktuje go jak zwykły skrypt — więc zamiast interfejsu użytkownik dostawał nawiasy i instrukcje warunkowe.

Płatność wysyłała do operatora nazwę zmiennej zamiast identyfikatora ceny. Dosłownie tekst STRIPE_VIP_PRICE_ID, bo tej pozycji nie było w konfiguracji.

Czwarta była najpoważniejsza i wyszła dopiero przy czytaniu obsługi zdarzeń. Mechanizm aktywujący VIP-a rozpoznaje subskrypcję po znaczniku umieszczonym na subskrypcji, a proces zakupu ustawiał ten znacznik na sesji płatności. Operator ich nie kopiuje. Czyli nawet po naprawieniu trzech poprzednich rzeczy płatność przeszłaby, pieniądze by wpłynęły, a konto nie dostałoby niczego. Ten sam mechanizm szukał dodatkowo użytkownika po identyfikatorze klienta, którego pierwszy kupujący jeszcze nie ma — więc gubił dokładnie te osoby, które właśnie zapłaciły po raz pierwszy.

Odznaka, która zostawała po wygaśnięciu

Uprawnienia nigdy nie były zagrożone — wszystkie bramki sprawdzają datę. Ale sama odznaka opierała się na osobnym znaczniku, którego nic nie gasiło. Przy naprawie wyszła pułapka: część zapytań nie pobierała daty ważności, a metoda sprawdzająca traktuje jej brak jako „bezterminowo". Samo przełączenie na tę metodę pogorszyłoby sprawę zamiast ją naprawić. Doszło też cogodzinne sprzątanie, bo dotąd jedyną drogą do wygaszenia było zdarzenie o skasowaniu subskrypcji.

Korzyści przepisywane ręcznie w czternastu językach

To była osobna, cicha bolączka. Lista korzyści VIP-a leżała w sześciu miejscach konfiguracji i w kodzie, a strona miała ją wpisaną w tłumaczeniach — łącznie z ceną, osobno w każdym z czternastu języków. Wystarczyła jedna zmiana limitu, żeby strona zaczęła obiecywać co innego, niż system faktycznie daje.

Teraz każda pozycja na liście wskazuje to samo ustawienie, które czyta kod pilnujący limitu. Liczby na stronie i liczby obowiązujące to z definicji te same liczby.

I wejście, którego nie było

Jedyne linki do strony VIP wychodziły z tego zepsutego fragmentu profilu, więc trafiało się tam wyłącznie zgadując adres. Doszła pozycja w menu konta.

Uwaga: uruchomienie sprzedaży wymaga jeszcze jednego ustawienia po naszej stronie. Do tego czasu strona mówi wprost o chwilowej niedostępności, zamiast pokazywać przycisk, który donikąd nie prowadzi.

📚 Related posts

27.08.2026 20:55

Data, której nie cofniemy nawet my

Każdy certyfikat autorstwa dostaje datę zapisaną w blockchainie Bitcoina — takiej nie podważy nikt, my też nie. Sprawdzisz ją bez konta i bez Moonligh...
Continue reading →
27.08.2026 19:35

Twój kolor, wszędzie

Trzy tryby i siedem akcentów, wspólnych dla strony i Moonlight Animate. Motyw jedzie z kontem, profil pokazuje gościom Twoje kolory, a harmonogram sam...
Continue reading →
27.08.2026 18:31

Kto moderuje i na jakiej podstawie

Moderator to teraz osobna rola z własnym zakresem, a nie administrator w przebraniu. Odrzucenie treści wymaga powodu, który trafia do autora razem z d...
Continue reading →

📧 Stay up to date!

Join the waitlist to get notified about new Dev Blog posts and Moonlight platform launch.