Sample code for 30+ languages & platforms
Objective-C

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 Objective-C Downloads

Objective-C
#import <CkoXml.h>
#import <CkoStringBuilder.h>
#import <CkoCrypt2.h>
#import <NSString.h>
#import <CkoRest.h>

BOOL success = NO;

// 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
CkoXml *xml = [[CkoXml alloc] init];
xml.Tag = @"AmazonEnvelope";
[xml AddAttribute: @"xmlns:xsi" value: @"http://www.w3.org/2001/XMLSchema-instance"];
[xml AddAttribute: @"xsi:noNamespaceSchemaLocation" value: @"amzn-envelope.xsd"];
[xml UpdateChildContent: @"Header|DocumentVersion" value: @"1.01"];
[xml UpdateChildContent: @"Header|MerchantIdentifier" value: @"M_EXAMPLE_123456"];
[xml UpdateChildContent: @"MessageType" value: @"Product"];
[xml UpdateChildContent: @"PurgeAndReplace" value: @"false"];
[xml UpdateChildContent: @"Message|MessageID" value: @"1"];
[xml UpdateChildContent: @"Message|OperationType" value: @"Update"];
[xml UpdateChildContent: @"Message|Product|SKU" value: @"56789"];
[xml UpdateChildContent: @"Message|Product|StandardProductID|Type" value: @"ASIN"];
[xml UpdateChildContent: @"Message|Product|StandardProductID|Value" value: @"B0EXAMPLEG"];
[xml UpdateChildContent: @"Message|Product|ProductTaxCode" value: @"A_GEN_NOTAX"];
[xml UpdateChildContent: @"Message|Product|DescriptionData|Title" value: @"Example Product Title"];
[xml UpdateChildContent: @"Message|Product|DescriptionData|Brand" value: @"Example Product Brand"];
[xml UpdateChildContent: @"Message|Product|DescriptionData|Description" value: @"This is an example product description."];
[xml UpdateChildContent: @"Message|Product|DescriptionData|BulletPoint" value: @"Example Bullet Point 1"];
[xml UpdateChildContent: @"Message|Product|DescriptionData|BulletPoint[1]" value: @"Example Bullet Point 2"];
[xml UpdateAttrAt: @"Message|Product|DescriptionData|MSRP" autoCreate: YES attrName: @"currency" attrValue: @"USD"];
[xml UpdateChildContent: @"Message|Product|DescriptionData|MSRP" value: @"25.19"];
[xml UpdateChildContent: @"Message|Product|DescriptionData|Manufacturer" value: @"Example Product Manufacturer"];
[xml UpdateChildContent: @"Message|Product|DescriptionData|ItemType" value: @"example-item-type"];
[xml UpdateChildContent: @"Message|Product|ProductData|Health|ProductType|HealthMisc|Ingredients" value: @"Example Ingredients"];
[xml UpdateChildContent: @"Message|Product|ProductData|Health|ProductType|HealthMisc|Directions" value: @"Example Directions"];

// Get the XML in the most compact form for the feed submission.
CkoStringBuilder *sbXml = [[CkoStringBuilder alloc] init];
xml.EmitCompact = YES;
[xml GetXmlSb: sbXml];

// Get the MD5 hash..
CkoCrypt2 *crypt = [[CkoCrypt2 alloc] init];
crypt.HashAlgorithm = @"md5";
NSString *contentMd5Value = [crypt HashStringENC: [sbXml GetAsString]];

CkoRest *rest = [[CkoRest alloc] init];

// 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 
// 
BOOL bTls = YES;
int port = 443;
BOOL bAutoReconnect = YES;
success = [rest Connect: @"mws.amazonservices.com" port: [NSNumber numberWithInt: port] tls: bTls autoReconnect: bAutoReconnect];

rest.Host = @"mws.amazonservices.com";

[rest AddQueryParam: @"AWSAccessKeyId" value: @"0PB842ExampleN4ZTR2"];
[rest AddQueryParam: @"Action" value: @"SubmitFeed"];
[rest AddQueryParam: @"FeedType" value: @"_POST_PRODUCT_DATA_"];
[rest AddQueryParam: @"MWSAuthToken" value: @"amzn.mws.4ea38b7b-f563-7709-4bae-87aeaEXAMPLE"];
[rest AddQueryParam: @"MarketplaceId.Id.1" value: @"ATVExampleDER"];
[rest AddQueryParam: @"SellerId" value: @"A1XExample5E6"];
[rest AddQueryParam: @"ContentMD5Value" value: contentMd5Value];
[rest AddQueryParam: @"SignatureMethod" value: @"HmacSHA256"];
[rest AddQueryParam: @"SignatureVersion" value: @"2"];
[rest AddQueryParam: @"Version" value: @"2009-01-01"];

// Add the MWS Signature param.  (Also adds the Timestamp parameter using the curent system date/time.)
[rest AddMwsSignature: @"POST" uriPath: @"/Feeds/2009-01-01" domain: @"mws.amazonservices.com" mwsSecretKey: @"MWS_SECRET_ACCESS_KEY_ID"];

[rest AddHeader: @"Content-Type" value: @"text/xml"];
NSString *responseXml = [rest FullRequestString: @"POST" uriPath: @"/Feeds/2009-01-01" bodyText: [sbXml GetAsString]];
if (rest.LastMethodSuccess != YES) {
    NSLog(@"%@",rest.LastErrorText);
    return;
}

if ([rest.ResponseStatusCode intValue] != 200) {
    // Examine the request/response to see what happened.
    NSLog(@"%@%d",@"response status code = ",[rest.ResponseStatusCode intValue]);
    NSLog(@"%@%@",@"response status text = ",rest.ResponseStatusText);
    NSLog(@"%@%@",@"response header: ",rest.ResponseHeader);
    NSLog(@"%@%@",@"response body: ",responseXml);
    NSLog(@"%@",@"---");
    NSLog(@"%@%@",@"LastRequestStartLine: ",rest.LastRequestStartLine);
    NSLog(@"%@%@",@"LastRequestHeader: ",rest.LastRequestHeader);
}

// Examine the XML returned in the response body.
NSLog(@"%@",responseXml);
NSLog(@"%@",@"----");
NSLog(@"%@",@"Success.");