VIP wreszcie do kupienia
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.