PHP POST 到 URL,用户被重定向
Posted
技术标签:
【中文标题】PHP POST 到 URL,用户被重定向【英文标题】:PHP POST to URL with user being redirected 【发布时间】:2011-11-17 14:55:20 【问题描述】:所以我在我的网站上制作了一个结帐车。我使用 PayPal 作为支付系统,但在将客户转移到 PayPal 之前,我会得到他们的详细信息。为此,我从 index.php 发布到 index.php,运行我的代码以检索发布的信息并将其存储在数据库中,现在希望将客户重定向到 PayPal。
很遗憾,您必须将所有购物车数据发布到 PayPal:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
我看到的唯一方法是发布到 index.php,收集用户数据,然后显示一个按钮,显示单击此处通过 PayPal 付款。这是我想避免的额外步骤。
有什么方法可以 POST 到 index.php,收集数据,然后将 PayPal 信息发布到 PayPal 网站?还是有其他想法?
谢谢
【问题讨论】:
【参考方案1】:您确实不需要需要重新在其他答案中提到的意义上从客户端发布您的表单。您可以改为使用 cURL 将数据 POST 到 PayPal 并使其对用户看起来是透明的。有点像张贴表格的转发。您对数据采取行动(保存、操作或其他方式)并将帖子转发到 Paypal,所有这些都在单个用户交易中完成。
这是一个简单的例子:http://davidwalsh.name/execute-http-post-php-curl
【讨论】:
不正确;因为客户端必须与 POST 数据一起重定向到 PayPal。 GET 查询字符串和 header() 是您唯一的选择(无需深入研究 javascript hack)。在不需要将客户重定向到 PayPal 的不同情况下,您的建议可以正常工作。 您实际上仍然可以使用 cURL 方法并以这种方式发布数据。如果您查看 Paypal 开发人员沙箱 中的 Paypal 开发人员示例,您会发现使用 cURL 处理 Paypal 交互的方法有很多。因此可以收集所有数据,然后将其发布到 Paypal 并进行处理。 除此之外我还能说什么; “不,这不正确”?自己尝试一下。它不会起作用。【参考方案2】:您的页面上需要 2 个表单,一个发回 index.php 的表单,另一个发回 paypal 的表单
第一个表单回传到 index.php 后,在 body 标签中回显 javascript 以在加载时提交 paypal 表单
<?php
if(isset($_POST['mydatafield']))
do database stuff
$LOAD = 'document.paypal.submit();';
?>
<body onload="<?php echo $LOAD ?>">
<form name="paypal" action="paypal.com?yadayada">
paypal fields
</form>
<form name="myform" action="index.php">
your form stuff
submit button
</form>
【讨论】:
看起来确实可行。这是做这种事情的正常方式吗?有点奇怪,这必须做对吗? 嗯,我确定还有其他方法,这是我在我的网站上做的方式。您需要将用户重定向到贝宝付款,但您还需要将订单保存在系统中。在正文加载时提交表单就像自动按下贝宝提交按钮(您不希望用户必须这样做),用户在按下结帐按钮后将被定向到贝宝。 在我的网站上编辑 *当您单击提交时,它会返回到同一页面,但不会再次显示结帐字段(您可能会看到取决于贝宝的帖子需要多长时间)我隐藏它们并显示“连接到贝宝”启动画面,以便用户知道某些东西在后台工作。【参考方案3】:您可以使用 JavaScript 以编程方式触发提交,例如:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="paypal_form">
...
<script type="text/javascript">
function submitPay()
document.getElementById("paypal_form").submit();
</script>
【讨论】:
以上是关于PHP POST 到 URL,用户被重定向的主要内容,如果未能解决你的问题,请参考以下文章
django 表单操作 url 'abc' 被重定向到 abc 两次
即使位置 url 被重定向,如何连续执行 web worker 任务?