我是 Rails 的新手(但一般来说对 Web 开发并不陌生)。我正在使用 mws-connect gem ( https://github.com/devmode/mws ) 连接到 Amazon Marketplace Web Service。我正在尝试取消订单,根据亚马逊 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>
gem 文档并不清楚如何执行此操作,因为这些示例都是关于如何添加或更新产品列表的,我对其进行了测试并且工作正常。我已经尝试了所有我能想到的方法来手动构建“提要”请求来提交它,并使用类的其余部分来处理提交的东西,因为我知道这是可行的。我在 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:尚未定义命名空间缩进
是否有任何 Rails 专业人士可能知道如何使这个 gem 工作,无论是 to_xml 方法,还是更好的如何让取消本身通过?我觉得我离得不远了。我来自 PHP 背景,所以我对此的思考过程可能有点偏离。到目前为止,我一直很喜欢 Rails,但我在这个上拔了头发,感谢任何帮助!