PHP重定向POST数据

288

我对这个主题进行了一些研究,有一些专家说不可能实现,所以我想要寻求替代解决方案。

我的情况是:

页面A:[checkout.php] 客户填写其帐单详细信息。

页面B:[process.php] 生成发票编号并将客户详细信息存储在数据库中。

页面C:[thirdparty.com] 第三方支付网关(仅接受POST数据)。

客户在页面A中填写其详细信息并设置其购物车,然后将其POST到页面B。在process.php中,将POST的数据存储在数据库中并生成发票编号。之后,将客户数据和发票编号POST到第三方支付网关thirdparty.com。问题是如何在页面B中进行POST操作。cURL可以将数据POST到页面C,但问题是该页面没有重定向到页面C。客户需要在页面C上填写信用卡详细信息。

第三方支付网关确实为我们提供了API示例,该示例将发票号码与客户详细信息一起POST。我们不希望系统生成过多不需要的发票号码。

是否有任何解决方案? 我们目前的解决方案是让客户在页面A中填写详细信息,然后在页面B中创建另一页,显示所有客户详细信息,并且用户可以单击“确认”按钮将其POST到页面C。

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

希望我的问题很清楚 :)


我不认为这是重复的,因为我的目标是在PHP页面内传递POST数据并重定向它,而使用cURL来实现可能行不通。我只是寻求专家提供任何替代方案。 - Shiro
ʜᴛᴛᴘ 308 重定向代码是什么? - user2284570
13个回答

-2
尝试这个:
在页面 B 中使用 HTTP 标头发送数据和请求以重定向到网关。
<?php
$host = "www.example.com";
$path = "/path/to/script.php";
$data = "data1=value1&data2=value2";
$data = urlencode($data);

header("POST $path HTTP/1.1\\r\
" );
header("Host: $host\\r\
" );
header("Content-type: application/x-www-form-urlencoded\\r\
" );
header("Content-length: " . strlen($data) . "\\r\
" );
header("Connection: close\\r\
\\r\
" );
header($data);
?>

附加标头:

Accept: \*/\*
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like 
Gecko) Chrome/74.0.3729.169 Safari/537.36

-3
function post(path, params, method) {
    method = method || "post"; // Set method to post by default if not specified.



    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}

例子:

 post('url', {name: 'Johnny Bravo'});

-3
这里有另一种适合我的方法:
如果你需要重定向到另一个网页(user.php),并且包含一个 PHP 变量 ($user[0]):
header('Location:./user.php?u_id='.$user[0]);

或者

header("Location:./user.php?u_id=$user[0]");

2
这些替代方案旨在使用GET协议。它会在客户端浏览器上公开变量。OP希望改用POST来实现相同的行为。 - Sergio A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接