2011-09-03 13 views
5

Utilizziamo l'API NVP Payments Pro di PayPal per fornire una perfetta elaborazione della carta di credito e paypal sul nostro sito. Abbiamo creato un widget di carrello basato su iframe che i nostri clienti hanno immesso sul sito nel loro spazio in modo che i loro utenti possano acquistare articoli e pagare tramite il nostro account Paypal.Integrazione con PayPal con carrello basato su iframe

Mentre le transazioni con carta di credito funzionano correttamente, stiamo riscontrando problemi quando un utente tenta di pagare con il proprio conto PayPal. L'API utilizza un reindirizzamento quando si fa clic sul logo PayPal, ma il codice PayPal sembra eseguire uno script framebusting e la transazione non può continuare.

Sto cercando suggerimenti o codice di esempio su come gestire gli utenti che desiderano utilizzare PayPal per il loro pagamento tramite l'iframe. Un'opzione è di aprire una nuova finestra, ma lascia aperta la progettazione ai problemi, in quanto l'utente può passare da quella finestra alla finestra contenente l'iframe e presumibilmente ritirare il carrello con la visualizzazione della finestra di PayPal.

risposta

6

Entrambe le risposte sopra sono esatte. Tuttavia, il supporto tecnico di PayPal ha fornito un insieme più approfondito di istruzioni che ho fornito di seguito. Spero che aiutino qualcun altro.

Modificare le chiamate SetExpressCheckout in modo che i parametri RETURNURL e CANCELURL puntino a una pagina di reso speciale che gestirà la chiusura della finestra a comparsa e proseguirà la normale procedura di checkout (maggiori dettagli in seguito).

Successivamente, modificare lo script che reindirizza l'acquirente sul sito Web di PayPal. Normalmente, questo script restituisce una risposta "302 Found" (o simile) al browser, dicendo al browser che dovrebbe seguire un reindirizzamento ad un'altra pagina. (In PHP, questo viene solitamente eseguito con la funzione "header" - ad es., header(“Location: https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=$token”);.) Invece, questo script dovrebbe emettere il seguente codice HTML/JavaScript (sostituendo "TOKEN" con il token ricevuto da PayPal). Si aprirà una finestra pop-up in cui l'acquirente può continuare la procedura di checkout su PayPal. Puoi inserire del testo aggiuntivo, come preferisci, per indicare all'acquirente che dovrebbero usare la finestra pop-up per completare il checkout. Per evitare problemi con i blocchi popup, puoi creare un link o un pulsante sulla tua pagina, indicando all'acquirente che devono fare clic sul link/pulsante per continuare e utilizzare questo codice per il gestore "onClick" dell'oggetto.

<script type="text/javascript"> window.open("https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=TOKEN","_blank","width=1024,height=768,location=1,resizable=1,scrollbars=1,status=1",true); </script>

Ora, creare una nuova pagina che esegue il codice seguente (o simile - questo codice è basato su PHP, regolare come necessario per qualsiasi lingua che si sta utilizzando). Questo codice chiuderà la finestra pop-up e continuerà la procedura di checkout nel tuo iframe esistente. Il parametro RETURNURL della tua chiamata a SetExpressCheckout dovrebbe puntare a questa pagina. Sostituisci "paypalreturn.php" con lo script che usi attualmente per gestire gli acquirenti che ritornano al tuo carrello da PayPal.

<html> 
<body> 
<script type="text/javascript"> 
window.opener.location="http://www.regattacentral.com/paypalreturn.php?token=<? echo $_REQUEST["token"]; ?>&PayerID=<? echo $_REQUEST["PayerID"]; ?>"; 
window.close(); 
</script> 
</body> 
</html> 

Infine, ripetere questo passaggio per il gestore CANCELURL.

• L'acquisto viene completato all'interno dell'iframe e viene mostrato l'ID della transazione per l'acquisto.

1

PayPal Express Checkout/'Pay with PayPal' in Pro Hosted non supporta iframe per motivi di sicurezza. Aprire una finestra pop-up (o impostare target = _parent) è l'unico modo per elaborarlo correttamente.

+4

Perché: La cornice esterna potrebbe avere un campo di testo o un'area di testo invisibile sopra l'IFrame che cattura i tasti che hai colpito. –

0

Imposta il tuo obiettivo modulo per - target = "_ top"