2010-04-07 9 views
5

Sto scrivendo un modulo per inviare dati a paypal, e questo funziona bene, creo il modulo con campi nascosti e poi ho un pulsante di invio che invia tutto a paypal.Auto invio di un modulo (cURL)

Tuttavia, quando l'utente fa clic su quel pulsante, c'è più che voglio fare, ad esempio cambiare il loro stato del carrello nel database. Quindi, voglio essere in grado di eseguire del codice quando fanno clic su Invia e quindi inviare i dati a PayPal.

Non voglio usare javascript per questo.

Il mio metodo al momento utilizza cURL, il modulo torna alla pagina corrente, quindi controllo i dati $ _POST, altri comandi come l'aggiornamento dello stato del carrello, quindi un comando di arricciatura e inviare i dati del modulo a paypal. Ora, viene pubblicato correttamente, ma il browser non va su paypal.

All'inizio stavo solo riprendendo il risultato in una stringa e poi echeggiando e ho potuto vedere che il post ha avuto successo, quindi ho impostato CURLOPT_FOLLOWLOCATION su 1 supponendo che questo avrebbe permesso al browser di andare su paypal ma non lo fa, quello che sembra fare è prendere alcune cose da paypal e metterle sulla mia pagina.

Sta usando cURL la cosa giusta per questo? e se sì, come faccio a risolvere questo problema? Voglio stare lontano da javascript per questo come solo gli utenti con javascript abilitato avrebbero il loro carrello aggiornato.

Il codice im che usa per arricciare è sotto, il post_data è un array che ho creato e quindi leggo le coppie chiave-valore in 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); 

risposta

2

Forse provare a combinare CURL con una dichiarazione di intestazione

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

Questo potrebbe funzionare a seconda se il browser ha bisogno di passare qualsiasi stato (sessione) Info a paypal. Queste informazioni sulla sessione sono raccolte nella tua chiamata CURL, ma purtroppo non c'è modo di trasmetterle al browser. Quindi se hai bisogno di mantenere lo stato, allora questo non funzionerà.

Curl opera sul lato server. Non influenzerà il tuo browser. CURLOPT_FOLLOWLOCATION indica semplicemente a CURL di obbedire quando ad esempio paypal gli manda un'intestazione come quella menzionata sopra. L'unico modo per istruire il browser a fare qualcosa è rispondere con un'intestazione HTTP come sopra o con qualche tipo di meta tag nella tua risposta HTML, ad es.

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

In alternativa, si fa paypal non forniscono una funzione di reindirizzamento che, quando l'operazione è terminata, reindirizzare di nuovo al vostro server. Se è così, basta cambiare lo stato della carta durante questa richiamata e saltare l'intero processo di arricciatura?

+0

grazie, speravo di non doverlo fare nella richiamata da paypal, volevo impostare lo stato del carrello mentre si passa a paypal e uno quando ritorna solo così può accuratamente tenere traccia dei progressi e per aiutare con la correzione di eventuali errori, provare a impostare alcuni header http e vedere, ma potrei doverlo fare solo nel callback. Ho appena pensato che autosubmitting un modulo e seguendo l'azione sarebbe stato più facile. – cast01

+0

Immagino che potresti ancora fare entrambi gli utenti che hanno javascript abilitato.Per quelli che non hanno javascript abilitato viene utilizzata solo la richiamata ma per quelli (maggioranza) che hanno javascript abilitato, è possibile impostare il flag 'going-of-to-paypal' in una chiamata ajax e impostare il 'completo' flag nella richiamata. –

1

Dopo aver ricevuto il modulo e aver eseguito ciò che è necessario fare, è necessario presentare un altro modulo con un solo pulsante (tutti gli altri dati nei campi nascosti) affinché l'utente possa fare clic e infine dirigersi verso PayPal.

+0

grazie per la risposta, tuttavia questo avrebbe vanificato lo scopo di ciò che sto cercando di fare. Voglio impostare un carrello come, ad esempio, "andato su paypal" quando l'utente fa clic su paga. Se, quando fanno clic su paga, ho quindi impostato lo stato del carrello e mostrato loro un altro modulo che devono inviare, quindi potrebbero scegliere di non inviarlo, e quindi lo stato del carrello sarebbe sbagliato. – cast01

+0

Quindi avrai bisogno di una riga di javascript per inviare automaticamente il modulo. In caso contrario, il server non può reindirizzare E inviare un modulo a PayPal da solo in una volta. – zaf

Problemi correlati