2011-03-08 35 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  
?>