Przed Wami kolejny wpis z rozwiązaniem problemu w rodzaju „czasem coś nie działa a powinno” – tym razem będzie to problem jaki pojawił się ostatnio w jednym ze sklepów opartych o skrypt/oprogramowanie WooCommerce (WordPress), dodatkowo schowany za usługą Cloudflare i korzystający z wtyczki Transferuj.pl (obecnie tpay.com) do przyjmowania szybkich płatności…
Spis treści w artykule
Transferuj.pl/tpay.com: Błąd – sesja wygasła
Wszystko sobie sprawnie działało, aż kilka dni temu dostałem informacje, że jeden z klientów sklepu chcąc dokonać płatności za pomocą usługi/serwisu Transferuj.pl (obecnie tpay.com) otrzymał informacje o tym, że wygasła sesja i tym samym z płatności nici.
Analiza (występowania) błędu
Oczywiście w myśl jednej z ulubionych dewiz większości informatyków – dziwne, u mnie działa – miałem nadzieję, że to problem po stronie komputera naszego klienta. Niestety, ale szybkie testy potwierdziły występowanie takiego problemu po stronie sklepu.
Cały proces zakupowy przebiegał sprawnie do momentu przejścia na stronę serwisu Transferuj.pl, gdzie następowało przyjęcie żądania płatności i przekierowanie na stronę wybranego banku. W tym momencie pojawiał się jeden z 2 błędów:
Błąd
Sesja wygasła.
Sprawdź, czy Twoja przeglądarka ma włączoną obsługę plików cookies.
Błąd
Przesłane parametry są niepoprawne
Analiza, diagnoza i naprawa
Z racji tego, że każdy taki sklep to zazwyczaj sporo dodatkowych wtyczek, oraz sporo dodatkowego kodu w functions.php – poszukiwania przyczyny nie należą do najprzyjemniejszych zajęć ;-)
Ostatecznie problem okazał się na styku wtyczki/usługi Cloudflare i Transferuj.pl, a konkretnie domyślnie włączona opcja HTTPS Protocol Rewriting, więc wystarczyło w ustawieniach wtyczki Cloudflare do WordPressa zaznaczyć „off” dla tej opcji i zapisać ustawienia (odpowiednia opcja znajduje się też bezpośrednio w panelu zarządzania usługą, ale zalecam skorzystać z wtyczki).
HTTPS Protocol Rewriting
Sama opcja sama z siebie nie jest zła, a wręcz przeciwnie – opcja ma związek z wprowadzeniem przez Cloudflare bezpłatnej opcji „Universal SSL” dla wszystkich stron, co pozwala na włączenie szyfrowania SSL również dla stron które nie posiadają własnego certyfikatu.
Ta forma szyfrowania w opcjach Cloudflare nazywa się Flexible SSL, i zapewnia szyfrowanie między przeglądarką użytkownika a serwerami Cloudflare:
Z tego powodu, że w przypadku tej opcji – zapewne w większości przypadków najczęściej wybieranej – szyfrowanie odbywa się tylko między przeglądarką użytkownika a serwerami Cloudflare może pojawić się problem z dostępem do niektórych zasobów, do których przeglądarka będzie się odwoływać w ramach połączenia szyfrowanego (https) a na serwerze będą one dostępne w ramach połączenia nieszyfrowanego (http).
W tym momencie wkracza opcja „HTTPS Protocol Rewriting”, dzięki której linki/adresy URL do wszystkich dodatkowych zasobów są zmieniane w taki sposób, by były pobierane za pomocą tego samego protokołu co reszta strony (główny dokument).
Full SSL (strict)
I zazwyczaj to działa – ale w przypadku sklepu internetowego najczęściej mamy na serwerze własny certyfikat SSL (choćby darmowy StartSSL, czy Let’s Encrypt) i tym samym w Cloudflare rodzaj połączenia SSL ustawiony na „Full SSL” lub „Full SSL (strict)”.
W takim przypadku nie ma potrzeby modyfikacji typu połączenia, a wręcz – jak w przypadku wywołania serwisu/usługi Transferuj.pl – może to być szkodliwe i warto rozważyć wyłączenie tej opcji…
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01
Podobnie jest z wtyczką do płatności PayU. Wyłaczenie HTTPS w Cloudflare rozwiązuje błędy.
Dzięki za informacje – pewnie przyda się komuś… Choć by być bardziej precyzyjnym – nie namawiam(y) nikogo do rezygnacji z HTTPS, czy Cloudflare na stronie, a tylko zwracam(y) uwagę na ten jeden drobny element konfiguracji, który może przysporzyć ew problemów… :-)
Używam Wp + Woocommerece + Woocommerce Tpay i CF.
Płatności idą bez problemu jednak występuje problem z „Niepoprawną odpowiedzią serwera”.
Otrzymujesz tą automatyczną wiadomość ponieważ Twój serwer pod adresem: http://xyz/?wc-api=WC_Gateway_Transferuj
nie daje poprawnej odpowiedzi na wysyłane przez system Transferuj.pl powiadomienia dla transakcji ’.XXXXXX’.
Poprawna odpowiedź to: TRUE
Natomiast odpowiedź Państwa serwera to:
Jakieś pomysły jak to poprawić?
W CF używam SSL (strict) i wyłączyłem „Automatic HTTPS Rewrites”
Tak „na sucho” (bez bezpośrednio dostępu do sklepu/serwera) to nie bardzo – w takich sytuacjach warto spojrzeć w logi (ew. wcześniej włączyć logowanie), i przetestować różne ustawienia (z CF, bez CF, itp.).
W dokumentacji tpay znalazłem info, że nie wspierają przekierowań 301 i 302. Z tego co widzę to CF robi właśnie takie przekierowanie.
Tylko, że strona może być dostępna po http:// i https://(301) a zwrot nie idzie ani na to ani na to. Zobaczę co napiszą z CF i tpay i ewentualnie dam znać.
Nie wiem jaką masz konfiguracje, ja zazwyczaj robię tak, że sklep działa po SSL/HTTPS (kiedyś tylko niektóre strony, teraz zazwyczaj całość), do tego w CF mam „strict” i to działa (jest po stronie serwera wymuszone ew. przekierowanie ruchu z HTTP na HTTPS, oraz z http://www.domena na samą domenę, ale to tylko jakby ktoś się uparł na wejście przez „www” lub po HTTP).
Ale testowałem tpay w konfiguracji sklep po HTTP i tylko „strony z danymi wrażliwymi” po HTTPS, i było OK.
Tak jak napisałem wcześniej – trochę ciężko mi coś konkretnego doradzić, bo to takie… teoretyzowanie, jednak jak ma się fizyczny dostęp „do problemu”, to jest trochę łatwiej – może nie tyle łatwiej, że mniejszy problem, ale łatwiej szukać rozwiązania :-)
Dzięki za dodatkowe wskazówki. Czy po stronie tpay(w panelu na ich stronie) trzeba ewentualnie na coś zwrócić uwagę?
Wiesz co, nie wiem… ale chyba nie, bo ostatnio np. tylko aktywowałem bramkę, a ustawienia w tpay robił już klient, i wierz mi, mało techniczny, a wszystko działa, więc raczej nie ma tu nic nietypowego (oczywiście poz ustawieniem autoryzacji). Jedyny problem jaki miałem, to właśnie opisany powyżej (wpis).
W każdym razie, jakby okazało się, że jest to jakaś kwestia konfiguracji „czegoś”, to fajnie, jakbyś dał znać, bo może komuś też się jeszcze przyda :-)
Mam ten sam problem! Płatność przechodzi, ale dostaje wiadomość zwrotną o niepoprawnej odpowiedzi serwera. Na pewno wina w konfiguracji cloudflare, bo tylko to ostatnio zmieniałem :) Page rules /zamowienie* mam wszystko powyłączane, w tym https rewrites. Jakieś pomysły?
Wyłącz „HTTPS Protocol Rewriting” dla całej domeny/całego adresu – bo nie pamiętam teraz jaki tam adres jest zwrotny, i sprawdź czy to będzie działać (zalecam zrobić to z poziomu wtyczki Cloudflare do WordPressa, lub w ustawieniach – globalnie dla domeny). U mnie konfiguracja opisana we wpisie działa, tzn. błąd przestał występować.
Próbowałem na wszystkie sposoby, nic nie działało. Zdaje się, że dopiero zainstalowanie wtyczki cloudflare na WP i tam ponowne wyłączenie „Automatic HTTPS Rewrites” podziałało, pomimo, że na koncie cloudflare wszystko powyłączane. Może komuś się przyda taka podpowiedź :)
Dzięki za artykuł!
Niby wtyczka pozwala tylko na modyfikację ustawień w usłudze Cloudflare (na ich serwerach), to ja właśnie nie tylko z powodu wygody (np. szybka aktywacja trybu dewelopera) ją instaluje na każdej stronie na WordPressie schowanej za tą usługą.
Miałem ten sam problem, coś jest nie tak ze sprawdzeniem adresu IP serwera wysyłającego odpowiedź w funkcji gateway_communication() co jakiś czas ulega zmianie, o czym nie ma wzmianki w dokumentacji.
Ja wywaliłem sprawdzenie IP, resztę parametrów sprawdza kolejna funkcja verify_payment_response() (numer zamówienia, checksum, itd ) więc wielkiego zagrożenia bezpieczeństwa to nie powoduje
Dzięki za dość techniczny i zarazem konkretny komentarz. Zgłaszałeś może to do Transferuj.pl/tpay.com, by mogli się temu przyjrzeć i skorygować (ewentualny) błąd? Bo w tej chwili wyłączenie „HTTPS Protocol Rewriting” w ustawieniach wtyczki Cloudflare wydaje się lepszym rozwiązaniem (zwłaszcza, jak cały sklep działa po HTTPS) niż bezpośrednia edycja plików wtyczki, bo te zostaną przywrócone po aktualizacji i problem prawdopodobnie pojawi się znowu.