【问题标题】:Receiving post data xml接收post数据xml
【发布时间】:2013-02-25 05:21:50
【问题描述】:

您好,我需要接收一个以 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) 预期失败。”问题可能存在于我们或他们哪里?

【问题讨论】:

  • 我看错了吗? $HTTP_RAW_POST_DATA 会起作用,而不是从 php://input 填充 $body 吗?从 fopen 中删除 @ 时会出现什么错误(如果有)?
  • 嗨@ChrisK 谢谢!我试过 $HTTP_RAW_POST_DATA 但它仍然是一个空白文本文件,我也尝试从 fopen 中删除 @,没有错误并且仍然是一个空白文本文件。
  • @ChrisK 我也尝试回显$fh 只是为了看看它是否包含某些内容。它显示“资源 ID #2”。

标签: php xml xml-parsing


【解决方案1】:

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

【讨论】:

  • 我见过支付网关,您在其中向他们发送发布请求并且他们做出响应。我假设他正在朝那个方向努力,否则你是对的。
  • 嗨,您是正确的,我正在遵循该流程。我正在向他们发送发布请求,然后他们会回复。代码上方也没有标题,所以我确信标题没有问题。
【解决方案2】:

看起来你正在混淆你的文件处理程序,你能看看以下代码是否运行:

$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';”)- 看看是否可以保存 - 如果没有,那么这就是你的问题。
  • 删除文件(以消除任何权限问题)。
  • 仔细检查支付网关发送到的网址是否正确。

【讨论】:

  • 您好,我已经测试了这段代码。我预计正文将是一个 base64 编码的字符串,因为这是他们发送给我的内容。但我仍然得到一个空白的回复。
  • @kiel 添加了一些建议。
  • 感谢您的建议,我尝试了第一个。它也是空白的,所以我们设法查看我们的主机中是否有防火墙块。正如预期的那样。调整了一些东西,一切都很顺利。谢谢大家!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
相关资源
最近更新 更多