【问题标题】:Redirect with POST data使用 POST 数据重定向
【发布时间】:2011-09-30 15:23:15
【问题描述】:

我正在开发一个购物车,其中包含使用不同 API 的多种付款方式。

我想要的流程是用户选择要使用的支付选项并显示相应的表单。

提交时,有关地址等的表单字段应保存在我的数据库中,有关付款的字段通过 POST 发送到付款处理程序 api。

重要的是,用户只需单击一次,因此必须在单击提交按钮和将数据发送到支付服务器之间压缩保存在数据库中。

我想到了一个重定向,所有数据都被发布到,并将数据保存在数据库中并重定向到支付服务器,但是我如何与 POST 数据一起重定向(不幸的是,GET 不起作用)。

【问题讨论】:

    标签: php javascript redirect


    【解决方案1】:

    您不能向 HTTP 客户端发送传统的 Location: 标头来执行重定向并包含 POST 数据。你可以做的是:

    • 使用 AJAX 请求获取正确的目标 URL
    • 通过 JavaScript 使用该 URL 更新表单操作(在 AJAX 回调函数中)
    • 提交表格

    【讨论】:

      【解决方案2】:

      如果您安装了 PECL http 扩展(它将在 phpinfo() 中显示为 pecl_http),您可以创建一个 HTTP POST 请求并按照以下模式输出结果:

      // your DB code above here
      $pay_request = new HttpRequest($remote_url, HTTP_METH_POST);
      $pay_request->addPostFields($_POST);
      $pay_request->send()->send();
      

      最后一行不是错字 - 请求返回响应,然后响应被转储到输出缓冲区中。

      【讨论】:

        【解决方案3】:

        最简单的做法是在 JavaScript 代码中使用表单提交处理程序,该处理程序将发出 AJAX POST 请求以保存与客户相关的信息。

        • 支付表单的操作应指向支付网关
        • 将 JavaScript on submit 事件附加到付款表单
        • 在提交处理程序中,收集所有客户信息(姓名、地址等)并将 AJAX POST 发送到您的服务器。
        • 确保提交处理程序返回 false,以便 POST 暂时不会提交到支付网关
        • 一旦 AJAX POST 成功,使用 JavaScript 提交付款表单。

        这也可以节省您的时间,因为您可以控制将哪些参数发送到您的服务器(客户的信用卡/CVV 号码不应发送到您的服务器,除非您经过认证可以处理它们)。

        【讨论】:

        • 谢谢!我在上面得到了相同的答案,但我 +1 你以获得更好的解释
        【解决方案4】:

        试试这个

                $context = stream_context_create(array(
                'http' => array(
                  'method'  => 'POST',
                  'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                  'content' => http_build_query($_POST)
                ),
              )); 
        
            echo file_get_contents($url, false, $context);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-31
          • 2012-11-05
          • 1970-01-01
          • 2020-06-03
          • 2020-08-12
          • 1970-01-01
          • 2016-09-29
          相关资源
          最近更新 更多