2013-02-11 50 views
0

我目前有一個自定義購物車直接發送到2Checkout,並需要使用不同的付款方式相同的形式。PHP重定向到其他網站與POST變量

要做到這一點,我需要先將表格提交給我自己的服務器,然後將服務器重定向到選定的支付網關或我網站上的一個頁面,其中詳細介紹了其他支付選項。

我該如何將變量作爲PHP中的post方法(而不是javascript)重定向到用戶?

我當前的代碼不工作的用戶不離開頁面,他們需要......

//$url = 'https://www.2checkout.com/checkout/spurchase'; 
$url = 'getpost.php'; 

//url-ify the data for the POST 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
rtrim($fields_string, '&'); 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_POST, count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1); 
curl_setopt($ch, CURLOPT_HEADER  ,0); // DO NOT RETURN HTTP HEADERS 
curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); // RETURN THE CONTENTS OF THE CALL 
//execute post 
$result = curl_exec($ch); 

//close connection 
curl_close($ch); 
+0

http://stackoverflow.com/questions/3045097/php-redirect-and-send-data-via-post – mithunsatheesh 2013-02-11 13:11:04

+0

你應該有一個表格,並提交它的值與你有。另一種方式是反對w3c規則,因爲用戶在他不知情的情況下被重定向。 – mithunsatheesh 2013-02-11 13:12:06

回答

1

一般來說,當你不得不再次從PHP POST給自己,然後張貼到新的位置,是你需要一個好的指針回去看看你的應用程序的結構。

更流暢的解決方案可能會將付款流程分解爲多個步驟。

第1步 - 信息
有您目前擁有的形式,讓它後,你會在那一刻。

第2步 - 選擇網關
擁有所有的$ _ POST變量保存在網頁上的隱藏字段,並且有網關的列表,其中用戶可以選擇。當你點擊其中一個,你可以可以發送用戶到確認頁面。

第3步 - 確認頁
該網頁的主要目的,是爲用戶檢查自己輸入的數據,並確認他想要購買的物品。

這個頁面的第二個目的是把你擁有的所有數據放到隱藏的輸入中(再次),但是這次你知道在哪裏發送數據,從而知道哪些格式/命名字段應該有。


這是說,沒有什麼是從實際發佈數據形式的PHP阻礙你,但正如我所說,這是一個很好的指針,你的應用程序的結構不再有意義。

+0

謝謝,我認爲你是正確的,我只是想減少用戶必須做的點擊次數。 – trvo 2013-02-11 13:54:32

0
curl_setopt($ch,CURLOPT_POST, count($fields)); 

它接受布爾使用這樣

curl_setopt($ch,CURLOPT_POST, TRUE); 

這裏是一個完美的curl功能,可以處理所有東西后,獲取http https登錄和每件事情。

使用它像curl_grab_page($url,$data)放URL URL和數據完蛋了

function curl_grab_page($url,$data,$secure="false",$ref_url="",$login = "false",$proxy = "null",$proxystatus = "false") 

      { 
       if($login == 'true') { 
        $fp = fopen("cookie.txt", "w"); 
        fclose($fp); 
       } 
       $ch = curl_init(); 
       curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); 
       curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); 

       curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
       if ($proxystatus == 'true') { 
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE); 
        curl_setopt($ch, CURLOPT_PROXY, $proxy); 
       } 
       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 

       if($secure=='true') 
       { 
        curl_setopt($ch, CURLOPT_SSLVERSION,3); 
       } 

       curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); 


       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

       curl_setopt($ch, CURLOPT_URL, $url); 
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
       curl_setopt($ch, CURLOPT_REFERER, $ref_url); 
       curl_setopt($ch, CURLOPT_HEADER, TRUE); 
       curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
       curl_setopt($ch, CURLOPT_POST, TRUE); 
       curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
       ob_start(); 

       return curl_exec ($ch); // execute the curl command 

       curl_getinfo($ch); 
       ob_end_clean(); 
       curl_close ($ch); 
       unset($ch); 
      } 
+0

謝謝rohitarora,我糾正了這一點,但它仍然沒有重定向... – trvo 2013-02-11 13:00:55

+0

更新了我的答案希望它會幫助 – rohitarora 2013-02-11 13:04:44

+0

禁用標題,如果你不想 – rohitarora 2013-02-11 13:08:26

相關問題