0

Rails は初めてです (ただし、Web 開発全般については初めてというわけではありません)。mws-connect gem ( https://github.com/devmode/mws ) を使用して、Amazon マーケットプレイス Web サービスに接続しています。注文をキャンセルしようとしていますが、Amazon MWS API ドキュメントによると、次の 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> M_IDENTIFIER</MerchantIdentifier> 
        </Header> 
        <MessageType>
            OrderAcknowledgment
        </MessageType> 
        <Message> 
            <MessageID>1</MessageID> 
            <OrderAcknowledgement> 
                <AmazonOrderID>050-1234567-1234567</AmazonOrderID> 
                <StatusCode>Failure</StatusCode> 
                <CancelReason>Reason for cancellation</CancelReason>
            </OrderAcknowledgment> 
        </Message> 
    </AmazonEnvelope>

例はすべて、製品リストを追加または更新する方法に関するものであるため、宝石のドキュメントはこれを行う方法について明確ではありません。「フィード」リクエストを手動で作成して送信し、それが機能することを知っているので、残りのクラスを使用して送信を処理するために考えられるあらゆる方法を試しました。SalesOrder クラスにあるコードの現在の例は次のとおりです。

def self.cancel_amazon_order(amazon_order_id, cancel_reason)
  mws = Mws.connect(
    merchant: 'merchant_id',
    access: 'access_key',
    secret: 'secret'
  )
  cancel_feed = Mws::Feed.new 'merchant_id', :order_acknowledgement do
    @messages << {
      MessageID: '1',
      OrderAcknowledgement: {
        AmazonOrderID: amazon_order_id,
        StatusCode: 'Failure',
        CancelReason: cancel_reason
      }
    }
  end
end

このコードはエラーをスローしませんが、実行しようとするとcancel_feed.to_xml(フィードを送信するための次のステップが表示されます)、次のエラーが表示されます。

ArgumentError: 名前空間のインデントが定義されていません

このgemを機能させる方法、to_xmlメソッド、またはキャンセル自体を取得する方法を知っている可能性のあるレールのプロはいますか? さほど離れていない気がします。私はPHPのバックグラウンドを持っているので、これに関する私の思考プロセスはおそらく少しずれています。私はこれまで Rails を愛用してきましたが、Rails に興味を持ち始めたばかりです。

4

1 に答える 1

2

誰かが興味を持っている場合のために、私が最終的に得た解決策は次のとおりです。

mws = Mws.connect merchant: AMAZON_CONFIG['merchant_id'], access: AMAZON_CONFIG['access'], secret: AMAZON_CONFIG['secret']

cancel_xml = Nokogiri::XML::Builder.new do | xml |
  xml.AmazonEnvelope('xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:noNamespaceSchemaLocation' => 'amznenvelope.xsd') {
    xml.Header {
      xml.DocumentVersion '1.01'
      xml.MerchantIdentifier AMAZON_CONFIG['merchant_id']
    }
    xml.MessageType 'OrderAcknowledgement'
    xml.Message {
      xml.MessageID '1'
      xml.OrderAcknowledgement {
        xml.AmazonOrderID order_id
        xml.StatusCode 'Failure'
        items.each do | item |
          xml.Item {
            xml.AmazonOrderItemCode item[:item_code]
            xml.CancelReason 'NoInventory'
          }
        end

      }
    }
  }
end.to_xml

mws.feeds.submit cancel_xml, {feed_type: :order_acknowledgement}
于 2013-02-05T19:16:15.377 に答える