PHP重定向与POST数据
我对此主题进行了一些研究,并且有些专家说这是不可能的,因此我想寻求替代解决方案。
我的情况:
A页:[checkout.php]客户填写帐单明细。
网页B:[process.php]生成发票编号并将客户详细信息存储在数据库中。
网页C:[thirdparty.com]第三方付款网关(仅接受过帐数据)。
客户填写其详细信息,然后在A页中设置购物车,然后在B页中过帐。在process.php中,将过帐的数据存储在数据库中并生成发票编号。之后,将客户数据和发票号过帐到thirdparty.com付款网关。问题是在页面B中执行POST。cURL能够将数据发布到页面C,但是问题是页面未重定向到页面C。客户需要在页面C上填写信用卡详细信息。
第三方支付网关确实给了我们API示例,该示例是将发票编号与客户详细信息一起过帐。我们不希望系统生成多余的发票编号。
有什么解决办法吗?我们当前的解决方案是让客户在A页中填写详细信息,然后在B页中创建另一个显示所有客户详细信息的页面,用户可以单击CONFIRM按钮以发布到C页。
我们的目标是让客户只需单击一次即可。
希望我的问题清楚:)
回答:
在页面B上生成一个表单,并将所有必需的数据和操作设置为页面C,然后在页面加载时使用JavaScript提交表单。您的数据将被发送到C页,而不会给用户带来任何麻烦。
这是唯一的方法。重定向是一个303HTTP标头,您可以阅读,但我将引用其中的一些内容:
可以在不同的URI下找到对请求的响应,并且应该使用该资源上的GET方法来检索。存在此方法主要是为了允许POST激活的脚本的输出将用户代理重定向到所选资源。新URI不能替代原始请求的资源。303响应一定不能被缓存,但是对第二个(重定向的)请求的响应可能是可缓存的。
实现您正在做的事情的唯一方法是使用一个将用户转到页面C的中间页面。以下是有关如何实现此目标的小片段/简单片段:
<form id="myForm" action="Page_C.php" method="post"><?php
foreach ($_POST as $a => $b) {
echo '<input type="hidden" name="'.htmlentities($a).'" value="'.htmlentities($b).'">';
}
?>
</form>
<script type="text/javascript">
document.getElementById('myForm').submit();
</script>
您还应该在noscript标记内使用一个简单的“确认”表单,以确保没有Javascript的用户能够使用您的服务。
以上是 PHP重定向与POST数据 的全部内容, 来源链接: utcz.com/qa/423285.html