我做了一些关于这个主题的研究,有些专家说过它不是possible,所以我想问一个替代解决方案 .
我的情况:
页面A:[checkout.php]客户填写其结算明细 .
页面B:[process.php]生成发票号并将客户详细信息存储在数据库中 .
页面C:[thirdparty.com]第三个支付网关(仅接受发布数据) .
客户填写他们的详细信息并在页面A中设置他们的购物车,然后POST到页面B.在process.php内部,将POSTed数据存储在数据库中并生成发票编号 . 之后,将客户数据和发票号张贴到thirdparty.com支付网关 . 问题是在页面B中进行POST .cURL能够将数据发布到页面C,但问题是页面没有重定向到页面C.客户需要在页面C上填写信用卡详细信息 .
第三方支付网关确实给了我们API样本,样本是POST发票号和客户详细信息 . 我们不希望系统生成多余的不需要的发票号 .
这有什么解决方案吗?我们当前的解决方案是让客户填写页面A中的详细信息,然后在页面B中我们创建另一个页面,显示那里的所有客户详细信息,用户可以单击确认按钮POST到页面C.
我们的目标是让客户只需点击一次 .
希望我的问题很清楚:)
8 回答
在页面B上生成一个表单,将所有必需的数据和操作设置为页面C,并在页面加载时使用JavaScript提交 . 您的数据将被发送到Page C而不会给用户带来太多麻烦 .
这是唯一的方法 . 重定向是一个303 HTTP标头,您可以在http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html上阅读,但我会引用其中一些:
实现您正在做的事情的唯一方法是使用将用户发送到Page C的中间页面 . 这是一个关于如何实现这一目标的小/简单片段:
您还应该在noscript标记内部使用简单的“确认”表单,以确保没有Javascript的用户能够使用您的服务 .
我有另一个解决方案,使这成为可能 . 它要求客户端运行Javascript(我认为这是一个公平的要求) .
只需在页面A上使用AJAX请求即可在后台生成您的发票号和客户详细信息(您之前的页面B),然后在请求成功返回并提供正确信息后 - 只需将表单提交到您的支付网关即可(第C页) .
这将实现用户只需单击一个按钮并继续进入支付网关的结果 . 下面是一些伪代码
HTML:
JS(为方便起见使用jQuery但是制作纯Javascript很简单):
$ _SESSION是你的朋友,如果你不想搞乱Javascript,并且可以安全一点 .
假设您正在尝试传递电子邮件:
在第A页:
在页面B上:
我知道这是一个老问题,但我还有另一个使用jQuery的替代解决方案:
上面的代码使用jQuery创建表单标记,将隐藏字段作为帖子字段附加,并最后提交 . 该页面将转发到附加了POST数据的表单目标页面 .
附:这种情况需要JavaScript和jQuery . 正如其他答案的评论所暗示的那样,如果禁用JS,您可以使用
<noscript>
标签创建标准HTML表单 .你可以让PHP做一个POST,但是你的php会得到回报,带来各种各样的复杂情况 . 我认为最简单的方法是让用户真正做POST .
那么,你建议的那种,你会得到这个部分:
客户填写页面A中的详细信息,然后在页面B中创建另一个页面,显示所有客户详细信息,单击确认按钮,然后POST到页面C.
但您实际上可以在页面B上执行javascript提交,因此无需单击 . 使用加载动画将其设为“重定向”页面,然后进行设置 .
有一个简单的黑客,使用
$_SESSION
并创建一个array
的已发布值,一旦你去File_C.php
你可以使用它然后你进行处理后销毁它 .例: