我在PHP中创建了一个结帐流程,有4个阶段/页面。每个页面收集有关用户等的不同信息,第4阶段/页面是外部托管的安全结账页面,并接受POST表单提交(从第3阶段开始)。
一切都没问题但是我需要在将用户发送到外部舞台4之前验证阶段3中的数据,所以我查看了这个并在cURL上发现了这篇文章......
http://www.html-form-guide.com/php-form/php-form-submit.html
所有看起来都很棒,但它似乎只是将数据发布到外部第4页,但我需要用户实际上同时在那里,所以他们看到第4页。我试过......
header('Location: http://externalURLLink');
...在cURL连接关闭后直接但它没有工作。
显而易见的方法是让页面基本上显示"现在点击此处转到我们的安全付款页面,但我宁愿不这样做。
有什么建议吗?
由于
答案 0 :(得分:0)
尝试curl_setopt($ ch,CURLOPT_FOLLOWLOCATION,true);
答案 1 :(得分:0)
您可以尝试以下可能为您工作的功能:
function curl_redir_exec($ch,$test = false)
{
static $curl_loops = 0;
static $curl_max_loops = 20;
if ($curl_loops++>= $curl_max_loops)
{
$curl_loops = 0;
return FALSE;
}
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
list($header, $data) = explode("\n\n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code == 301 || $http_code == 302)
{
$matches = array();
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
if (!$url){
//couldn't process the url to redirect to
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
curl_setopt($ch, CURLOPT_URL, $new_url);
return $this->curl_redir_exec($ch);
} else {
$curl_loops=0;
if($test){
return curl_getinfo($ch, CURLINFO_EFFECTIVE_URL).'<br />'.$http_code.'<br />'.$data;
}else{
return curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
}
}
}
您可以这样使用它:
$curl_session = curl_init($DESTINATION_URL);
curl_setopt($curl_session, CURLOPT_URL, $DESTINATION_URL);
curl_setopt($curl_session, CURLOPT_COOKIESESSION, 1);
curl_setopt($curl_session, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($curl_session, CURLOPT_HTTPHEADER, array('X-Forwarded-For: '.$_SERVER['REMOTE_ADDR']));
curl_setopt($curl_session, CURLOPT_VERBOSE, 1);
curl_setopt($curl_session, CURLOPT_POST, 1);
curl_setopt($curl_session, CURLOPT_POSTFIELDS, $POST_DATA);
curl_setopt($curl_session, CURLOPT_TIMEOUT, 30);
curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, FALSE);
$redirect_url = $shop->curl_redir_exec($curl_session);
if(curl_errno($curl_session))
{
echo '<p>An error has occurred, please take note of the information below and contact support.</p>';
echo "<br>Errno : ".curl_errno($curl_session) ."<br>";
echo "<br>Error : ".curl_error($curl_session) ."<br>";
die();
}
curl_close($curl_session);
header("location:$redirect_url");
希望这很有用。