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.");