2014-04-03 2 views
6

Ich habe die Identity API von PayPal in meine Webseite integriert. Wie üblich, wenn der Benutzer auf login with paypal (JavaScript button) klickt, öffnet sich ein neues Fenster für den Login-Zweck. Aber nach einem gültigen Login leite ich mich in das gleiche Popup-Fenster um.PayPal leitet zum selben Popup-Fenster um

Hinweis: ersetzt ich meine Domain-Namen als domain

App Rückkehr URL (Test):http://domain.esy.es/index.php/users/paypalidentity

Ansicht

//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()); 

Erfolgreiche Anmeldung enter image description here

zum konfigurierten Umleitungs-URL Umleiten enter image description here

+0

Ziemlich sicher, dass Sie einen close() Trigger aus dem PayPal-Javascript auf Ihrer Return-URL hinzufügen müssen. In der Tat würde die Prozedur darin bestehen, eine separate Rücksprung-URL zu erzeugen, die nur diese close() -Aktion enthält. PayPal würde darauf umleiten, aber dann würde es sofort schließen und Sie mit dem Bildschirm zurücklassen, wie Sie wollen. Es ist detailliert in den Dokumenten. Lass mich sehen, ob ich es finden und eine offizielle Antwort schreiben kann. –

+0

Letzte Antwort macht, was Sie verlangten - markieren Sie es. – kape123

+0

Große Frage. Es ist Juni 2016 und PayPal hat noch nicht erklärt, wie es geht. – Green

Antwort

1

Sie müssen die enge Aktion in Ihrer Rückkehr URL hinzuzufügen (und die meisten verwenden wahrscheinlich eine separate URL als Rück URL mit nichts als der Close-Action darin.

Werfen Sie einen Blick auf die Adaptive Payments documentation. Machen Sie einen Fund auf dieser Seite, um das Wort zu schließen, und Sie gelangen direkt zu dem Abschnitt, der behandelt, wie Sie damit umgehen.

Hinweis: Sie sind verantwortlich für den Minibrowser nach PayPal Schließen umleitet auf der Seite angegeben entweder in der Rück oder URL abzubrechen. PayPal bietet eine JavaScript-Funktion, die Sie aufrufen, um einen PayPal Minibrowser oder Leuchtkasten zu schließen.

2

hatte ich das genaue Problem, aber die Lösung ist hier in der Dokumentation:

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

Siehe „Parent Seite zu einer bestimmten URL Nachladen“ und fügen Sie dieses Skript auf die Rückkehr und stornieren Seiten.

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

Sie sind mein Held!Große Antwort + Ich habe es bearbeitet, um das Fenster zu schließen. – kape123

1

top.window.opener.location Einstellung wird Ihre ursprünglichen "Opener" Fenster aktualisieren. Sie müssen den Dialog auch schließen, indem Sie top.close() aufrufen. Dies ist nur ein Versuch, die beiden anderen Antworten zu kombinieren und die Lösung, die ich mit ihrer Hilfe gefunden habe, zu teilen. Beachten Sie, dass sich dieser Code in einer anderen URL als dem "Öffner" -Fenster befindet.

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