2014-11-08 64 views
0

發送我有完成一個PayPal payflow當由無聲柱。它返回一個長的字符串,如:解析查詢串以作爲陣列中的無聲柱(PHP)

& AVSZIP = X & TYPE = S & BILLTOEMAIL =否%40one.com

我插入下面的腳本的加粗部分,我已經找到了解決搜索並認爲它會做的伎倆。也許我完全誤解了這是如何工作的,但我認爲它會定義$ proArray,然後在靜默文章中通過電子郵件發送給我。它發送無聲郵件,但沒有任何內容。

請告訴我,如果需要更多的信息,或者如果我只是一個白癡。我也嘗試了parse_str命令,但我想我也不知道如何正確使用它。

<?php 
//PLACE EMAIL BELOW: 
$email="[email protected]"; 
$req = ""; 
if ($_POST) 
{ 
// iterate through each name value pair 
foreach ($_POST as $key => $value) 
{ 
    $value = urlencode(stripslashes($value)); 
    $req .= "&$key=$value"; 
} 

**// Function to convert NTP string to an array 
function NVPToArray($req) 
{ 
    $proArray = array(); 
    while(strlen($req)) 
    { 
     // name 
     $keypos= strpos($req,'='); 
     $keyval = substr($req,0,$keypos); 
     // value 
     $valuepos = strpos($req,'&') ? strpos($req,'&'): strlen($req); 
     $valueval = substr($req,$keypos+1,$valuepos-$keypos-1); 
     // decoding the respose 
     $proArray[$keyval] = urldecode($valueval); 
     $req = substr($req,$valuepos+1,strlen($req)); 
    } 
}** 

//write to file 
$fh = fopen("logpost.txt", 'a');//open file and create if does not exist 
fwrite($fh, "\r\n/////////////////////////////////////////\r\n");//Just for spacing in log file 
fwrite($fh, $req);//write data 
fclose($fh);//close file 

//Email 
$mail_From = "From: [email protected]"; 
$mail_To = $email; 
$mail_Subject = "POST EXISTS"; 
$mail_Body = $proArray; 
mail($mail_To, $mail_Subject, $mail_Body, $mail_From); 

// 

//if posted return echo response 
echo $req; 
} 

// No post data received 
if (empty($_POST)) 
{ 
//write to file 
$fh = fopen("logpost.txt", 'a');//open file and create if does not exist 
fwrite($fh, "\r\n/////////////////////////////////////////\r\n");//Just for spacing in log file 
fwrite($fh, "Empty Post");//write data 
fclose($fh);//close file 

//Email 
$mail_From = "From: [email protected]"; 
$mail_To = $email; 
$mail_Subject = "Empty Post"; 
$mail_Body = ""; 
mail($mail_To, $mail_Subject, $mail_Body, $mail_From); 

//if posted return echo response 
echo "Empty Post"; 
} 

?> 

回答

0

它看起來像我真正需要做的是改變一行替換線

$mail_Body = $proArray; 

$req .= "$key = $value\n"; 

,並保持$ REQ爲$ mail_Body:

$mail_Body = $req; 

而且不使用功能NVPToArray可言。也許我是在解釋錯誤或者之前沒有提供上下文(來自我自己對腳本缺乏瞭解),但這是我正在尋找的答案。

現在我對此有一個不同的問題,但這將是完全不同的帖子。

0

這個腳本似乎有很多錯誤。

首先,你不打電話給你的新NVPToArray()函數,所以沒有代碼的被執行。

其次,即使您調用該函數,它也不會返回proArray,這樣數據就會丟失。

第三,你試圖分配$ proArray(它在你使用它的上下文中沒有定義,即使它是,你沒有調用你的NVPToArray()函數來填充它)到$ mail_body ,但是mail()函數接受一個String,而$ proArray是一個數組。所以,即使其他所有工作都正常,當$ proArray被轉換爲一個字符串時,您在郵件正文中的所有內容都將是'Array'。您必須獲取$ proArray中的鍵和值並從中創建一個字符串。最簡單的方法很可能是:

implode("\n", array_map(function($k, $v) { return $k . ' = ' . $v; }, array_keys($proArray), $proArray)); 

其中,給出一個數組:

array('AVSZIP' => 'X', 'TYPE' => 'S', 'BILLTOEMAIL' => '[email protected]') 

將返回

AVSZIP = X 
TYPE = S 
BILLTOEMAIL = [email protected] 

爲了讓您的腳本工作,改變我建議你們是:

1)添加到NVPToArray函數()的末尾。

$req .= "&$key=$value"; 

到:

return $proArray; 

2),然後用

$proArray = NVPToArray($req); 
$mail_body = implode("\n", array_map(function($k, $v) { return $k . ' = ' . $v; }, array_keys($proArray), $proArray)); 
+0

謝謝馬克。我已經做出了這些改變,但它仍然只是返回一個空白的電子郵件。我必須錯過別的東西。 – 2014-11-08 15:51:34