PayPal 重定向到相同的弹出窗口

Posted

技术标签:

【中文标题】PayPal 重定向到相同的弹出窗口【英文标题】:PayPal redirects to the same popup window 【发布时间】:2014-05-15 18:52:36 【问题描述】:

我在我的网页中集成了 PayPal 的身份 API。像往常一样,当用户单击login with paypal(javascript button) 时,它会打开一个新窗口以进行登录。但在有效登录后,它会将我重定向到同一个弹出窗口。

注意:我将我的域名替换为domain

应用返回网址(测试): http://domain.esy.es/index.php/users/paypalidentity

查看

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

控制器

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

成功登录

重定向到配置的重定向 URL

【问题讨论】:

很确定您需要在您的返回 URL 上添加来自 PayPal javascript 的 close() 触发器。实际上,该过程将是创建一个单独的返回 URL,该 URL 只有这个 close() 操作。 PayPal 会重定向到它,但随后它会立即关闭,让您按照自己的意愿将屏幕留在后面。文档中有详细说明。让我看看我能不能找到它并发布一个官方答案。 最后一个答案符合您的要求 - 标记它。 好问题。现在是 2016 年 6 月,PayPal 还没有解释如何操作。 【参考方案1】:

我遇到了确切的问题,但解决方案在此处的文档中:

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

请参阅“将父页面重新加载到特定 URL”并将此脚本添加到返回和取消页面。

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

【讨论】:

你先生是我的英雄!很好的答案 + 我已经编辑它以关闭窗口。【参考方案2】:

您需要在返回 URL 中添加关闭操作(并且很可能使用单独的 URL 作为返回 URL,其中只有关闭操作)。

看看Adaptive Payments documentation。在该页面上查找“关闭”一词,它会直接带您进入介绍如何处理此问题的部分。

注意:您有责任在 PayPal 之后关闭迷你浏览器 重定向到返回或取消 URL 中指定的页面。 PayPal 提供了一个 JavaScript 函数,您可以调用该函数来关闭 PayPal 迷你浏览器或灯箱。

【讨论】:

【参考方案3】:

设置top.window.opener.location 将更新您原来的“开启者”窗口。您还需要通过调用top.close() 来关闭对话框。这只是尝试结合其他两个答案并分享我在他们的帮助下得出的解决方案。请注意,此代码位于“opener”窗口之外的 url 中。

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

【讨论】:

以上是关于PayPal 重定向到相同的弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring 服务器配置中禁用“需要身份验证的弹出窗口”?

Javascript - 从弹出窗口重定向父窗口

登录后如何重定向到razorpay 支付弹出窗口?

如何关闭弹出窗口并将 url 重定向到父页面?

在两个视图上显示相同的弹出窗口

如何关闭弹出窗口并重定向到 Django 视图中的另一个页面?