微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

亚马逊 SP-API 更新库存

如何解决亚马逊 SP-API 更新库存

我正在尝试使用 SP-API 更新我的库存 Amazon Catalog 的库存。 这是我的代码

  private static IRestRequest CreateRequestFeedDocument()
   {
      IRestRequest restRequest = new RestRequest("Feeds/2020-09-04/documents",Method.POST);

      AmazonInventory obj = new AmazonInventory();
      obj.SKU = "GD4297-44";
      obj.Available = "true";
      obj.Quantity = "20";
      string xml = string.Empty;

      using (var stringwriter = new System.IO.StringWriter())
      {
         var serializer = new XmlSerializer(obj.GetType());
         serializer.Serialize(stringwriter,obj);
         xml = stringwriter.ToString();
      }

      restRequest.AddParameter("contentType",xml,ParameterType.RequestBody);
      restRequest.AddQueryParameter("MarketplaceIds","APJ6JRA9NG5V4,A1PA6795UKMFR9,A13V1IB3VIYZZH,A1805IZSGTT6HS,A1F83G8C2ARO7P,A1RKKUPIHCS9HS,A2NODRKZP88ZB9");


      AssumeRoleResponse assumeRoleResponse = null;

      Task.Run(async () =>
      {
         assumeRoleResponse = await GetAssumeRoletokenDetail();
      }).GetAwaiter().GetResult();

      // LWA credentials for app in amazon seller central
      var clientId = AmazonCredentials.Default.ClientId;
      var clientSecret = AmazonCredentials.Default.ClientSecret;
      // generate refresh token with 'Authorize' action for app in amazon seller central
      var refreshToken = AmazonCredentials.Default.RefreshToken;

      var lwaAuthCreds = new LWAAuthorizationCredentials
      {
         ClientId = clientId,ClientSecret = clientSecret,RefreshToken = refreshToken,Endpoint = new Uri("https://api.amazon.com/auth/o2/token")
      };

      restRequest = new LWAAuthorizationSigner(lwaAuthCreds).Sign(restRequest);

      var awsAuthCreds = new AWSAuthenticationCredentials
      {
         AccessKeyId = assumeRoleResponse.Credentials.AccessKeyId,SecretKey = assumeRoleResponse.Credentials.SecretAccessKey,Region = AmazonCredentials.Default.Region
      };

      restRequest.AddHeader("x-amz-security-token",assumeRoleResponse.Credentials.SessionToken);

      restRequest = new AWSsigv4Signer(awsAuthCreds)
         .Sign(restRequest,restClient.BaseUrl.Host);

      return restRequest;
   }

restClient = new RestClient(live_url_base);
      IRestRequest restRequest = CreateRequestFeedDocument();
      var response = restClient.Execute(restRequest);

我收到以下错误

{
  "errors": [
   { 
      "code": "InvalidInput","message": "Invalid Input","details": ""
    }
   ]
}

我在网上找到了这个解决方

添加这一行:

      restRequest.AddJsonBody(new { contentType = "text/xml; charset=UTF-8" });

我没有收到 Invalid inout 错误,但我收到了

<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

[![在此处输入图片描述][1]][1]

我错在哪里?

谢谢 [1]:https://i.stack.imgur.com/kw5JC.png

解决方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。