2

eBay API 一括アップロード メソッドの一部として、XML ファイルを含む zip ファイルの生データを含むマルチパート応答を eBay から (おそらく) 受け取ります。これを未加工のバイナリ形式から zip ファイルに変換する際に問題が発生しています。これは、マルチパート メッセージの下部にある zip/xml ドキュメントを含む eBay 応答の例です。

これは、応答をテストするために使用した簡単な (そして汚れた) PHP です。

$fpath = "http://developer.ebay.com/DevZone/file-transfer/CallRef/Samples/downloadFile_basic_out_xml.txt";
$responseXml = file_get_contents($fpath);
$endofxmlstring = "</downloadFileResponse>";
$pos = strpos($responseXml, $endofxmlstring) + 1; //plus one to catch the final return
$zipbuffer = substr($responseXml, $pos + strlen($endofxmlstring));
unset($responseXml);

$startofzipstring = "Content-ID:";
$pos = strpos($zipbuffer, $startofzipstring);
$zipbuffer = substr($zipbuffer, $pos);

$startofzipstring = "PK";
$pos = strpos($zipbuffer, $startofzipstring);
$zipbuffer = substr($zipbuffer, $pos);

$handler = fopen("response.zip", 'wb') or die("Failed. Cannot Open file to Write!");
fwrite($handler,$zipbuffer);
fclose($handler);

zip ファイルは作成されますが、破損しています。zip ファイルに渡されたコンテンツは$zipbuffer、(応答コンテンツの下部にあるコードと同じである限り) 正しいコードであるように見えるので、何が起こっているのかわかりません。

ここの ebay ドキュメントでは、ここで返されるものについて説明しています。

出力サンプルは、データ ファイルがマルチパート メッセージにどのように添付されているかを示すために、ダウンロード ファイル応答の生の形式を示しています。ルート部分 (または本文) には、ack、timestamp、version などの標準出力フィールドを含む呼び出し応答が含まれます。最後の部分には、圧縮された添付ファイルが base64binary 形式で含まれています。添付ファイル ストリームは、本文の Data フィールドのコンテンツ ID (つまり、cid) によって参照されます。ack 値が「Success」の場合、添付ファイルのバイナリデータを zip ファイルとして保存する必要があります。次に、SoldReport XML ファイルを zip ファイルから抽出する必要があります。

返されたコンテンツが「base64binary」であると述べていますが、これは実際には何ですか? これは確かに、以前に使用した base64 文字列ではありません。

4

1 に答える 1