POSTMAN-AMAZON MWS-SubmitFeed-为提要传递的Content-MD5 HTTP头不匹配

POSTMAN-AMAZON MWS-SubmitFeed-为提要传递的Content-MD5 HTTP头不匹配,post,file-upload,postman,amazon-mws,web-api-testing,Post,File Upload,Postman,Amazon Mws,Web Api Testing,我正在尝试使用web服务通过POSTMAN应用程序将产品上传到Amazon 我使用Amazon MWS Scratchpad测试了我的请求,它运行正常。但是,当我尝试从邮递员发出相同的请求时,我收到ContentMD5DoesNotMatch错误 我计算的MD5值和MD5值Amazon MWS Scratchpad相同。出于这个原因,我相信在上传文件时会出现一些问题 我错过了什么 这是file.xml: <?xml version="1.0" encoding=&quo

我正在尝试使用web服务通过
POSTMAN
应用程序将产品上传到Amazon

我使用Amazon MWS Scratchpad测试了我的请求,它运行正常。但是,当我尝试从
邮递员
发出相同的请求时,我收到
ContentMD5DoesNotMatch
错误

我计算的MD5值和MD5值
Amazon MWS Scratchpad
相同。出于这个原因,我相信在上传文件时会出现一些问题

我错过了什么

这是file.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>

我们无法确定您遇到的问题,但大多数情况下,我遇到这个问题是因为缺少参数或某些参数(如
FeedType
)中的值未定义或为空


我在程序中打印我的规范化字符串,并将其与mws scratchpad请求详细信息中的签名字符串进行比较。

我们无法确定您遇到的问题,但大多数情况下,我遇到此问题是因为缺少参数或某些参数中存在未定义或空值,如
FeedType


我在程序中打印我的规范化字符串,并将其与mws scratchpad请求详细信息中的
要签名的字符串进行比较。

我已经通过检查mws scartchpad创建了我的字符串,您是否使用postman处理您的请求?我有一个用node js编写的api。我使用nodejs调用该api,而不是直接使用mws。我在脚本中硬编码了MD5值,因此它不太可能与参数相关,可能是我缺少的邮递员设置。好的,我看到您在规范化字符串中包含了ContentMD5值。我们不将其包含在规范化字符串中。看这里,这是一个必填字段,我不知道如果不包括它,您如何工作。如果我删除它,这是amazon的回应:“你必须为你的提要传递一个Content-MD5 HTTP头,这样我们才能在处理它之前确保它没有损坏(例如,从价格中删除了一个0)。”我已经通过检查mws scartchpad创建了我的字符串,你是否使用postman处理你的请求?我有一个用node js编写的api。我使用nodejs调用该api,而不是直接使用mws。我在脚本中硬编码了MD5值,因此它不太可能与参数相关,可能是我缺少的邮递员设置。好的,我看到您在规范化字符串中包含了ContentMD5值。我们不将其包含在规范化字符串中。看这里,这是一个必填字段,我不知道如果不包括它,您如何工作。如果我删除它,这是amazon的回应:“您必须为您的提要传递Content-MD5 HTTP头,以便我们在处理它之前确保它没有损坏(例如,从价格中删除了0)。”
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);