【问题标题】:Amazon MWS order acknowledgement returning error 25: We are unable to process the XML feed because one or more items are invalid亚马逊 MWS 订单确认返回错误 25:我们无法处理 XML 提要,因为一件或多件商品无效
【发布时间】:2013-02-20 10:35:08
【问题描述】:

我在通过亚马逊 MWS 向亚马逊提交订单确认时遇到了一些问题。

我提交的 XML 是:

<?xml version="1.0"?>
<AmazonEnvelope 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
  <Header>
    <DocumentVersion>1.01</DocumentVersion>
    <MerchantIdentifier>F85S4E7G4FSE98</MerchantIdentifier>
   </Header>
   <MessageType>OrderAcknowledgment</MessageType>
   <Message>
    <MessageID>1</MessageID>
    <OrderAcknowledgment>
      <AmazonOrderID>654-8547853-2598634</AmazonOrderID>
      <MerchantOrderID>658795124</MerchantOrderID>
      <StatusCode>Success</StatusCode>
      <Item>
        <AmazonOrderItemCode>35287489587654</AmazonOrderItemCode>
        <MerchantOrderItemID>587487</MerchantOrderItemID>
        <AmazonOrderItemCode>35287489587655</AmazonOrderItemCode>
        <MerchantOrderItemID>587488</MerchantOrderItemID>
      </Item>
    </OrderAcknowledgment>
  </Message>
</AmazonEnvelope>

在提交 XML 时,亚马逊返回的错误是:
错误 25:我们无法处理 XML 供稿,因为一项或多项无效。请重新提交 Feed。

我按照亚马逊提供的Guide to XML documentation 创建了 XML。

基于this Stack Overflow question,多个项目的格式是正确的。

我已经对照 XSD 文件检查了我的数据,并且 XML 似乎有效
https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/OrderAcknowledgement.xsd
https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/amzn-base.xsd

我尝试使用 XML XSD 验证器来验证 XML,但它返回错误:
Src-resolve:无法将名称“AmazonOrderID”解析为 A(n)“元素声明”组件。

这个错误对我来说没有多大意义,但我相信它会被返回,因为我无法在验证器中正确引用许多其他 XSC。 “AmazonOrderID”的限制位于 amzn-base.xsd 文件中,与我提供的 AmazonOrderID 匹配

<xsd:element name="AmazonOrderID">
  <xsd:simpleType>
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="\w{3}-\w{7}-\w{7}"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>

我已尝试在订单中确认单个项目,以防多个项目的结构不正确
我已经尝试完全删除项目部分,因为我阅读了项目部分有时不需要
我尝试通过我创建的 php 脚本提交,该脚本成功处理所有其他请求
我已尝试通过亚马逊暂存器提交:https://mws.amazonservices.co.uk/scratchpad/index.html

我尝试过的方法都没有解决这个问题,我完全没有想法
如果您能提供任何帮助,我们将不胜感激

谢谢

