2013-02-05 114 views
0

我是Rails的新手(但對於一般網頁開發並不陌生)。我正在使用mws-connect gem(https://github.com/devmode/mws)連接到亞馬遜商城網絡服務。我想取消訂單,並根據亞馬遜MWS API文檔,以下XML代碼是需要發送的內容(據我可以告訴):使用MWS-Connect gem的Rails中的亞馬遜MWS訂單取消請求

<?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: Namespace indent has not been defined

是否有任何防護欄優點在那裏,可能有一個想法如何使這種寶石的工作,無論是to_xml方法,或者更好的是如何讓取消本身通過?我覺得我不太遠。我來自一個PHP背景,所以我的思考過程可能會有點偏離。到目前爲止,我一直很喜歡Rails,但是我在這一款上拉了我的頭髮,任何幫助都會被讚賞!

回答

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}