Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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 使用POST数据重定向_Php_Javascript_Redirect - Fatal编程技术网

Php 使用POST数据重定向

Php 使用POST数据重定向,php,javascript,redirect,Php,Javascript,Redirect,我在一个购物车上工作,有几个付款选项,使用不同的API 我想要的流程是,用户选择要使用的支付选项,并显示相应的表单 提交时,有关地址等的表单字段应保存在my DB中,有关付款的字段随POST一起发送到付款处理程序api 重要的是,用户只需单击一次,以便在单击submit按钮和将数据发送到支付服务器时,必须将save in db压缩 我想到了一种重定向,所有数据都会被发送到,并将数据保存在DB中并重定向到支付服务器,但我如何与POST数据一起重定向(很遗憾,GET无法正常工作)。您不能将传统的位置

我在一个购物车上工作,有几个付款选项,使用不同的API

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

提交时,有关地址等的表单字段应保存在my DB中,有关付款的字段随POST一起发送到付款处理程序api

重要的是,用户只需单击一次,以便在单击submit按钮和将数据发送到支付服务器时,必须将save in db压缩


我想到了一种重定向,所有数据都会被发送到,并将数据保存在DB中并重定向到支付服务器,但我如何与POST数据一起重定向(很遗憾,GET无法正常工作)。

您不能将传统的
位置:
头发送到HTTP客户端进行重定向并包含POST数据。你可以做的是:

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

如果安装了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();

最后一行不是输入错误-请求返回一个响应,然后将响应转储到输出缓冲区。

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

  • 支付表单的操作应指向支付网关
  • 将JavaScript on submit事件附加到付款表单
  • 在提交处理程序中,收集所有客户信息(姓名、地址等),并向服务器发送AJAX帖子
  • 确保提交处理程序返回false,以便POST不会立即提交到支付网关
  • 一旦AJAX POST成功,使用JavaScript提交支付表单
这也节省了您的时间,因为您可以控制要发送到服务器的参数(客户的信用卡/CVV号码不应发送到服务器,除非您获得处理这些号码的认证)。

尝试此操作

        $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);

谢谢我得到了与上面相同的答案,但我想请你给出更好的解释