Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP验证-将http POST值转发给第三方签出_Php_Http_Validation_Post_Checkout - Fatal编程技术网

PHP验证-将http POST值转发给第三方签出

PHP验证-将http POST值转发给第三方签出,php,http,validation,post,checkout,Php,Http,Validation,Post,Checkout,我不知道这是否可能,我似乎找不到任何其他帮助指南,所以这可能不可能 我有一个结账页面,它将大量变量转发给第三方支付处理器(WorldPay) 我想知道是否有可能在两个页面之间插入某种PHP脚本以进行验证 如果购物篮中的商品在他们填写表格时已售罄,则可能会在顾客拿钱之前被抓住。或者在他们篡改表单数据时有用 如果我在自己的网站上这样做,我可以使用会话转发帖子数据,但由于这是一个外部网站,我不知道如何发送数据而不生成另一个带有隐藏表单的HTML页面&例如刷新 有没有可能做到这一点“不可见”——实际上不

我不知道这是否可能,我似乎找不到任何其他帮助指南,所以这可能不可能

我有一个结账页面,它将大量变量转发给第三方支付处理器(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
    分别显示事务是成功还是失败
那么,作为交易流程的一部分,您实际上需要在外部提出2个请求,可以概括如下:

  • 用户在您的站点购物并将商品添加到购物车
  • 用户单击结帐,您验证购物车/用户数据
  • 如果来自#2的数据有效,请打包数据并通过cURL发布到
    secure.wp3.rbsworlpay.com/wcc/purchase
  • 如果来自#3的cURL响应成功,您可以使用cURL响应中的数据构建自己的确认页面,并将其显示给用户
  • 用户向您的服务器提交购买确认
  • 您将提交到服务器的数据打包在#5中,并通过cURL将其发布到
    secure.wp3.rbsworlpay.com/wcc/confirm
  • 如果来自#6的cURL响应成功,那么您可以解析它以获得从外部服务器返回的预期“错误”或“成功”消息,并显示它们或您自己的自定义错误消息
  • 如有错误,冲洗并重复;-) 一般来说,大多数支付处理器都有一个支持此基本流程的处理选项,通常返回易于解析的数据,如XML、JSON或纯文本,而不是HTML。你可能想看看这个。很多时候,他们通常会为各种编程语言构建库,以帮助简化集成过程



    是的,确实是。。。我通常使用
    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 */
      }
    };