5

我们使用 PayPal 的 Payments Pro NVP API 在我们的网站上提供无缝的信用卡和贝宝处理。我们创建了一个基于 iframe 的购物车小部件,我们的客户将其放到他们的网站上,这样他们的用户就可以购买商品并通过我们的 Paypal 帐户付款。

虽然信用卡交易工作正常,但当用户尝试使用其 PayPal 帐户付款时,我们会遇到问题。该 API 在单击 PayPal 徽标时使用重定向,但随后 PayPal 的代码似乎运行了一个框架破坏脚本并且交易无法继续。

我正在寻求有关如何处理希望通过 iframe 使用 PayPal 付款的用户的建议或示例代码。一种选择是弹出一个新窗口,但由于用户可以在该窗口和包含 iframe 的窗口之间切换,并且可能使购物车与 PayPal 窗口显示的内容不同步,因此它会使设计面临问题。

4

3 回答 3

7

以上两个答案都是正确的。但是,PayPal 技术支持提供了一套更全面的说明,我在下面提供了这些说明。希望他们能帮助别人。

修改您的 SetExpressCheckout 调用,使 RETURNURL 和 CANCELURL 参数指向一个特殊的返回页面,该页面将为您处理关闭弹出窗口并继续正常的结帐过程(稍后将详细介绍)。

接下来,修改将买家重定向到 PayPal 网站的脚本。通常,这个脚本会向浏览器返回一个“302 Found”(或类似的)响应,告诉浏览器它应该跟随重定向到其他页面。(在 PHP 中,这通常是通过“header”函数来完成的——例如,header(“Location: https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=$token”);.) 相反,此脚本应发出以下 HTML/JavaScript 代码(将“TOKEN”替换为您从 PayPal 收到的令牌)。这将打开一个弹出窗口,买家可以在其中继续在 PayPal 上进行结帐流程。您可以根据需要插入其他文本,以向买家表明他们应该使用弹出窗口来完成结账。为避免弹出窗口拦截器出现问题,您可以在页面上创建一个链接或按钮,向买家指示他们应该单击链接/按钮以继续,并将此代码用于对象的“onClick”处理程序。

<script type="text/javascript"> window.open("https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=TOKEN","_blank","width=1024,height=768,location=1,resizable=1,scrollbars=1,status=1",true); </script>

现在,创建一个执行以下代码的新页面(或类似代码——此代码基于 PHP,根据您使用的任何语言进行必要的调整)。此代码将关闭弹出窗口并在现有 iframe 中继续结帐过程。SetExpressCheckout 调用的 RETURNURL 参数应指向此页面。将“paypalreturn.php”替换为您当前用于处理买家从 PayPal 返回您的购物车的脚本。

<html>
<body>
<script type="text/javascript">
window.opener.location="http://www.regattacentral.com/paypalreturn.php?token=<? echo $_REQUEST["token"]; ?>&PayerID=<? echo $_REQUEST["PayerID"]; ?>";
window.close();
</script>
</body>
</html>

最后,为您的 CANCELURL 处理程序重复此步骤。

• 购买在 iframe 内完成,并显示购买的交易 ID。

于 2011-09-15T04:11:48.517 回答
1

出于安全原因,Pro Hosted 中的 PayPal Express Checkout / 'Pay with PayPal' 不支持 iframe。打开弹出窗口(或设置 target=_parent)是正确处理此问题的唯一方法。

于 2011-09-04T19:46:07.297 回答
0

将表单目标设置为 - target="_top"

于 2011-09-09T23:13:37.277 回答