PHP验证-将http POST值转发给第三方签出
我不知道这是否可能,我似乎找不到任何其他帮助指南,所以这可能不可能 我有一个结账页面,它将大量变量转发给第三方支付处理器(WorldPay) 我想知道是否有可能在两个页面之间插入某种PHP脚本以进行验证 如果购物篮中的商品在他们填写表格时已售罄,则可能会在顾客拿钱之前被抓住。或者在他们篡改表单数据时有用 如果我在自己的网站上这样做,我可以使用会话转发帖子数据,但由于这是一个外部网站,我不知道如何发送数据而不生成另一个带有隐藏表单的HTML页面&例如刷新PHP验证-将http POST值转发给第三方签出,php,http,validation,post,checkout,Php,Http,Validation,Post,Checkout,我不知道这是否可能,我似乎找不到任何其他帮助指南,所以这可能不可能 我有一个结账页面,它将大量变量转发给第三方支付处理器(WorldPay) 我想知道是否有可能在两个页面之间插入某种PHP脚本以进行验证 如果购物篮中的商品在他们填写表格时已售罄,则可能会在顾客拿钱之前被抓住。或者在他们篡改表单数据时有用 如果我在自己的网站上这样做,我可以使用会话转发帖子数据,但由于这是一个外部网站,我不知道如何发送数据而不生成另一个带有隐藏表单的HTML页面&例如刷新 有没有可能做到这一点“不可见”——实际上不
有没有可能做到这一点“不可见”——实际上不在中间显示HTML页面?我建议您这样做:
在将用户引导到表单之前,检查(通过SQL查询)篮子中的项目是否已售完。如果该商品已售出,请将用户重定向到其他页面,说明该商品已售完,否则请让他转到表单重新购买。是的,您可以。您需要的是CURL函数: 另见: 编辑: 阿什利说:
好的,我看了一下卷发 这本手册写的很简单 将POST值转发到的脚本 第三方结账。这只是 显示签出的内容 尽管如此。URL地址显示 当前正在运行的脚本,而不是 转发到第三方站点。阿尔索 它们所有相对链接的图形 这是行不通的。“真实”转发可以吗 使用cURL可以实现吗 简短的回答是否定的 用你描述你的支付过程的方式,如果你想在异地过程中间做一些事情(定制HTML /消息,验证数据等),那么你需要处理CURL允许你做的整个过程。p> 使用cURL,您不需要“转发”请求,而是需要“代理”请求。因此,浏览器URL永远不会改变,而且相关图形也不会工作,这一事实是意料之中的。使用cURL或类似的工具,您永远不会让最终用户知道他们正在触摸外部页面。您将在服务器上处理对该外部服务器的所有请求,然后简单地向您的用户显示来自该外部服务器的响应,或者解析该响应,以便以定制的方式使用来自该外部服务器的数据 本质上,这意味着如果
secure.wp3.rbsworlpay.com/wcc/purchase
返回的表单需要用户进一步交互,则必须在服务器上模拟此表单并显示它。然后,当用户提交表单时,再次使用cURL向外部服务器发出请求——这次是发布用户提交的下一轮数据。比如说:
显示购物车secure.wp3.rbsworlpay.com/wcc/purchase
显示要支付的最终确认secure.wp3.rbsworlpay.com/wcc/confirm
和secure.wp3.rbsworlpay.com/wcc/success
分别显示事务是成功还是失败secure.wp3.rbsworlpay.com/wcc/error
secure.wp3.rbsworlpay.com/wcc/purchase
secure.wp3.rbsworlpay.com/wcc/confirm
是的,确实是。。。我通常使用
curl
扩展来做类似的事情,或者使用curl
的http客户机类。您可能想让自己更轻松一点,并使用其中一个类库——例如。它不仅支持curl
,还支持套接字和代理。我更喜欢PEAR的包,它基本上将curl和/或套接字封装在一些简单的对象中。发帖效果很好。您可以使用它将POST请求跳转到您的验证检查器,然后跳转到支付处理器。是的,您可以通过挂接表单的onsubmit钩子并发送如下Ajax调用(使用jQuery):
在发布到第三方之前,我们使用此代码段在会话中存储表单数据,以便在第三方返回到我们的页面时可以使用它
编辑:请记住,这只适用于启用JS的情况,但它是安全的:表单仍然在不支持JS的情况下提交。好的,我查看了cURL手册并编写了这个非常简单的脚本,用于将POST值转发给第三方签出。这只是显示chec的内容
$('#myform')[0].onsubmit = function() {
if (form_check_elements(this.elements)) { /* ««« eg JS validator here */
data = $('#myform').serialize();
$.post('/ajax_validator.php', data, function(data, textStatus) {
$('#myform')[0].submit(); /* ««« check the textStatus before here and
eventually do not submit (wrap it in
an if-clause) */
});
return false; /* make the form not post directly */
} else {
return false; /* do not post if JS validation fails */
}
};