【发布时间】:2016-01-19 18:42:03
【问题描述】:
我有这个 PHP 代码开始购买 PayPal 沙盒:
$querystring = "https://www.sandbox.paypal.com/cgi-bin/webscr";
$querystring .= "?business=" . urlencode($_PayPalApiUsername) . "&";
$querystring .= "item_name=" . urlencode($premium_item["name"]) . "&";
$querystring .= "item_number=" . urlencode($premium_item["number"]) . "&";
$querystring .= "amount=" . urlencode($premium_item["price"]) . "&";
$querystring .= "currency_code=" . urlencode($_PayPalCurrencyCode) . "&";
$querystring .= "cmd=" . urlencode($_POST["cmd"]) . "&";
$querystring .= "payment_key=" . urlencode(generateRandomString(16)) . "&";
$querystring .= "return=" . urlencode(stripslashes($_PayPalReturnURL)) . "&";
$querystring .= "cancel_return=" . urlencode(stripslashes($_PayPalCancelURL)) . "&";
$querystring .= "notify_url=" . urlencode($_PayPalNotifyURL);
header('location:' . $querystring);
exit();
最后$querystring 包含:https://www.sandbox.paypal.com/cgi-bin/webscr?business=business%40email.de&item_name=Starter-Kit&item_number=1000&amount=2.99&currency_code=EUR&cmd=_xclick&payment_key=7qm5en3B253FPxnu&return=http%3A%2F%2Fexample.com%2Fgame%2Fpremium.php%3Ftask%3Dsuccess&cancel_return=http%3A%2F%2Fexample.com%2Fgame%2Fpremium.php%3Ftask%3Dcancel&notify_url=http%3A%2F%2Fexample.com%2Faction%2Fnotify_payment_paypal.php(地址已更改)。
如果我手动将此链接插入浏览器地址行,我将被重定向到 PayPal 结帐页面。所以链接应该是正确的。
但是如果我使用header location(如代码所示),我将被重定向到 PayPal Sandbox 的主页(https://www.sandbox.paypal.com/home)。
有人知道怎么回事吗?
【问题讨论】:
-
跟踪发出的 HTTP 请求(Chrome、Firefox 中的常用功能)。然后,您可以看到直接浏览
$querystring与让您的网站将您重定向到它之间到底有什么区别。 -
感谢@Maximilian Gerhardt,看来
header location无法解析&。我用&替换了它们,它可以工作。不确定这是否是最佳解决方案。