2016-08-18 40 views
0

好吧,所以我需要這樣做的主要原因是因爲我需要通過自定義字段將會話變量傳遞到我的貝寶IPN。 (至少這是我認爲將變量會話傳遞給IPN的唯一解決方案)驗證表單字段前去行動鏈接

現在,我需要檢查是否沒有人使用瀏覽器檢查元素將id更改爲另一個id。所以,你可以看到,我已經有了我的if語句,如果我刪除動作鏈接,但它已經設置了表單動作,它不會運行if語句。所以問題是,如何在不移除動作鏈接的情況下驗證表單字段,或者在執行之前進行驗證?

如果這是不可能的,是否有其他的選擇嗎? (或者至少,是否有任何其他的方式來傳遞一個會話變量PayPal的IPN不顯示HTML中的ID?)

它已經近2天嘗試得到這個工作並沒有什麼...

... 
<?php 
    if (isset($_POST['submit'])) { 
     if ($_POST['custom'] == $_SESSION['id']) { 
      header('Location: https://www.sandbox.paypal.com/cgi-bin/webscr'); // This is what I tried but no success. (I did remove the action link when I added this) 
     } else { 
      header('Refresh: 0'); 
     } 
    } 
?> 
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top"> <!-- I want it to verify first if the $_POST['custom'] is equal to the $_SESSION['id'] before it goes to the PayPal website.--> 
<input type="hidden" name="cmd" value="_s-xclick"> 
<input type="hidden" name="hosted_button_id" value="*********"> 
<table> 
    <tr> 
     <td> 
      <input type="hidden" name="on0" value="Items">Items 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <select name="os0"> 
       <option value="Item1">Item1 $1.00 USD</option> 
       <option value="Item2">Item2 $2.00 USD</option> 
      </select> 
     </td> 
    </tr> 
</table> 
<input type="hidden" name="currency_code" value="USD"> 
<input type="hidden" name="custom" value="<?php echo $_SESSION['id']; ?>"/> 
<input type="submit" name="submit" value="Buy now" /> 
</form> 
?> 
... 
+0

我不會讓用戶的會話東西,他們可以在源代碼中看到。表單可以發佈到服務器上的另一個頁面,在發佈到paypal之前添加會話信息。 – Nick

回答

0

我建議將表單數據發送到服務器上的另一個頁面,然後將會話信息和帖子添加到paypal。另外,我不確定爲什麼表格正在被使用。這似乎沒有必要。

用戶輸入頁面

<form action="path/to/submit_page.php" method="post" target="_top"> <!-- I want it to verify first if the $_POST['custom'] is equal to the $_SESSION['id'] before it goes to the PayPal website.--> 
<input type="hidden" name="cmd" value="_s-xclick"> 
<input type="hidden" name="hosted_button_id" value="*********"> 
<table> 
    <tr> 
     <td> 
      <input type="hidden" name="on0" value="Items">Items 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <select name="os0"> 
       <option value="Item1">Item1 $1.00 USD</option> 
       <option value="Item2">Item2 $2.00 USD</option> 
      </select> 
     </td> 
    </tr> 
</table> 
<input type="hidden" name="currency_code" value="USD"> 
<input type="submit" name="submit" value="Buy now" /> 
</form> 

submit_page.php

<?php 

session_start(); 

$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr'; 

// Specify everything you need to send here 
$data = array('os0' => $_POST['os0'], 'currency_code' => $_POST['currency_code'], 'custom' => $_SESSION['id'], ...); 

$options = array(
    'http' => array(
     'header' => "Content-type: application/x-www-form-urlencoded\r\n", 
     'method' => 'POST', 
     'content' => http_build_query($data) 
    ) 
); 
$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 
if ($result === FALSE) { /* Handle error */ } 

// Send user to success page 
+0

file_get_contents(https://www.sandbox.paypal.com/cgi-bin/webscr):無法打開流:HTTP請求失敗! HTTP/1.0 400錯誤請求 – Owsap