作为 eBay API 批量上传方法的一部分,我们收到来自 eBay(假设)的多部分响应,其中包含包含 XML 文件的 zip 文件的原始数据。我们在将其从原始二进制形式转换为 zip 文件时遇到问题。这是 ebay 响应的示例,其中 zip/xml 文档位于多部分消息的底部。
这是我们用来测试响应的一些快速(且肮脏)的 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 字符串。