2011-03-08 114 views
2

有沒有在PHP中捕獲所有帖子並獲取發送到頁面的變量的方法?PHP - 捕獲所有POST變量

我在貝寶沙盒中測試我的貝寶訂購網站,但每次我做的交易都觸發了我的代碼中的無效交易。

所以,我想捕捉貝寶發送給我的ipn頁面的所有信息,看看我能否理解發生了什麼。這可能嗎?

謝謝!

回答

5

貝寶IPN,你應該能夠使用$postdata = file_get_contents('php://input');來獲取所需的驗證回調的原始POST數據。

+0

謝謝!這工作。 – saburius 2011-03-09 00:14:50

+0

這看起來像一個簡單的方法,是否有一個特殊的處理程序來註冊以獲得這個工作? – 2012-11-27 15:02:19

+0

@TerryKernan:不,沒有特殊的處理程序。但請注意,它不適用於Content-Type:multipart/form-data。有關詳細信息,請參閱http://php.net/manual/en/wrappers.php.php。 – Anomie 2012-11-28 12:36:12

2

是。

在您的IPN頁面上,您可以非常輕鬆地記錄所有獲取,發佈和cookie變量。

試試這個:

ob_start(); 
print_r($_REQUEST); 
$data = ob_get_contents(); 
ob_end_clean(); 

file_put_contents("Path/to/log.file",$data); 
+3

simpler:file_put_contents(「path/to/log.file」,print_r($ _ REQUEST,true)); – tacone 2011-03-08 23:54:27

+0

我如何將它捕獲到變量中?我的應用程序已經發送了一封電子郵件,我可以將其添加到電子郵件正文中。 – saburius 2011-03-09 00:04:06

+0

@tacone,不知道有關print_r的第二個參數,謝謝! – 2011-03-09 18:54:51

2

我有一個簡單的方法,可以幫助我捕獲所有的POST數據:

$post_vars = ""; 
if ($_POST) { 
    $kv = array(); 
    foreach ($_POST as $k => $v) { 
     if (is_array($v)): 
      $temp = array(); 
      foreach ($v as $v2) { 
       $temp[] = $v2; 
      } 
      $kv[] = "$k=" . join("|", $temp); 
     else: 
      $kv[] = "$k=$v"; 
     endif; 
    } 
    $post_vars = join("&", $kv); 
} 

這使您可以捕獲所有的POST數據(無論其名稱或值),然後保存比在字符串,非常適合插入數據庫,儘管您可能想要對其進行網址編碼。我已經更新到包括對陣列的支持,但你必須自定義爲自己的要求,它產生的輸出是這樣的:

姓=特里&姓氏=克南&用戶id = 111111 &設備= 999999999 &文本=你好&問題= Q1 | Q2 | Q3 &答案= A1 | A2 | A3 &類型=手動

+0

我一直在使用的另一個有用的是: serialize($ _ POST); ,因爲它給出了一個字符串中的整個對象,agaiun非常適合寫入文件或存儲在數據庫中 – 2013-06-24 23:38:02

1
<?php 
$req = 'What i reveive from paypal=====';   
foreach ($_POST as $key => $value) // Loop through the key value pairs 
    {   
     $req .= "\n\r$key=$value";     // Add the key value pairs to the variable 
    } 
     mail('<Your own email address>','Data',$req,'from: <any email address of your own domain>');//mail yourself  
?>