3

AmazonMWSを介してAmazonに注文確認を送信するのに問題があります。

私が提出している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を送信すると、Amazonから返されるエラーは次のとおりです。
エラー25:1つ以上のアイテムが無効であるため、XMLフィードを処理できません。フィードを再送信してください。

Amazonが提供するXMLドキュメントのガイドに従ってXMLを作成しました。

このStackOverflowの質問に基づいて、複数のアイテムの形式は正しいです。

データを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スクリプトを介して送信しようとしました。他のリクエストは正常
にAmazonスクラッチパッドを介して送信しようとしました:https ://mws.amazonservices.co.uk/scratchpad/index.html

私が試したことは何も問題を解決していません、そして私はすべてアイデア
がありませんあなたが提供できるどんな助けでも大いに感謝されます

ありがとうございました

4

2 に答える 2

4

私は現在、MWSファイルを実際に検証するために必要なすべてのXSDを入手しようとしていますが、これまでのところほとんど運がありません。ほとんどのバリデーターは、その内容が現在検証しているファイルに関連していない場合でも、単一のXSDが欠落しているとチョークします。アマゾンは確かに実際にものを検証することを難しくしています-私が明白な何かを見逃していない限り。

私の暫定的な解決策は、実際にコピーを持っている他のXSDにのみリンクする「機能不全の」XSDを使用することです。このファイルの使用は完璧ではありませんが、何もないよりはましです。これらのXSDがネストされている方法では、XSDで検証できるものはすべて実際に有効です。唯一の欠点は、検証できない有効なXMLが存在し、それを使用する必要があることです。

このXSDのセットを使用して、検証に合格するためにXMLに次の変更を加える必要がありました。

  1. MessageTypeをOrderAcknowledgementに変更します(たとえば、そのスペルが好きかどうかは、池のどちら側に住んでいるかによって異なりますが、XSDは正確なスペルをコマンドします)
  2. 開始タグと終了タグの両方をOrderAcknowledgementに変更します(上記と同じ)
  3. その1つのアイテムを2つに分割します(リンクしたStackOverflowの質問に誤りがあります)

(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>
于 2013-02-22T01:04:48.737 に答える
2

「データをXSDファイルと照合しましたが、XMLは有効なようです」と言いますが、言及したスキーマドキュメントには、最も外側の要素の宣言がありません(他の要素もありますが、リストは気にしません)。そして、Amazonがあなたに言っているのは、XMLは実際には有効ではないということです。

したがって、あなたの仕事は、XSDバリデーターを使用して、提出するドキュメントの何が無効であるかを把握することです。これを機能させるには、Amazonバリデーターで使用されているスキーマドキュメントまたはそのコピーをバリデーターに指定する必要があります-使用しているバリデーターが必要な宣言をすべて見つけられない場合(エラーメッセージで説明されているように) 、その後、それはあなたに役立つ可能性は低いです。

その価値については、あなたが言及したドキュメント(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」ではなく「OrderAcknowledgment」と綴られています。
  • MessageTypeに続く要素の名前はOrderAcknowledgmentです。OrderAcknowledgementのことだと思います。
  • Item要素には、1つではなく複数の注文アイテムコードがあります。私はあなたが次のようなものを意味すると思います

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

幸運を。

于 2013-02-21T00:06:00.350 に答える