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を汚して、1日を台無しにする状況を見てきました。

于 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 に答える