2012-05-03 19 views
11

Cześć Próbuję uzyskać URL stron odsyłających, ale to nie działa, gdy użytkownik wchodzi na stronę z PaypalGet odsyłających URL - odwiedzający pochodzące z Paypal (HTTPS)

$ref = $_SERVER['HTTP_REFERER']; 
echo $ref; 

Czy istnieje prosty sposób na uzyskanie adresu URL paypal, jeśli użytkownik wyląduje na stronie pochodzącej z Paypal?

Edycja i Wyjaśnienie: Nie szukam mieć jakieś specjalne ustawienia na stronie PayPal (w tym, ale nie ograniczone do: IPN, ustaw powrót URL, transfer danych na temat płatności lub innych specjalnych ustawień na Paypal strona) Wszystko, czego szukam, to uzyskać odsyłający adres URL, gdy odwiedzający odwiedzają witrynę z Paypal, oceniając status transakcji (jeśli taka była).

Jak zauważył Bob z ręcznym

$ _SERVER jest tablica zawierająca informacje, takie jak nagłówki, ścieżek i lokalizacji skryptu. Wpisy> w tej tablicy są tworzone przez serwer WWW . Nie ma żadnej gwarancji, że każdy serwer WWW dostarczy dowolną z nich; serwery mogą pominąć niektóre lub dostarczyć inne niewymienione tutaj tutaj.

Pozostało tylko pytanie - czy istnieje jakieś obejście tego problemu bez ustawienia czegoś na stronie PayPal?

+4

Dlaczego potrzebujesz referer? Możesz ustawić zwrotny URL przez PayPal. – Devator

+2

Mmmm, to nie jest to, o co pytam lub czego potrzebuję ... – user983248

+3

Jestem w pełni świadomy, że nie o to pytasz, ale jeśli powiesz nam, co próbujesz osiągnąć, możemy pomyśleć o czymś, czego nie zrobiłeś i rozwiązuj swój problem w pierwszej kolejności. – Devator

Odpowiedz

27

Jeśli twoja strona używa protokołu HTTP (nie HTTPS), a PayPal używa protokołu HTTPS, nie jest wysyłany referrer!

HTTP RFC - 15.1.3 Encoding Sensitive Information in URI's stany:

Klienci nie powinien zawierać pola nagłówka Referer w (niezabezpieczone) żądania HTTP jeśli strona odnosząc został przeniesiony z bezpiecznego protokołu .

Jedynym sposobem na uzyskanie odsyłającego jest użycie protokołu HTTPS w witrynie.

+0

Może hostowanie własnej witryny za pomocą HTTPS pomaga? – hakre

+0

@hakre yes, to zadziała – stewe

+0

Jeśli twoja strona używa HTTPS, oznacza to, że możesz uzyskać adres URL strony odsyłającej do jakiejkolwiek innej witryny, która jest połączona z twoją witryną, jeśli używają też HTTPS (nawet jeśli URL zawiera "? U = nazwa użytkownika i pw = hasło ")? Na przykład: http://stackoverflow.com/questions/499591/are-https-urls-encrypted#comment37812273_17905738 – trusktr

3

Cytat z PHP.net:

$ _SERVER jest tablicą zawierającą informacje, takie jak nagłówki, ścieżek i miejsc skryptów. > Wpisy w tej tablicy są tworzone przez serwer WWW. Nie ma żadnej gwarancji, że każdy serwer WWW dostarczy dowolne z nich; serwery mogą pomijać niektóre lub dostarczać inne niewymienione tutaj.

+0

Więc nie ma obejścia? – user983248

+0

@ user983248: Tym rozwiązaniem jest sprawdzenie konfiguracji serwera i upewnienie się, że ustawiona jest zmienna, której szukasz. Jednak nie wystarczy obwiniać serwera, jeśli brakuje strony odsyłającej, ponieważ jeśli przeglądarka jej nie wyśle, serwer jej nie dostanie (co jest szczególnie normalne, ponieważ przeglądarka często nie wysyła tych informacji, jeśli poprzednia witryna była serwerem przez HTTPS, co ma miejsce w przypadku paypal). – hakre

9

Możesz sprawdzić IPN. Wysyła powiadomienie, gdy dotyczy transakcji.
URL: https://www.paypal.com/ipn

+0

Tak, wiem, ale nadal nie potrzebuję – user983248

+1

+1, ponieważ jest to * dużo * lepszy pomysł niż robienie * niczego * z odnośnikiem. –

2

Dzięki za twoje oświecenie (w komentarzu). Jak stwierdził Bob, nie można polegać na informacjach wysyłanych przez serwer. Chciałbym stworzyć stronę, do której użytkownik musi przejść przed dokonaniem płatności, ustawić plik cookie (lub sesję), przekierować użytkownika do witryny PayPal. Kiedy użytkownik wraca do Twojej witryny (za pośrednictwem PayPal, niektórych linków lub ręcznie), wiesz, że osoba uderzyła w przycisk Pay (tak jak ustawiłeś plik cookie lub sesję) i wykonała czynności, które chcesz.

Nie o to pytasz, ale może to być dopuszczalne rozwiązanie.

4

Referer jest niefortunnie ustawiony przez klienta, a niektóre przeglądarki (lub wtyczki) pozwalają użytkownikowi edytować, co referer jest wysyłany do serwera. Nigdy nie warto ufać "krytycznym" (w twoim przypadku, jak sądzę) informacjom wysyłanym przez użytkownika. Jest to jednak jedyna informacja o tym, skąd pochodzi użytkownik (jeśli zdecydujesz się nie używać tego, co oferuje PayPal).

1

Można użyć document.referrer w javascript i wyślij że do serwera za pośrednictwem AJAX czy coś, jeśli potrzebujesz

+1

Ta zmienna nie będzie obecna, jeśli zostało wykonane przekierowanie HTTPS na inne niż HTTPS. – Gajus

+0

Czy to jest? Dzięki.. – Stranger

0

Patrząc na to z innej persepective: Jeśli chcesz się dowiedzieć outwhere one pochodzą zanim weszli do systemu PayPal , a Twoja strona wysyła je do PayPal (lub możesz je przekierować za pośrednictwem swojej strony internetowej w drodze do PayPal), ustaw plik cookie na swojej stronie internetowej przed przekierowaniem, a następnie przeczytaj plik cookie po powrocie.

Przepraszam, jeśli nie to, czego potrzebujesz, ale tylko sprawdzając, że to rozważyłeś (ponieważ nie sądzę, że wygrasz ze stroną odsyłającą).