使用 API 在亚马逊上更新商品数量时出错

Posted

技术标签:

【中文标题】使用 API 在亚马逊上更新商品数量时出错【英文标题】:Error in updating item quantity on Amazon using API 【发布时间】:2012-02-03 21:11:19 【问题描述】:

我已经阅读了很多关于 Amazon API 的文档,但仍然不清楚我收到的错误,文档没有提供有用的示例。

我正在使用它来更新我的库存:

我已经阅读了不同的文档,每个文档都说明了一个新的服务 url,我对此感到非常困惑..

config.ServiceURL = "https://mws.amazonservices.co.uk/FulfillmentInventory/2011-10-01";
config.ServiceURL = "https://secure.amazon.co.uk/exec/panama/seller-admin/catalog-upload/modify-only";

我启动进程和发送请求的代码是:

String accessKeyId = "#";
String secretAccessKey = "#";
String merchantId = "#";
String marketplaceId = "#";

MemoryStream stream = new MemoryStream();
stream = GenerateInventoryDocument(txtxSku.Text, merchantId, txtQuantity.Text);

const string applicationName = "C#";
const string applicationVersion = "4";

MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();

MarketplaceWebService.MarketplaceWebService service = new MarketplaceWebServiceClient(accessKeyId, secretAccessKey, applicationName, applicationVersion, config);
MarketplaceWebService.Model.SubmitFeedResponse response = new MarketplaceWebService.Model.SubmitFeedResponse();

MarketplaceWebService.Model.SubmitFeedRequest request = new MarketplaceWebService.Model.SubmitFeedRequest();
request.Merchant = merchantId;
request.MarketplaceIdList = new MarketplaceWebService.Model.IdList();
request.MarketplaceIdList.Id = new List<string>(new string[]  marketplaceId );

request.FeedContent = stream;
request.ContentMD5 = MarketplaceWebServiceClient.CalculateContentMD5(request.FeedContent);
request.FeedContent.Position = 0;

request.FeedType = "_POST_INVENTORY_AVAILABILITY_DATA_";

SubmitFeedSample.InvokeSubmitFeed(service, request);

GenerateInventoryDocument() 函数是:

MemoryStream myDocument = new MemoryStream();
string myString;

//Add the document header.
myString = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
this.AddStringToStream(ref myString, myDocument);

myString = "<AmazonEnvelope xsi:noNamespaceSchemaLocation=\"amzn-envelope.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">";
this.AddStringToStream(ref myString, myDocument);

myString = "<Header>";
this.AddStringToStream(ref myString, myDocument);

myString = "<DocumentVersion>1.01</DocumentVersion>";
this.AddStringToStream(ref myString, myDocument);

myString = "<MerchantIdentifier>" + merchantID + "</MerchantIdentifier>";
this.AddStringToStream(ref myString, myDocument);

myString = "</Header>";
this.AddStringToStream(ref myString, myDocument);

myString = "<MessageType>Inventory</MessageType>";
this.AddStringToStream(ref myString, myDocument);

myString = "<Message>";
this.AddStringToStream(ref myString, myDocument);

myString = "<MessageID>1</MessageID>";
this.AddStringToStream(ref myString, myDocument);

myString = "<OperationType>Update</OperationType>";
this.AddStringToStream(ref myString, myDocument);

myString = "<Inventory>";
this.AddStringToStream(ref myString, myDocument);

myString = "<SKU>" + sku + "</SKU>";
this.AddStringToStream(ref myString, myDocument);

myString = "<FulfillmentLatency>1</FulfillmentLatency>";
this.AddStringToStream(ref myString, myDocument);

myString = "<Quantity>" + quantity + "</Quantity>";
this.AddStringToStream(ref myString, myDocument);

myString = "</Inventory>";
this.AddStringToStream(ref myString, myDocument);

myString = "</Message>";
this.AddStringToStream(ref myString, myDocument);

myString = "</AmazonEnvelope>";
this.AddStringToStream(ref myString, myDocument);

return myDocument;

当我使用这个网址时:

config.ServiceURL = "https://mws.amazonservices.co.uk/FulfillmentInventory/2011-10-01";

我收到以下错误响应:

<ErrorResponse xmlns="http://mws.amazonaws.com/FulfillmentInventory/2011-10-01/"> 
    <Error>
       <Type>Sender</Type>
       <Code>NoSuchVersion</Code>
       <Message>The requested version ( 2010-01-01 ) is not valid.</Message>
       <Detail/>
    </Error>
    <RequestID>f35d1eb0-b8e7-40c0-8394-027619fb0762</RequestID>
</ErrorResponse>

当我使用我在另一个文档上阅读的这个服务 URL 时:

config.ServiceURL = "https://secure.amazon.co.uk/exec/panama/seller-admin/catalog-upload/modify-only";

我收到以下错误响应:

<BusinessLogicError>CUSTOMER_UNAUTHORIZED</BusinessLogicError>

如果此代码有问题,请告诉我,因为我完全按照文档进行操作,这也是我在这方面花费的第三天。也许我正在失去理智:D

这些都是小问题,我想不通。

【问题讨论】:

您是否正在尝试使用您的 FBA 库存?您正在使用专为处理常规库存而设计的 Feeds API。如果您尝试使用 FBA 库存,则需要 FBA Inbound API developer.amazonservices.com/gp/mws/… 如果您尝试使用常规库存,请查看 MarketplaceWebServiceSamples.cs,其中显示了正确的 URL 和用法。 您好,谢谢您的回复 :) .. 你能解释一下我不明白 FBA 和普通库存之间的区别吗? Fulfilled by Amazon (FBA) 是您运送到亚马逊并在亚马逊销售时将其运送给客户的库存。您很可能想要使用 Feeds API,它使您能够在亚马逊上列出新库存(常规库存)。查看 C# Feeds API 附带的 MarketplaceWebServiceSamples.cs,它将帮助您了解如何提交/编辑您的库存。 【参考方案1】:

您的代码有一些问题。我假设你想更新你自己实现的库存(而不是FBA)。我还假设您是亚马逊要求使用任何 MWS API 的专业商家。

英国的正确serviceUrlhttps://mws.amazonservices.co.uk。用于更新/添加库存的正确 feedType_POST_FLAT_FILE_LISTINGS_DATA_。您还可以使用其他 Feed 类型。请参阅Feeds API reference 的 Feed 类型枚举部分。这种类型的提要是一个制表符分隔的文件,您可以找到模板here。还有一种 XML 类型的提要,但您必须拥有正确的帐户才能使用这种类型的提要提交。这些类型的帐户仅限受邀使用。

假设您已下载 C# Feeds API,您应该查看解决方案内 MarketplaceWebService.Samples 项目中包含的 MarketplaceWebServiceSamples.cs 文件。该文件有许多已被注释掉的部分。找到处理提交 Feed 操作的那个,并使用它来了解如何提交 Feed。

您应该花更多时间阅读Feeds API documentation,尤其是“提要类型枚举”部分,因为您可以使用其他类型的提要(仅限制表符分隔)。

【讨论】:

以上是关于使用 API 在亚马逊上更新商品数量时出错的主要内容,如果未能解决你的问题,请参考以下文章

适用于类似亚马逊网站的 Paypal Masspay API

亚马逊产品广告 API - 使用 Java/SOAP 批量查找商品时出现 503 错误

亚马逊 API 调用以获取页面上列出的产品数量

亚马逊产品广告 API - 商品无法访问

Ruby on Rails 使用 API 从亚马逊购买商品?

亚马逊商城 API