2012-10-03 53 views
0

我正在与Web服务服务器进行通信,在付款完成后,服务器向我发送一个响应,作为$_POST变量。如果我尝试print_r($_POST)它看起来是空的,但是当我将变量写入文本文件时,该文件会向我显示值。我的目标是建立一个执行链接来完成用户的订单。由于$ _POST值仅在文本文件中可见,因此我正在读取文本文件中的链接并尝试执行重定向,但当到达另一页时$ _GET变量为空。我以前试图用file_get_contents("php://input")恢复原始的$ _POST变量,但没有成功。这里是我的实际代码:

<?php 
ob_start(); 
// let's get the online response parameters... 
$_VTransactionID = $_POST["VTransactionID"]; 
$_VAccountId = $_POST["VAccountId"]; 
$_VTotalAmount = $_POST["VTotalAmount"]; 
$_VPaymentMethod = $_POST["VPaymentMethod"]; 
$_VPaymentDescription = $_POST["VPaymentDescription"]; 
$_VAuthorizationNum = $_POST["VAuthorizationNum"]; 
$_VConfirmationNum = $_POST["VConfirmationNum"]; 
$_VMerchantTransId = $_POST["VMerchantTransId"]; 

////////Write LInk to file//////////////////////////////////// 
$fp = fopen("debug/OnlineResponseLog.log","w"); 

$link = "testvar.php?order_id=".$_VAccountId."&code=000&error=false&TxnGUID=".$_VConfirmationNum."\n\r"; 

if($fp){ 
    fwrite($fp,$link); 
    fclose($fp); 
}else{ 
    printf("error while trying to write on online response Log"); 
} 
//////////////////////////////////////////////////////////////////////////// 
/////REad LINK//////////////////////////////////////////////////// 
$fp = fopen("debug/OnlineResponseLog.log","r"); 
if($fp){ 
    $cad = fread($fp,filesize("debug/OnlineResponseLog.log")); 
    fclose($fp); 
}else{ 
    printf("error while trying to read online response Log"); 
} 
//////////////////////////////////////////////////// 
$url = $cad; 
//To check if values where stored. Last char is used because last characters are supposed to be digits and not an equal sign. 
$lastchar = substr($url, -1); 
if($lastchar == "=") 
     $url ="testvar.php?order_id=&code=999&error=true&TxnGUID="; 

header("Location: $url"); 
////////////////// 
?> 

任何帮助将不胜感激。如果$_POST值在print_r($_POST);

回答

0

中可见,则可以避免所有文件写入使用$_REQUEST全局变量。如果数据“已发布”,则只填充$_POST变量,而$_GET仅在发送HTTP查询字符串时填充。两个方法都填充了$_REQUEST。但是,在发布FORM期间,您应该更加谨慎地插入攻击,因此在使用$_REQUEST时,重要用户的卫生/验证仍然至关重要。

+0

感谢您的回复。我print_r($ _ REQUEST),只有这个:Array([PHPSESSID] => 6cd4c9d60fe4a9781a3df44b9be330c7 [osCAdminID] => 99e6d3f63b43926c5d6a9b48c3e6b686 [osCsid] => 1accc93fc5a96accab5802dd703742a8) –

0

我想您的帖子变量不是空的..你不能看到,因为这

ob_start(); 

任何删除功能在测试

+0

感谢您的回复。我删除了ob_start(),但仍然没有运气。 –

+0

好吧,现在我得到了你想要做的事情...所以你实际上并没有向网页发送请求,是吗?......一些其他服务器向你发送post请求,并试图查看使用print_r实际发送了什么? ?如果这是场景,那么你不能.....你的页面正在向请求发送请求的服务器发送请求,并且它不会向你的页面提供该服务器... – Surace

+0

是的!这正是情况。处理这个问题的正确方法是什么?我已经完成了一项工作,但如果有更好的方法,我会实施它。谢谢! –

0

我在两个不同的PHP文件分离任务解决问题。一个文件,将构建的链接与$ _POST变量写入文件并重定向到第二个文件,该文件从文件中读取链接并重定向到相应的页面。