【问题讨论】:

    标签: xml xsd amazon-mws


    【解决方案1】:

    我目前正在尝试获取所有必要的 XSD 来实际验证 MWS 文件,但到目前为止运气不佳。如果缺少单个 XSD,大多数验证器都会阻塞,即使其内容与当前正在验证的文件无关。亚马逊确实很难真正验证东西——除非我遗漏了一些明显的东西。

    我的临时解决方案是使用“残缺”的 XSD,它只链接到我实际拥有的其他 XSD 的副本。使用这个文件并不完美,但总比没有好。这些 XSD 的嵌套方式,我可以用我的 XSD 验证的任何内容实际上都是有效的。唯一的缺点是存在我无法验证的有效 XML,我必须忍受。

    使用这组 XSD,我必须对您的 XML 进行以下更改才能通过验证:

    1. 将 MessageType 更改为 OrderAcknowledgement(g 后面的额外“e”。您是否喜欢该拼写可能取决于您住在池塘的哪一侧,但 XSD 命令准确拼写)
    2. 将开始和结束标记都更改为 OrderAcknowledgement(同上)
    3. 将该项目一分为二(您链接的StackOverflow question 有误)

    (我开始写这个答案的印象是 CM Serperg-McQueen 把拼写弄混了……我又读了一遍,结果证明他是正确的,我应该提高我的阅读能力技能)

    有关 AmazonOrderID 的验证器消息具有误导性。这很可能是因为该验证器也缺少 XSD 的某些部分。

    只是为了完整性。该文件通过了(残缺的)验证:

    <?xml version="1.0"?>
    <AmazonEnvelope 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
      <Header>
        <DocumentVersion>1.01</DocumentVersion>
        <MerchantIdentifier>F85S4E7G4FSE98</MerchantIdentifier>
       </Header>
       <MessageType>OrderAcknowledgement</MessageType>
       <Message>
        <MessageID>1</MessageID>
        <OrderAcknowledgement>
          <AmazonOrderID>654-8547853-2598634</AmazonOrderID>
          <MerchantOrderID>658795124</MerchantOrderID>
          <StatusCode>Success</StatusCode>
          <Item>
            <AmazonOrderItemCode>35287489587654</AmazonOrderItemCode>
            <MerchantOrderItemID>587487</MerchantOrderItemID>
          </Item>
          <Item>
            <AmazonOrderItemCode>35287489587655</AmazonOrderItemCode>
            <MerchantOrderItemID>587488</MerchantOrderItemID>
          </Item>
        </OrderAcknowledgement>
      </Message>
    </AmazonEnvelope>
    

    【讨论】:

    • 我感觉这可能是一个小错误,我更正了消息类型中的拼写,但没有更正包含确认数据的开始和结束标签,谢谢你的帮助和解释, Feed 已成功提交
    • 如何给商品添加数量?还是需要重复项目?
    【解决方案2】:

    您说“我已经根据 XSD 文件检查了我的数据并且 XML 似乎有效”,但是您提到的两个架构文档都没有声明您的最外层元素(也没有声明其他元素,但我不会打扰列表)。亚马逊告诉你的是,XML 实际上是无效的。

    那么,您的任务是使用 XSD 验证器找出您提交的文档中的无效内容。为了使这项工作,您需要将验证器指向亚马逊验证器使用的架构文档,或者它们的副本——如果您使用的验证器找不到所有必要的声明(如其错误消息所述) ,那么它不太可能对您有帮助。

    对于它的价值,我尝试使用您提到的文档 (https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/amzn-envelope.xsd) 引用的架构文档来验证您的数据,但文档 Amazon.xsd 和 MaterialHandling.xsd(包含在 Product.xsd 中)似乎不是相对参考建议的地方。因此,从 Amazon 架构文档中整合一个工作架构可能需要比预期更多的作业。

    据我所知,您的 XML 文档的直接问题是:

    • MessageType 的内容拼写为“OrderAcknowledgement”而不是“OrderAcknowledgement”。
    • MessageType 后面的元素名为 OrderAcknowledgement;我猜你的意思是 OrderAcknowledgement。
    • 您的 Item 元素有多个订单商品代码,而不仅仅是一个;我想你的意思是

      <Item>
        <AmazonOrderItemCode>35287489587654</AmazonOrderItemCode>
        <MerchantOrderItemID>587487</MerchantOrderItemID>
      </Item>
      <Item>
        <AmazonOrderItemCode>35287489587655</AmazonOrderItemCode>
        <MerchantOrderItemID>587488</MerchantOrderItemID>
      </Item>
      

    祝你好运。

    【讨论】:

    • 感谢您的回复,我已尝试按照您的建议更改消息类型,但随后出现错误“未知消息类型”,我还重组了项目部分,但不幸的是,这并没有解决这个问题,我再尝试验证 xml
    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多