2014-04-03 12 views
6

Tôi đã tích hợp API nhận diện của PayPal trong trang web của tôi. Như thường lệ khi người dùng nhấp vào login with paypal (JavaScript button), nó sẽ mở ra một cửa sổ mới cho mục đích đăng nhập. Nhưng sau khi đăng nhập hợp lệ, nó chuyển hướng tôi đến cùng một cửa sổ bật lên.PayPal chuyển hướng đến cùng một cửa sổ bật lên

Lưu ý: Tôi thay thế tên miền của mình như domain

URL trả về ứng dụng (thử nghiệm):http://domain.esy.es/index.php/users/paypalidentity

Xem

//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> 

khiển

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

thành công Login enter image description here

Chuyển hướng đến URL chuyển hướng cấu hình enter image description here

+0

Chắc chắn bạn cần phải thêm trình kích hoạt close() từ javascript PayPal trên URL trả về của bạn. Trong thực tế, thủ tục sẽ là tạo một URL trả về riêng biệt mà không có gì ngoài hành động close() này trên nó. PayPal sẽ chuyển hướng đến nó, nhưng sau đó nó sẽ ngay lập tức đóng, để lại cho bạn với màn hình phía sau như bạn muốn. Chi tiết trong tài liệu. Hãy để tôi xem nếu tôi có thể tìm thấy nó và đăng một câu trả lời chính thức. –

+0

Câu trả lời cuối cùng làm những gì bạn yêu cầu - đánh dấu nó. – kape123

+0

Câu hỏi hay. Đó là tháng 6 năm 2016 và PayPal vẫn chưa giải thích cách thực hiện. – Green

Trả lời

1

Bạn cần phải thêm các hành động gần gũi trong URL trả về của bạn (và nhiều khả năng sử dụng một URL riêng biệt như sự trở lại URL không có gì ngoài hành động đóng trong đó).

Hãy xem Adaptive Payments documentation. Thực hiện tìm kiếm trên trang đó để đóng từ và nó sẽ đưa bạn thẳng đến phần bao gồm cách xử lý việc này.

Lưu ý: Bạn có trách nhiệm đóng máy thu hình sau khi PayPal chuyển hướng đến trang được chỉ định trong URL trả lại hoặc hủy. PayPal cung cấp chức năng JavaScript mà bạn gọi để đóng PayPal minibrowser hoặc lightbox.

2

tôi đã có vấn đề chính xác, nhưng giải pháp là trong tài liệu ở đây:

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

Tham khảo "Reloading trang mẹ đến một URL cụ thể" và thêm kịch bản này để trả lại và hủy các trang.

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

Bạn là anh hùng của tôi!Câu trả lời hay + Tôi đã chỉnh sửa nó để đóng cửa sổ. – kape123

1

Đặt top.window.opener.location sẽ cập nhật cửa sổ "mở" ban đầu của bạn. Bạn cũng sẽ cần đóng hộp thoại bằng cách gọi top.close(). Đây chỉ là một nỗ lực trong việc kết hợp hai câu trả lời còn lại và chia sẻ giải pháp mà tôi đã đến với sự giúp đỡ của họ. Lưu ý rằng mã này nằm trong một url khác với cửa sổ "mở".

<script src="https://www.paypalobjects.com/js/external/api.js"></script> 
<script> 
top.window.opener.location ='http://yourdomain.com'; 
top.close(); 
</script> 
Các vấn đề liên quan