0

您好我需要接收一个以base64 格式编码的xml 格式的发布数据。我将从支付网关收到此信息。现在我得到的就是这个。我的代码创建了一个 txt 文件,但它是空的。代码有什么问题吗?输出应该是文本文件中的 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) 预期失败。” 问题可能存在于我们或他们哪里?

4

2 回答 2

0

由于您的文件返回空白,我建议您从支付网关验证 fopen() 函数的规范。此外,如果您正确地从它们那里获取数据,那么我会检查 base64_decode() 函数。我见过这样的情况:实际有效负载数据顶部可能存在标头或其他数据,这些数据会破坏 base64_decode 并破坏您的一天。

于 2013-02-25T05:26:01.027 回答
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);

我刚刚成功地测试了上面的代码。

我建议您做的是尝试以下操作:

  • 尝试将一段静态数据放入 $body (例如:“$body = 'test';”) - 看看是否保存 - 如果没有,那么这就是你的问题。
  • 删除文件(以删除任何权限问题)。
  • 仔细检查支付网关发送到的 URL 是否正确。
于 2013-02-25T05:38:29.620 回答