小编典典

PHP重定向与POST数据

php

我对此主题进行了一些研究,并且有些专家说这是不可能的,因此我想寻求替代解决方案。

我的情况:

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页。

我们的目标是让客户只需单击一次即可。

希望我的问题清楚:)


阅读 674

收藏
2020-05-26

共1个答案

小编典典

在页面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的用户能够使用您的服务。

2020-05-26