2013-02-25 88 views
0

您好,我需要接收一個發佈數據,這些數據將以xml格式以base64格式編碼。 我將從支付網關接收此信息。現在我所得到的就是這個。我的代碼創建一個txt文件,但是是空的。代碼有什麼問題嗎?輸出應該是文本文件中的xml信封。接收發布數據xml

$body = ''; 
$fh = @fopen('php://input', 'r'); 
if ($fh) 
{ 
    while (!feof($fh)) 
    { 
    $s = fread($fh, 1024); 
    echo $s; 
    if (is_string($s)) 
    { 
     $body .= $s; 
    } 
    } 
    fclose($fh); 
} 

$body = base64_decode($body); 

$ourFileName = "testFile.txt"; 
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file"); 
fclose($ourFileHandle); 
$myFile = "testFile.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 

$stringData = $body; 
fwrite($fh, $stringData); 
fclose($fh); 

我試圖聯繫支付網關,他們告訴我,他們得到這個錯誤「的遠程服務器返回錯誤:(417)預期失敗。」問題在哪裏可以存在我們或他們?

+0

我誤讀了嗎? $ HTTP_RAW_POST_DATA將工作,而不是從php://輸入填充$ body?當你從fopen中刪除@時會出現什麼錯誤(如果有的話)? – ChrisK 2013-02-25 05:26:13

+0

hi @ChrisK謝謝!我試過$ HTTP_RAW_POST_DATA,但它仍然是一個空白的文本文件,也試圖從fopen中刪除@,沒有錯誤,仍然是一個空白的文本文件。 – Kiel 2013-02-25 05:34:48

+0

@ChrisK我也嘗試回聲'$ fh'只是爲了看看它是否包含一些東西。它顯示「資源ID#2」。 – Kiel 2013-02-25 05:47:24

回答

0

由於您的文件空白,我建議您驗證支付網關的fopen()函數的規格。另外,如果你正確地從它們中獲取數據,那麼我會檢查base64_decode()函數。我已經看到了在實際有效載荷數據的頂部可能存在頭部或其他數據的情況,這些數據造成了base64_decode的破壞並破壞了你的一天。

+0

我已經看到了付款網關,你向他們發送了一個發佈請求,他們回覆。我認爲他正在朝着這個方向努力,否則你是對的。 – chipadmin 2013-02-25 05:30:55

+0

嗨,你是正確的,我遵循該流程。我向他們發送了一封郵件請求,然後他們回覆。代碼上面也沒有標題,所以我確信標題沒有問題。 – Kiel 2013-02-25 05:43:24

0

它看起來像你混淆你的文件處理程序,你可以看到,如果下面的代碼運行:

$body = $HTTP_RAW_POST_DATA; 
$ourFileName = "testFile.txt"; 
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file"); 

$stringData = $body; 
fwrite($ourFileHandle, $stringData); 
fclose($ourFileHandle); 

我剛纔測試了上面的代碼自己成功。

我建議你嘗試以下操作:

  • 儘量把靜態數據塊到$體(如:「$身體=‘測試’;」) - ,看看是否可以節省 - 如果不是,那麼這是您的最終問題。
  • 刪除文件(刪除任何權限問題)。
  • 仔細檢查支付網關發送給的URL是否正確。
+0

嗨,我已經測試了這個代碼。我預計這個主體將是一個base64編碼的字符串,因爲這是他們發給我的。但我仍然會得到一個空白的迴應。 – Kiel 2013-02-25 05:45:14

+0

@kiel增加了一些建議。 – ChrisK 2013-02-25 11:34:48

+0

謝謝你的建議,我嘗試了第一個。它也是空白的,所以我們設法查看主機中是否有防火牆塊。正如預期的那樣。調整了一些東西,一切都很順利。謝謝大家! – Kiel 2013-02-28 02:33:17