Sample code for 30+ languages & platforms
Dart

MWS SubmitFeed (Amazon Marketplace Web Service)

See more HTTP Misc Examples

Uploads a feed for processing by Amazon MWS.

See Amazon MWS SubmitFeed for the Amazon MWS SubmitFeed reference documentation.

Important: The Chilkat v9.5.0.75 release accidentally breaks Amazon MWS (not AWS) authentication. If you need MWS with 9.5.0.75, send email to support@chilkatsoft.com for a hotfix, or revert back to v9.5.0.73, or update to a version after 9.5.0.75.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  // This example will send an XML file in the HTTP request body.  
  // First we'll construct the XML, then we'll compute the MD5 digest which needs to be added as a query param..

  // Construct the following XML.   (This is just a sample XML body..)

  // <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>

  // This code was generated by pasting the above XML into the online tool at http://tools.chilkat.io/xmlCreate.cshtml
  final xml = CkXml();
  xml.tag = 'AmazonEnvelope';
  xml.addAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
  xml.addAttribute('xsi:noNamespaceSchemaLocation', 'amzn-envelope.xsd');
  xml.updateChildContent('Header|DocumentVersion', '1.01');
  xml.updateChildContent('Header|MerchantIdentifier', 'M_EXAMPLE_123456');
  xml.updateChildContent('MessageType', 'Product');
  xml.updateChildContent('PurgeAndReplace', 'false');
  xml.updateChildContent('Message|MessageID', '1');
  xml.updateChildContent('Message|OperationType', 'Update');
  xml.updateChildContent('Message|Product|SKU', '56789');
  xml.updateChildContent('Message|Product|StandardProductID|Type', 'ASIN');
  xml.updateChildContent('Message|Product|StandardProductID|Value', 'B0EXAMPLEG');
  xml.updateChildContent('Message|Product|ProductTaxCode', 'A_GEN_NOTAX');
  xml.updateChildContent('Message|Product|DescriptionData|Title', 'Example Product Title');
  xml.updateChildContent('Message|Product|DescriptionData|Brand', 'Example Product Brand');
  xml.updateChildContent('Message|Product|DescriptionData|Description', 'This is an example product description.');
  xml.updateChildContent('Message|Product|DescriptionData|BulletPoint', 'Example Bullet Point 1');
  xml.updateChildContent('Message|Product|DescriptionData|BulletPoint[1]', 'Example Bullet Point 2');
  xml.updateAttrAt('Message|Product|DescriptionData|MSRP', true, 'currency', 'USD');
  xml.updateChildContent('Message|Product|DescriptionData|MSRP', '25.19');
  xml.updateChildContent('Message|Product|DescriptionData|Manufacturer', 'Example Product Manufacturer');
  xml.updateChildContent('Message|Product|DescriptionData|ItemType', 'example-item-type');
  xml.updateChildContent('Message|Product|ProductData|Health|ProductType|HealthMisc|Ingredients', 'Example Ingredients');
  xml.updateChildContent('Message|Product|ProductData|Health|ProductType|HealthMisc|Directions', 'Example Directions');

  // Get the XML in the most compact form for the feed submission.
  final sbXml = CkStringBuilder();
  xml.emitCompact = true;
  xml.getXmlSb(sbXml);

  // Get the MD5 hash..
  final crypt = CkCrypt2();
  crypt.hashAlgorithm = 'md5';
  final contentMd5Value = crypt.hashStringENC(sbXml.getAsString());

  final rest = CkRest();

  // Connect to the Amazon MWS REST server.
  // 
  // Make sure to connect to the correct Amazon MWS Endpoing, otherwise
  // you'll get an HTTP 401 response code.
  // 
  // The possible servers are:
  // 
  // North America (NA) 	https://mws.amazonservices.com
  // Europe (EU) 	https://mws-eu.amazonservices.com
  // India (IN) 	https://mws.amazonservices.in
  // China (CN) 	https://mws.amazonservices.com.cn
  // Japan (JP) 	https://mws.amazonservices.jp 
  // 
  final bTls = true;
  final port = 443;
  final bAutoReconnect = true;
  rest.connect('mws.amazonservices.com', port, bTls, bAutoReconnect);

  rest.host = 'mws.amazonservices.com';

  rest.addQueryParam('AWSAccessKeyId', '0PB842ExampleN4ZTR2');
  rest.addQueryParam('Action', 'SubmitFeed');
  rest.addQueryParam('FeedType', '_POST_PRODUCT_DATA_');
  rest.addQueryParam('MWSAuthToken', 'amzn.mws.4ea38b7b-f563-7709-4bae-87aeaEXAMPLE');
  rest.addQueryParam('MarketplaceId.Id.1', 'ATVExampleDER');
  rest.addQueryParam('SellerId', 'A1XExample5E6');
  rest.addQueryParam('ContentMD5Value', contentMd5Value);
  rest.addQueryParam('SignatureMethod', 'HmacSHA256');
  rest.addQueryParam('SignatureVersion', '2');
  rest.addQueryParam('Version', '2009-01-01');

  // Add the MWS Signature param.  (Also adds the Timestamp parameter using the curent system date/time.)
  rest.addMwsSignature('POST', '/Feeds/2009-01-01', 'mws.amazonservices.com', 'MWS_SECRET_ACCESS_KEY_ID');

  rest.addHeader('Content-Type', 'text/xml');
  final String responseXml;
  try {
    responseXml = rest.fullRequestString('POST', '/Feeds/2009-01-01', sbXml.getAsString());
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  if (rest.responseStatusCode != 200) {
    // Examine the request/response to see what happened.
    print('response status code = ${rest.responseStatusCode}');
    print('response status text = ${rest.responseStatusText}');
    print('response header: ${rest.responseHeader}');
    print('response body: $responseXml');
    print('---');
    print('LastRequestStartLine: ${rest.lastRequestStartLine}');
    print('LastRequestHeader: ${rest.lastRequestHeader}');
  }

  // Examine the XML returned in the response body.
  print(responseXml);
  print('----');
  print('Success.');
}