2014-04-03 18 views
6

Zintegrowałem interfejs API Identity PayPala na mojej stronie internetowej. Jak zwykle, gdy użytkownik kliknie login with paypal (JavaScript button), otworzy nowe okno dla celów logowania. Ale po prawidłowym logowaniu przekierowuje mnie do tego samego okna.Przekierowanie PayPal do tego samego okna popup:

Uwaga: Wymieniłem moją domenę jako domain

App powrót URL (test):http://domain.esy.es/index.php/users/paypalidentity

Zobacz

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

udanym logowaniu enter image description here

Przekierowanie do skonfigurowanego przekierowania enter image description here

+0

Na pewno trzeba dodać wyzwalacz close() z systemu PayPal javascript na zwrotnym adresie URL. W rzeczywistości procedura będzie polegać na utworzeniu oddzielnego URL-a zwrotnego, który nie ma nic poza tą akcją close(). PayPal przekieruje się do niego, ale natychmiast się zamknie, pozostawiając ekran tak, jak chcesz. Jest szczegółowo opisany w dokumentach. Zobaczę, czy mogę go znaleźć i zamieścić oficjalną odpowiedź. –

+0

Ostatnia odpowiedź robi to, o co prosiłeś - zaznacz to. – kape123

+0

Świetne pytanie. Jest czerwiec 2016, a PayPal nadal nie wyjaśnił, jak to zrobić. – Green

Odpowiedz

1

musisz dodać bliskie działania w adresie URL powrotnej (i najprawdopodobniej wykorzystać osobny adres URL jako powrót URL bez niczego oprócz akcji zamykającej w nim).

Spójrz na Adaptive Payments documentation. Zrób znalezisko na tej stronie obok słowa "zamknij" i przejdzie prosto do sekcji opisującej, jak sobie z tym poradzić.

Uwaga: Jesteś odpowiedzialny za zamykanie minibrowser po PayPal przekierowuje do strony określonej w obu zwrotu lub anulować URL. PayPal zapewnia funkcję JavaScript, którą można wywołać w celu zamknięcia minibrownika lub lightbox PayPal.

1

Ustawienie spowoduje zaktualizowanie oryginalnego okna "otwierania". Będziesz musiał zamknąć okno dialogowe, dzwoniąc pod numer top.close(). Jest to tylko próba połączenia dwóch pozostałych odpowiedzi i dzielenia się rozwiązaniem, do którego doszedłem z ich pomocą. Zauważ, że ten kod znajduje się w adresie URL innym niż okno "otwieracz".

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