1

我正在尝试解码 MWS Fulfillment Inbound API - GetPackageLabels 请求返回的 PDF 数据。文档在这里:http ://docs.developer.amazonservices.com/en_UK/fba_inbound/FBAInbound_GetPackageLabels.html

我已经成功拨打电话并得到了响应,但是在 php 中使用直接 base64_decode 导致生成的 pdf 已损坏。由于我也无法获得匹配的校验和,这表明我在解码过程中遗漏了一个步骤。我已尝试从多个测试货件中下载,因此不会出现单个请求在运输过程中损坏的情况。我已经概述了我在下面使用的步骤,任何帮助将不胜感激。

XML 响应:

<GetPackageLabelsResponse xmlns="http://mws.amazonaws.com/FulfillmentInboundShipment/2010-10-01/">
    <GetPackageLabelsResult>
        <TransportDocument>
            <PdfDocument>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</PdfDocument>
            <Checksum>n0Cdtwupz9V68HnMp0Go7Q==</Checksum>
        </TransportDocument>
    </GetPackageLabelsResult>
    <ResponseMetadata>
        <RequestId>87a9d81a-6ec4-4d45-b2fc-8d0e6dfbe0a8</RequestId>
    </ResponseMetadata>
</GetPackageLabelsResponse>

在 PHP 中,我已成功将 PdfDocument 字符串提取到 $data 中,这与上述内容相匹配。然后我使用以下命令输出数据:

$pdf_document = base64_decode($data);
header("Content-type: application/pdf");
header("Content-Length: " . strlen($pdf_document));
header("Content-Disposition: inline; filename=PackageLabels.pdf");
echo $pdf_document;
exit();

我已经检查了在 pdf 数据回显之前脚本没有输出任何数据。我也曾经file_put_contents($filename, $pdf_document)将数据保存到文件中,但该文件也已损坏。

我也无法让 md5 校验和匹配:

echo base64_encode(md5($pdf_document, true)); // outputs:       Pn0C06ZOgzDBfYwWXBvvow==
                                              // from response: n0Cdtwupz9V68HnMp0Go7Q==
4

1 回答 1

3

其内容PdfDocument是一个 ZIP 文件 - 前三个字母(“UE”)解码为“PK”,这是 ZIP 文件的魔术标识符。出于测试目的,您可以使用此网站下载该 ZIP 的副本。PHP 具有让您执行相同操作的功能,您必须检查编译到您的 PHP 版本中的内容。

所述 ZIP 存档的内容是一个标记PackageLabels.pdf为您要查找的 PDF 的文件。

Checksum也是 base64 编码的,示例中的解码为9f409db70ba9cfd57af079cca741a8ed. 这应该是文档数据的 MD5 散列。但是,我还没有弄清楚它是如何计算的。它与以下任何一项的 MD5都不匹配:

  • 原始 Base64 编码字符串
  • 压缩文件
  • 包含的pdf文件
于 2013-10-17T16:56:45.777 回答