以上两个答案都是正确的。但是,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。