2010-04-07 27 views
5

Piszę formularz, aby opublikować dane do systemu PayPal, a to działa dobrze, tworzę formularz z ukrytymi polami, a następnie mam przycisk przesyłania, który przesyła wszystko do systemu PayPal.Auto Przesyłanie formularza (cURL)

Jednak, gdy użytkownik kliknie ten przycisk, jest jeszcze coś, co chcę zrobić, na przykład zmienić status koszyka w bazie danych. Tak więc chcę móc wykonać jakiś kod po kliknięciu submit, a następnie opublikować dane do paypal.

Nie chcę używać do tego javascript.

Moja metoda polega obecnie na użyciu cURL, formularz przesyła się z powrotem do bieżącej strony, następnie sprawdzam dane $ _POST, wykonuję inne polecenia, takie jak aktualizowanie statusu koszyka, a następnie tworzenie polecenia zwijania i opublikuj dane formularza w systemie PayPal. Teraz zostanie opublikowany pomyślnie, ale przeglądarka nie pójdzie do systemu PayPal.

Najpierw ponownie zwróciłem wynik w ciągu znaków, a następnie wyświetlono go i widziałem, że wpis się powiódł, a następnie ustawiłem CURLOPT_FOLLOWLOCATION na 1, zakładając, że to pozwoli przeglądarce odejść do systemu PayPal, ale nie robi tego, to, co wydaje się robić, to pobrać trochę rzeczy z systemu PayPal i umieścić go na mojej stronie.

Czy użycie cURL jest właściwe? a jeśli tak, jak mogę obejść ten problem? Chcę trzymać się z dala od javascript, ponieważ tylko użytkownicy z włączoną obsługą javascript będą mieli zaktualizowany swój koszyk.

Kod im używane dla curl jest poniżej, post_data to tablica, którą utworzyłem, a następnie odczytać pary klucz-wartość w post_string.

//Set cURL Options 
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($curl_connection, CURLOPT_MAXREDIRS, 20); 

//Set Data to be Posted 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 

//Execute Request 
curl_exec($curl_connection); 

Odpowiedz

2

Być może spróbować połączyć CURL z oświadczeniem nagłówka

<?php 
header ("Location: https://www.paypal.com/"); 

To może działać w zależności czy przeglądarka trzeba przekazać dowolny stan (sesja) informacji na paypal. Informacje o tej sesji są gromadzone w wywołaniu CURL, ale niestety nie można przekazać tego do przeglądarki. Więc jeśli chcesz utrzymać stan, to nie zadziała.

Curl działa po stronie serwera. Nie wpłynie to na twoją przeglądarkę. CURLOPT_FOLLOWLOCATION po prostu instruuje CURL, aby była posłuszna, gdy na przykład paypal przesyła mu nagłówek podobny do wspomnianego powyżej. Jedynym sposobem, aby poinstruować przeglądarkę, aby coś zrobiła, jest odpowiedzenie nagłówkiem HTTP, jak wyżej, lub z jakimś metatagem w odpowiedzi HTML, np.

<META HTTP-EQUIV="refresh" CONTENT="10;URL=https://www.paypal.com/"> 

Jako alternatywa, czy paypal nie zapewniają funkcję przekierowania, które, gdy transakcja zostanie zakończona, przekierowanie z powrotem na serwer. Jeśli tak, to po prostu zmień status karty podczas tego wywołania zwrotnego i pomiń cały proces zwijania?

+0

dziękuję, miałem nadzieję, że nie musiałbym robić tego w callbacku z paypal, chciałem ustawić status koszyka, ponieważ idzie on do paypal i jeden po powrocie, więc może dokładnie śledzić postępy i pomóc z poprawianiem jakichkolwiek błędów, źle próbuję ustawić niektóre nagłówki http i zobacz, ale może po prostu muszę to zrobić w wywołaniu zwrotnym. Po prostu założyłem, że automatyczne składanie formularza i śledzenie akcji będzie łatwiejsze. – cast01

+0

Sądzę, że nadal można zrobić oba dla tych użytkowników, którzy mają włączony javascript.Dla tych, którzy nie mają włączonego javascript, używane jest tylko wywołanie zwrotne, ale dla tych (większość), które mają włączoną obsługę javascript, możesz ustawić flagę 'going-of-to-paypal' w wywołaniu ajax i ustawić 'complete' flaga w wywołaniu zwrotnym. –

1

Po otrzymaniu formularza i wykonaniu tego, co należy zrobić, należy przedstawić inny formularz z przyciskiem (wszystkie pozostałe dane w ukrytych polach), aby użytkownik mógł kliknąć i w końcu udać się do systemu PayPal.

+0

dziękuję za odpowiedź, ale to pokonałoby cel tego, co próbuję zrobić. Chcę ustawić wózek jako, powiedzmy, "poszedł do systemu PayPal", gdy użytkownik kliknie zapłacić. Jeśli po kliknięciu zapłacić, ustawiam status koszyka i pokazuję mu inny formularz, który muszą przesłać, a następnie mogą go nie przesłać, a wtedy mój status koszyka będzie nieprawidłowy. – cast01

+0

Następnie będziesz potrzebował jednej linii javascript do automatycznego przesłania formularza. W przeciwnym razie twój serwer nie może przekierować ORAZ przesłać formularza do Paypal samemu za jednym razem. – zaf

Powiązane problemy