2014-04-03 19 views
6

Ho integrato l'API di identità di PayPal nella mia pagina web. Come al solito quando l'utente fa clic su login with paypal (JavaScript button) apre una nuova finestra a scopo di accesso. Ma dopo un login valido mi reindirizza alla stessa finestra popup.PayPal reindirizza alla stessa finestra a comparsa

Nota: ho sostituito il mio nome di dominio come domain

URL di ritorno App (test):http://domain.esy.es/index.php/users/paypalidentity

View

//url http://domain.esy.es/index.php 
<span id="paypalButton"></span> 
<script src="https://www.paypalobjects.com/js/external/api.js"></script> 
<script> 
    paypal.use(["login"], function(login) { 
     login.render ({ 
      "appid": MYAPPID, 
      "authend": "sandbox", 
      "scopes": "openid email profile address phone https://uri.paypal.com/services/paypalattributes", 
      "containerid": "paypalButton", 
      "locale": "en-us", 
      "returnurl": "http://domain.esy.es/index.php/users/paypalidentity" 
     }); 
    }); 
</script> 

controller

//url http://domain.esy.es/index.php/users/paypalidentity 
require_once __DIR__ . '/../../vendor/autoload.php'; 
$apicontext = new PPApiContext(array('mode' => 'sandbox')); 
$code = $_REQUEST['code']; 
$apicontext = new PPApiContext(array('mode' => 'sandbox')); 
$params = array(
    'client_id' => MYCLIENTID, 
    'client_secret' => MYSECRET, 
    'code' => $code 
); 
$token = PPOpenIdTokeninfo::createFromAuthorizationCode($params,$apicontext); 
$apicontext = new PPApiContext(array('mode' => 'sandbox')); 
$params = array('access_token' => $token->getAccessToken()); 
$user = PPOpenIdUserinfo::getUserinfo($params,$apicontext); 
$this->session->set_userdata(
    array(
     'name'=>$user->getName() 
    ) 
); 
redirect(base_url()); 

successo Accesso enter image description here

Riorientare l'URL di rinvio configurata enter image description here

+0

Abbastanza sicuro è necessario aggiungere un innesco close() dal javascript PayPal sul tuo URL di ritorno. In effetti, la procedura sarebbe quella di creare un URL di ritorno separato che non abbia altro che questa azione close() su di esso. PayPal reindirizzerebbe ad esso, ma poi si chiuderebbe immediatamente, lasciandoti dietro lo schermo come desideri. È dettagliato nei documenti. Fammi vedere se riesco a trovarlo e pubblicare una risposta ufficiale. –

+0

L'ultima risposta fa ciò che hai chiesto: contrassegnalo. – kape123

+0

Ottima domanda. È ora giugno 2016 e PayPal non ha ancora spiegato come farlo. – Green

risposta

1

è necessario aggiungere l'azione vicino nel vostro URL di ritorno (e molto probabilmente utilizzare un URL separato come il ritorno URL con nient'altro che l'azione ravvicinata in esso).

Dai uno sguardo allo Adaptive Payments documentation. Fai una ricerca in quella pagina per la parola close e ti porterà direttamente alla sezione che spiega come gestirlo.

Nota: L'utente è responsabile per la chiusura del minibrowser dopo PayPal reindirizza alla pagina specificata sia il ritorno o annullare URL. PayPal fornisce una funzione JavaScript che chiami per chiudere un minibrowser o un lightbox PayPal .

2

ho avuto il problema esatto, ma la soluzione è nella documentazione qui:

https://developer.paypal.com/docs/classic/express-checkout/digital-goods/ClosingWindow/

Fare riferimento a "Ricaricamento pagina padre a un URL specifico" e aggiungere questo script per il ritorno ed annullare pagine.

<script> 
    top.window.opener.location ='http://your-url-here.html'; 
    // if you want to close the window 
    // window.close(); 
</script> 
+0

Signore, sei il mio eroe!Ottima risposta + Ho modificato per chiudere la finestra. – kape123

1

L'impostazione top.window.opener.location aggiorna la finestra "Apri" originale. Dovrai anche chiudere la finestra di dialogo chiamando top.close(). Questo è solo un tentativo di combinare le altre due risposte e condividere la soluzione con cui sono arrivato con il loro aiuto. Si noti che questo codice è in un URL diverso dalla finestra "Apri".

<script src="https://www.paypalobjects.com/js/external/api.js"></script> 
<script> 
top.window.opener.location ='http://yourdomain.com'; 
top.close(); 
</script> 
Problemi correlati