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 文字列ではありません。