处理亚马逊 MWS 数据响应

Processing Amazon MWS Feed Responses

我们建立了一个系统来为各种客户处理亚马逊提要。这对很多客户都有效,我们成功地处理了这样的提要:

<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
    <Header>
        <DocumentVersion>1.02</DocumentVersion>
        <MerchantIdentifier>REDACTED_8055</MerchantIdentifier>
    </Header>
    <MessageType>ProcessingReport</MessageType>
    <Message>
        <MessageID>1</MessageID>
        <ProcessingReport>
            <DocumentTransactionID>1016539</DocumentTransactionID>
            <StatusCode>Complete</StatusCode>
            <ProcessingSummary>
                <MessagesProcessed>218</MessagesProcessed>
                <MessagesSuccessful>218</MessagesSuccessful>
                <MessagesWithError>0</MessagesWithError>
                <MessagesWithWarning>0</MessagesWithWarning>
            </ProcessingSummary>
        </ProcessingReport>
    </Message>
</AmazonEnvelope>

但是,一位客户收到了这样的供稿响应:

<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
    <Header>
        <DocumentVersion>3.00</DocumentVersion>
        <MerchantIdentifier>REDACTED_43183</MerchantIdentifier>
    </Header>
    <MessageType>ProcessingReport</MessageType>
    <Message>
        <MessageID>1</MessageID>
        <ProcessingReport>
            <ProcessingReportType>Inventory</ProcessingReportType>
            <DocumentTransactionID>10460738</DocumentTransactionID>
            <Summary MarketplaceName="All">
               <StatusCode>Complete</StatusCode>
               <ProcessingSummary>
                   <MessagesProcessed>1</MessagesProcessed>
                   <MessagesSuccessful>1</MessagesSuccessful>
                   <MessagesWithError>0</MessagesWithError>
                   <MessagesWithWarning>0</MessagesWithWarning>
               </ProcessingSummary>
            </Summary>
        </ProcessingReport>
    </Message>
</AmazonEnvelope>

未成功解组。请注意细微差别:DocumentVersion 不同,并且 processingSummary 嵌入在模式不期望的 Summary 标记内。后者会终止 JAXB Unmarshalling 进程。我找不到任何关于为什么会发生这种情况的文档,希望这里的人以前遇到过这种情况。

我什至不能告诉 JAXB 忽略未知元素,因为我需要 ProcessingSummary,它被埋在奇怪的 "Summary" 标签下。

有谁知道为什么一个客户会得到一种类型的提要响应而另一个客户会得到另一种?

我知道这不是一个很好的答案,但基于我有机会在一些市场(特别是中国)工作的一点点,对于不同的请求,行为会有所不同,因为他们可能具有不同的能力或所需的信息。以下 link 可能会帮助您指明更好的方向:

http://docs.developer.amazonservices.com/en_US/feeds/Feeds_Overview.html#Feeds_EU_Global_Seller

我同意相同的请求会产生不同的结果很奇怪。我只用过.NET client library for Feeds so far,没有手动解析XML,但是提交到错误的服务url时,我确实遇到了错误反序列化的问题。在查看源代码(link 上面)后,我注意到他们正在使用正则表达式匹配的两种变体来尝试在未能反序列化为 "expected" ErrorResponse 对象后获取错误 code/message。结果是因为我不小心向 Orders 端点(而不是 Feeds 端点)发出请求,错误 XML 略有不同,因此甚至不匹配正则表达式,因此我什至没有得到一条有用的错误信息返回。

我提到这一切是因为:

  1. 哪个市场得到了不同的结果?您会发送到错误的端点吗?
  2. 也许作为使用 JAXB 的后备方案,您还可以使用正则表达式或 xpath 或字符串匹配来获取相关部分。

亚马逊的seller pro accounts存在不同的版本。长期与亚马逊合作并享受特殊协商价格的卖家可能拥有从未升级到最新版本的旧账户 API。我所要做的就是代表卖家联系亚马逊升级他们的账户。

在这种情况下,卖家仍然能够保持他们与亚马逊达成的有利可图的协议费率,但我不能保证永远如此。