【问题标题】:POSTMAN - AMAZON MWS - SubmitFeed - the Content-MD5 HTTP header you passed for your feed did not matchPOSTMAN - AMAZON MWS - SubmitFeed - 您为供稿传递的 Content-MD5 HTTP 标头不匹配
【发布时间】:2020-10-25 19:33:11
【问题描述】:

我正在尝试使用SubmitFeed 网络服务通过POSTMAN 应用程序将产品上传到亚马逊。

我使用Amazon MWS Scratchpad 测试了我的请求并且它有效。但是,当我尝试从 POSTMAN 发出相同的请求时,我收到 ContentMD5DoesNotMatch 错误。

我计算的MD5值和MD5值Amazon MWS Scratchpad是一样的。因此,我认为上传文件时存在一些问题。

我错过了什么?

这是文件.xml:

<?xml version="1.0" encoding="iso-8859-1"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
  <Header>
    <DocumentVersion>1.01</DocumentVersion>
    <MerchantIdentifier>M_EXAMPLE_123456</MerchantIdentifier>
  </Header>
  <MessageType>Product</MessageType>
  <PurgeAndReplace>false</PurgeAndReplace>
  <Message>
    <MessageID>1</MessageID>
    <OperationType>Update</OperationType>
    <Product>
      <SKU>56789</SKU>
      <StandardProductID>
        <Type>ASIN</Type>
        <Value>B0EXAMPLEG</Value>
      </StandardProductID>
      <ProductTaxCode>A_GEN_NOTAX</ProductTaxCode>
      <DescriptionData>
        <Title>Example Product Title</Title>
        <Brand>Example Product Brand</Brand>
        <Description>This is an example product description.</Description>
        <BulletPoint>Example Bullet Point 1</BulletPoint>
        <BulletPoint>Example Bullet Point 2</BulletPoint>
        <MSRP currency="USD">25.19</MSRP>
        <Manufacturer>Example Product Manufacturer</Manufacturer>
        <ItemType>example-item-type</ItemType>
      </DescriptionData>
      <ProductData>
        <Health>
          <ProductType>
            <HealthMisc>
              <Ingredients>Example Ingredients</Ingredients>
              <Directions>Example Directions</Directions>
            </HealthMisc>
          </ProductType>
        </Health>
      </ProductData>
    </Product>
  </Message>
</AmazonEnvelope>

这是我的请求和响应的正文:

这是我的预请求脚本:

var HTTPVerb = "POST";
var ValueOfHostHeaderInLowercase = "https://mws-eu.amazonservices.com"; 
var HTTPRequestURI = "/";

var TimeStamp = encodeURIComponent(new Date().toISOString());

var ContentMD5Value = "7iiKpIWEgdex10Isb8Szrw=="; //I wrote it here hardcoded here, to be sure.

var CanonicalizedQueryString = 
"AWSAccessKeyId=" + "***" +
"&Action=" + "SubmitFeed" +
"&ContentMD5Value=" + encodeURIComponent(ContentMD5Value) +
"&FeedType=" + "_POST_PRODUCT_DATA_" +
"&MWSAuthToken=" + "***" +
"&MarketplaceIdList.Id.1=" + "***" +
"&Merchant=" + "***" +
"&PurgeAndReplace=" + "false" + 
"&SignatureMethod=" + "HmacSHA256" +
"&SignatureVersion=" + "2" +
"&Timestamp=" + TimeStamp +
"&Version=" + "2009-01-01";

var StringToSign = HTTPVerb + "\n" +
  "mws-eu.amazonservices.com" + "\n" +
  HTTPRequestURI + "\n" +
  CanonicalizedQueryString;

let hash = CryptoJS.HmacSHA256(StringToSign, '***');
let Signature = (CryptoJS.enc.Base64.stringify(hash));

var PostQueryString = 
"AWSAccessKeyId=" + "***" +
"&Action=" + "SubmitFeed" +
"&Merchant=" + "***" +
"&MWSAuthToken=" + "***" +
"&SignatureVersion=" + "2" +
"&Timestamp=" + TimeStamp +
"&Version=" + "2009-01-01" +
"&ContentMD5Value=" + encodeURIComponent(ContentMD5Value) +
"&Signature=" + encodeURIComponent(Signature) + 
"&SignatureMethod=" + "HmacSHA256" +
"&FeedType=" + "_POST_PRODUCT_DATA_" +
"&MarketplaceIdList.Id.1=" + "***" +
"&PurgeAndReplace=" + "false"
;

pm.environment.set('AmazonHost', ValueOfHostHeaderInLowercase + HTTPRequestURI + '?' + PostQueryString);

【问题讨论】:

    标签: post file-upload postman amazon-mws web-api-testing


    【解决方案1】:

    好吧,我们无法确定您遇到的问题,但大多数时候我遇到此问题是因为缺少参数或在某些参数(如 FeedType)中有未定义或空值。

    我在程序中打印我的规范化字符串,并与 mws-scratchpad 的请求详细信息中的String to Sign 进行比较。

    【讨论】:

    • 我已经通过检查 mws-scartchpad 创建了我的字符串,您是否使用邮递员来处理您的请求?
    • 我有一个用 node js 编写的 api。我用nodejs调用那个api,而不是直接mws。
    • 我在脚本中对 MD5 值进行了硬编码,因此与参数相关的可能性不大,可能是我缺少的邮递员设置。
    • 好的,我看到您已在规范化字符串中包含 ContentMD5 值。我们没有将它包含在我们的规范化字符串中。见这里docs.developer.amazonservices.com/en_US/dev_guide/…
    • 这是一个必填字段,如果不包含它,我不确定您将如何工作。如果我删除它,这是来自亚马逊的响应:“您必须为您的提要传递一个 Content-MD5 HTTP 标头,以便我们在处理它之前确保它没有损坏(例如从价格中删除 0)”跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2016-02-08
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多